Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifndef triSurfaceMesh_H
00041 #define triSurfaceMesh_H
00042
00043 #include <meshTools/treeBoundBox.H>
00044 #include "searchableSurface.H"
00045 #include <OpenFOAM/objectRegistry.H>
00046 #include <meshTools/indexedOctree.H>
00047 #include <meshTools/treeDataTriSurface.H>
00048 #include <meshTools/treeDataEdge.H>
00049 #include <OpenFOAM/EdgeMap.H>
00050
00051
00052
00053 namespace Foam
00054 {
00055
00056
00057
00058
00059
00060 class triSurfaceMesh
00061 :
00062 public searchableSurface,
00063 public objectRegistry,
00064 public triSurface
00065 {
00066 private:
00067
00068
00069
00070
00071 scalar tolerance_;
00072
00073
00074 label maxTreeDepth_;
00075
00076
00077 mutable autoPtr<indexedOctree<treeDataTriSurface> > tree_;
00078
00079
00080 mutable autoPtr<indexedOctree<treeDataEdge> > edgeTree_;
00081
00082
00083 mutable wordList regions_;
00084
00085
00086 mutable label surfaceClosed_;
00087
00088
00089
00091
00092
00093
00094
00095
00096
00097
00098
00099 static const fileName& checkFile
00100 (
00101 const fileName& fName,
00102 const fileName& objectName
00103 );
00104
00105
00106 static bool addFaceToEdge
00107 (
00108 const edge&,
00109 EdgeMap<label>&
00110 );
00111
00112
00113
00114 bool isSurfaceClosed() const;
00115
00116
00117
00118 static void getNextIntersections
00119 (
00120 const indexedOctree<treeDataTriSurface>& octree,
00121 const point& start,
00122 const point& end,
00123 const vector& smallVec,
00124 DynamicList<pointIndexHit, 1, 1>& hits
00125 );
00126
00127
00128 triSurfaceMesh(const triSurfaceMesh&);
00129
00130
00131 void operator=(const triSurfaceMesh&);
00132
00133
00134 protected:
00135
00136
00137 void calcBounds(boundBox& bb, label& nPoints) const;
00138
00139 public:
00140
00141
00142 TypeName("triSurfaceMesh");
00143
00144
00145
00146
00147
00148 triSurfaceMesh(const IOobject&, const triSurface&);
00149
00150
00151 triSurfaceMesh(const IOobject& io);
00152
00153
00154
00155 triSurfaceMesh
00156 (
00157 const IOobject& io,
00158 const dictionary& dict
00159 );
00160
00161
00162
00163
00164 virtual ~triSurfaceMesh();
00165
00166
00167 void clearOut();
00168
00169
00170
00171
00172
00173 virtual void movePoints(const pointField&);
00174
00175
00176 const indexedOctree<treeDataTriSurface>& tree() const;
00177
00178
00179 const indexedOctree<treeDataEdge>& edgeTree() const;
00180
00181
00182
00183
00184 virtual const wordList& regions() const;
00185
00186
00187 virtual bool hasVolumeType() const;
00188
00189
00190 virtual label size() const
00191 {
00192 return triSurface::size();
00193 }
00194
00195
00196
00197 virtual pointField coordinates() const;
00198
00199 virtual void findNearest
00200 (
00201 const pointField& sample,
00202 const scalarField& nearestDistSqr,
00203 List<pointIndexHit>&
00204 ) const;
00205
00206 virtual void findLine
00207 (
00208 const pointField& start,
00209 const pointField& end,
00210 List<pointIndexHit>&
00211 ) const;
00212
00213 virtual void findLineAny
00214 (
00215 const pointField& start,
00216 const pointField& end,
00217 List<pointIndexHit>&
00218 ) const;
00219
00220
00221 virtual void findLineAll
00222 (
00223 const pointField& start,
00224 const pointField& end,
00225 List<List<pointIndexHit> >&
00226 ) const;
00227
00228
00229 virtual void getRegion
00230 (
00231 const List<pointIndexHit>&,
00232 labelList& region
00233 ) const;
00234
00235
00236 virtual void getNormal
00237 (
00238 const List<pointIndexHit>&,
00239 vectorField& normal
00240 ) const;
00241
00242
00243
00244 virtual void getVolumeType
00245 (
00246 const pointField&,
00247 List<volumeType>&
00248 ) const;
00249
00250
00251
00252
00253
00254
00255
00256 virtual void distribute
00257 (
00258 const List<treeBoundBox>&,
00259 const bool keepNonLocal,
00260 autoPtr<mapDistribute>& faceMap,
00261 autoPtr<mapDistribute>& pointMap
00262 )
00263 {}
00264
00265
00266 virtual void setField(const labelList& values);
00267
00268
00269
00270 virtual void getField(const List<pointIndexHit>&, labelList&) const;
00271
00272
00273
00274
00275 bool writeData(Ostream&) const
00276 {
00277 notImplemented("triSurfaceMesh::writeData(Ostream&) const");
00278 return false;
00279 }
00280
00281
00282 virtual bool writeObject
00283 (
00284 IOstream::streamFormat fmt,
00285 IOstream::versionNumber ver,
00286 IOstream::compressionType cmp
00287 ) const;
00288
00289 };
00290
00291
00292
00293
00294 }
00295
00296
00297
00298 #endif
00299
00300