Changes in src/tesselation.hpp [27bd2f:ce70970]
- File:
-
- 1 edited
-
src/tesselation.hpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/tesselation.hpp
r27bd2f rce70970 23 23 #include <list> 24 24 #include <set> 25 #include <stack> 25 26 26 27 #include "atom_particleinfo.hpp" … … 42 43 #define DoTecplotOutput 1 43 44 #define DoRaster3DOutput 1 44 #define DoVRMLOutput 145 #define DoVRMLOutput 0 45 46 #define TecplotSuffix ".dat" 46 47 #define Raster3DSuffix ".r3d" 47 48 #define VRMLSUffix ".wrl" 48 49 50 #define ParallelEpsilon 1e-3 51 49 52 // ======================================================= some template functions ========================================= 50 53 54 #define IndexToIndex map <int, int> 55 51 56 #define PointMap map < int, class BoundaryPointSet * > 57 #define PointSet set < class BoundaryPointSet * > 58 #define PointList list < class BoundaryPointSet * > 52 59 #define PointPair pair < int, class BoundaryPointSet * > 53 60 #define PointTestPair pair < PointMap::iterator, bool > 61 54 62 #define CandidateList list <class CandidateForTesselation *> 55 63 #define CandidateMap map <class BoundaryLineSet *, class CandidateForTesselation *> 56 64 57 65 #define LineMap multimap < int, class BoundaryLineSet * > 66 #define LineSet set < class BoundaryLineSet * > 67 #define LineList list < class BoundaryLineSet * > 58 68 #define LinePair pair < int, class BoundaryLineSet * > 59 69 #define LineTestPair pair < LineMap::iterator, bool > 60 70 61 71 #define TriangleMap map < int, class BoundaryTriangleSet * > 72 #define TriangleSet set < class BoundaryTriangleSet * > 73 #define TriangleList list < class BoundaryTriangleSet * > 62 74 #define TrianglePair pair < int, class BoundaryTriangleSet * > 63 75 #define TriangleTestPair pair < TrianglePair::iterator, bool > 64 76 77 #define PolygonMap map < int, class BoundaryPolygonSet * > 78 #define PolygonSet set < class BoundaryPolygonSet * > 79 #define PolygonList list < class BoundaryPolygonSet * > 80 81 #define DistanceToPointMap multimap <double, class BoundaryPointSet * > 82 #define DistanceToPointPair pair <double, class BoundaryPointSet * > 83 65 84 #define DistanceMultiMap multimap <double, pair < PointMap::iterator, PointMap::iterator> > 66 85 #define DistanceMultiMapPair pair <double, pair < PointMap::iterator, PointMap::iterator> > 67 86 68 87 #define TesselPointList list <TesselPoint *> 88 #define TesselPointSet set <TesselPoint *> 89 90 #define ListOfTesselPointList list<list <TesselPoint *> *> 91 92 enum centers {Opt, OtherOpt}; 69 93 70 94 /********************************************** declarations *******************************/ … … 86 110 public: 87 111 BoundaryPointSet(); 88 BoundaryPointSet(TesselPoint * Walker);112 BoundaryPointSet(TesselPoint * const Walker); 89 113 ~BoundaryPointSet(); 90 114 91 void AddLine( class BoundaryLineSet *line);115 void AddLine(BoundaryLineSet * const line); 92 116 93 117 LineMap lines; … … 105 129 public: 106 130 BoundaryLineSet(); 107 BoundaryLineSet(class BoundaryPointSet *Point[2], const int number); 131 BoundaryLineSet(BoundaryPointSet * const Point[2], const int number); 132 BoundaryLineSet(BoundaryPointSet * const Point1, BoundaryPointSet * const Point2, const int number); 108 133 ~BoundaryLineSet(); 109 134 110 void AddTriangle( class BoundaryTriangleSet *triangle);111 bool IsConnectedTo(c lass BoundaryLineSet *line);112 bool ContainsBoundaryPoint(c lass BoundaryPointSet *point);113 bool CheckConvexityCriterion() ;114 class BoundaryPointSet *GetOtherEndpoint(c lass BoundaryPointSet *);135 void AddTriangle(BoundaryTriangleSet * const triangle); 136 bool IsConnectedTo(const BoundaryLineSet * const line) const; 137 bool ContainsBoundaryPoint(const BoundaryPointSet * const point) const; 138 bool CheckConvexityCriterion() const; 139 class BoundaryPointSet *GetOtherEndpoint(const BoundaryPointSet * const point) const; 115 140 116 141 class BoundaryPointSet *endpoints[2]; … … 127 152 public: 128 153 BoundaryTriangleSet(); 129 BoundaryTriangleSet(class BoundaryLineSet * line[3],int number);154 BoundaryTriangleSet(class BoundaryLineSet * const line[3], const int number); 130 155 ~BoundaryTriangleSet(); 131 156 132 void GetNormalVector(Vector &NormalVector); 133 void GetCenter(Vector *center); 134 bool GetIntersectionInsideTriangle(Vector *MolCenter, Vector *x, Vector *Intersection); 135 bool ContainsBoundaryLine(class BoundaryLineSet *line); 136 bool ContainsBoundaryPoint(class BoundaryPointSet *point); 137 bool ContainsBoundaryPoint(class TesselPoint *point); 138 class BoundaryPointSet *GetThirdEndpoint(class BoundaryLineSet *line); 139 bool IsPresentTupel(class BoundaryPointSet *Points[3]); 140 bool IsPresentTupel(class BoundaryTriangleSet *T); 157 void GetNormalVector(const Vector &NormalVector); 158 void GetCenter(Vector * const center) const; 159 bool GetIntersectionInsideTriangle(const Vector * const MolCenter, const Vector * const x, Vector * const Intersection) const; 160 double GetClosestPointInsideTriangle(const Vector * const x, Vector * const ClosestPoint) const; 161 bool ContainsBoundaryLine(const BoundaryLineSet * const line) const; 162 bool ContainsBoundaryPoint(const BoundaryPointSet * const point) const; 163 bool ContainsBoundaryPoint(const TesselPoint * const point) const; 164 class BoundaryPointSet *GetThirdEndpoint(const BoundaryLineSet * const line) const; 165 bool IsPresentTupel(const BoundaryPointSet * const Points[3]) const; 166 bool IsPresentTupel(const BoundaryTriangleSet * const T) const; 141 167 142 168 class BoundaryPointSet *endpoints[3]; 143 169 class BoundaryLineSet *lines[3]; 144 170 Vector NormalVector; 171 Vector SphereCenter; 145 172 int Nr; 146 173 }; 147 174 148 175 ostream & operator << (ostream &ost, const BoundaryTriangleSet &a); 176 177 178 // ======================================================== class BoundaryTriangleSet ======================================= 179 180 /** Set of BoundaryPointSet. 181 * This is just meant as a container for a group of endpoints, extending the node, line, triangle concept. However, this has 182 * only marginally something to do with the tesselation. Hence, there is no incorporation into the bookkeeping of the Tesselation 183 * class (i.e. no allocation, no deletion). 184 * \note we assume that the set of endpoints reside (more or less) on a plane. 185 */ 186 class BoundaryPolygonSet { 187 public: 188 BoundaryPolygonSet(); 189 ~BoundaryPolygonSet(); 190 191 Vector * GetNormalVector(const Vector &NormalVector) const; 192 void GetCenter(Vector *center) const; 193 bool ContainsBoundaryLine(const BoundaryLineSet * const line) const; 194 bool ContainsBoundaryPoint(const BoundaryPointSet * const point) const; 195 bool ContainsBoundaryPoint(const TesselPoint * const point) const; 196 bool ContainsBoundaryTriangle(const BoundaryTriangleSet * const point) const; 197 bool ContainsPresentTupel(const BoundaryPointSet * const * Points, const int dim) const; 198 bool ContainsPresentTupel(const BoundaryPolygonSet * const P) const; 199 bool ContainsPresentTupel(const PointSet &endpoints) const; 200 TriangleSet * GetAllContainedTrianglesFromEndpoints() const; 201 bool FillPolygonFromTrianglesOfLine(const BoundaryLineSet * const line); 202 203 PointSet endpoints; 204 int Nr; 205 }; 206 207 ostream & operator << (ostream &ost, const BoundaryPolygonSet &a); 149 208 150 209 // =========================================================== class TESSELPOINT =========================================== … … 178 237 virtual TesselPoint *GetPoint() const { return NULL; }; 179 238 virtual TesselPoint *GetTerminalPoint() const { return NULL; }; 239 virtual int GetMaxId() const { return 0; }; 180 240 virtual void GoToNext() const {}; 181 241 virtual void GoToPrevious() const {}; … … 191 251 public : 192 252 CandidateForTesselation(BoundaryLineSet* currentBaseLine); 193 CandidateForTesselation(TesselPoint* candidate, BoundaryLineSet* currentBaseLine, Vector OptCandidateCenter, Vector OtherOptCandidateCenter);253 CandidateForTesselation(TesselPoint* candidate, BoundaryLineSet* currentBaseLine, BoundaryPointSet *point, Vector OptCandidateCenter, Vector OtherOptCandidateCenter); 194 254 ~CandidateForTesselation(); 195 255 256 bool CheckValidity(const double RADIUS, const LinkedCell *LC) const; 257 196 258 TesselPointList pointlist; 197 BoundaryLineSet *BaseLine; 259 const BoundaryLineSet * BaseLine; 260 const BoundaryPointSet * ThirdPoint; 261 const BoundaryTriangleSet *T; 262 Vector OldCenter; 198 263 Vector OptCenter; 199 264 Vector OtherOptCenter; … … 216 281 void AddTesselationPoint(TesselPoint* Candidate, const int n); 217 282 void SetTesselationPoint(TesselPoint* Candidate, const int n) const; 218 void AddTesselationLine(class BoundaryPointSet *a, class BoundaryPointSet *b, const int n); 219 void AlwaysAddTesselationTriangleLine(class BoundaryPointSet *a, class BoundaryPointSet *b, const int n); 283 void AddTesselationLine(const Vector * const OptCenter, const BoundaryPointSet * const candidate, class BoundaryPointSet *a, class BoundaryPointSet *b, const int n); 284 void AddNewTesselationTriangleLine(class BoundaryPointSet *a, class BoundaryPointSet *b, const int n); 285 void AddExistingTesselationTriangleLine(class BoundaryLineSet *FindLine, int n); 220 286 void AddTesselationTriangle(); 221 287 void AddTesselationTriangle(const int nr); 222 void AddCandidateTriangle(CandidateForTesselation CandidateLine); 288 void AddCandidateTriangle(CandidateForTesselation &CandidateLine, enum centers type); 289 void AddDegeneratedTriangle(CandidateForTesselation &CandidateLine, const double RADIUS, const LinkedCell *LC); 290 void AddCandidatePolygon(CandidateForTesselation CandidateLine, const double RADIUS, const LinkedCell *LC); 223 291 void RemoveTesselationTriangle(class BoundaryTriangleSet *triangle); 224 292 void RemoveTesselationLine(class BoundaryLineSet *line); 225 293 void RemoveTesselationPoint(class BoundaryPointSet *point); 294 bool CheckDegeneracy(CandidateForTesselation &CandidateLine, const double RADIUS, const LinkedCell *LC) const; 226 295 227 296 228 297 // concave envelope 229 voidFindStartingTriangle(const double RADIUS, const LinkedCell *LC);298 bool FindStartingTriangle(const double RADIUS, const LinkedCell *LC); 230 299 void FindSecondPointForTesselation(class TesselPoint* a, Vector Oben, class TesselPoint*& OptCandidate, double Storage[3], double RADIUS, const LinkedCell *LC); 231 void FindThirdPointForTesselation(Vector &NormalVector, Vector &SearchDirection, Vector &OldSphereCenter, CandidateForTesselation &CandidateLine, const class TesselPoint * const ThirdNode, const double RADIUS, const LinkedCell *LC) const; 232 bool FindNextSuitableTriangle(CandidateForTesselation &CandidateLine, BoundaryTriangleSet &T, const double& RADIUS, const LinkedCell *LC); 300 void FindThirdPointForTesselation(const Vector &NormalVector, const Vector &SearchDirection, const Vector &OldSphereCenter, CandidateForTesselation &CandidateLine, const class BoundaryPointSet * const ThirdNode, const double RADIUS, const LinkedCell *LC) const; 301 bool FindNextSuitableTriangle(CandidateForTesselation &CandidateLine, const BoundaryTriangleSet &T, const double& RADIUS, const LinkedCell *LC); 302 bool FindCandidatesforOpenLines(const double RADIUS, const LinkedCell *&LCList); 233 303 int CheckPresenceOfTriangle(class TesselPoint *Candidates[3]) const; 234 304 class BoundaryTriangleSet * GetPresentTriangle(TesselPoint *Candidates[3]); … … 242 312 double PickFarthestofTwoBaselines(class BoundaryLineSet *Base); 243 313 class BoundaryPointSet *IsConvexRectangle(class BoundaryLineSet *Base); 244 map<int, int>* FindAllDegeneratedTriangles();245 map<int, int>* FindAllDegeneratedLines();314 IndexToIndex * FindAllDegeneratedTriangles(); 315 IndexToIndex * FindAllDegeneratedLines(); 246 316 void RemoveDegeneratedTriangles(); 247 317 void AddBoundaryPointByDegeneratedTriangle(class TesselPoint *point, LinkedCell *LC); 248 249 set<TesselPoint*> * GetAllConnectedPoints(const TesselPoint* const Point) const; 250 set<BoundaryTriangleSet*> *GetAllTriangles(const BoundaryPointSet * const Point) const; 251 list<list<TesselPoint*> *> * GetPathsOfConnectedPoints(const TesselPoint* const Point) const; 252 list<list<TesselPoint*> *> * GetClosedPathsOfConnectedPoints(const TesselPoint* const Point) const; 253 list<TesselPoint*> * GetCircleOfSetOfPoints(set<TesselPoint*> *SetOfNeighbours, const TesselPoint* const Point, const Vector * const Reference = NULL) const; 254 class BoundaryPointSet *GetCommonEndpoint(const BoundaryLineSet * line1, const BoundaryLineSet * line2) const; 255 list<BoundaryTriangleSet*> *FindTriangles(const TesselPoint* const Points[3]) const; 256 list<BoundaryTriangleSet*> * FindClosestTrianglesToPoint(const Vector *x, const LinkedCell* LC) const; 257 class BoundaryTriangleSet * FindClosestTriangleToPoint(const Vector *x, const LinkedCell* LC) const; 318 int CorrectAllDegeneratedPolygons(); 319 320 TesselPointSet * GetAllConnectedPoints(const TesselPoint* const Point) const; 321 TriangleSet * GetAllTriangles(const BoundaryPointSet * const Point) const; 322 ListOfTesselPointList * GetPathsOfConnectedPoints(const TesselPoint* const Point) const; 323 ListOfTesselPointList * GetClosedPathsOfConnectedPoints(const TesselPoint* const Point) const; 324 TesselPointList * GetCircleOfSetOfPoints(TesselPointSet *SetOfNeighbours, const TesselPoint* const Point, const Vector * const Reference = NULL) const; 325 TesselPointList * GetCircleOfConnectedTriangles(TesselPointSet *SetOfNeighbours, const TesselPoint* const Point, const Vector * const Reference) const; 326 class BoundaryPointSet * GetCommonEndpoint(const BoundaryLineSet * line1, const BoundaryLineSet * line2) const; 327 TriangleList * FindTriangles(const TesselPoint* const Points[3]) const; 328 TriangleList * FindClosestTrianglesToVector(const Vector *x, const LinkedCell* LC) const; 329 BoundaryTriangleSet * FindClosestTriangleToVector(const Vector *x, const LinkedCell* LC) const; 258 330 bool IsInnerPoint(const Vector &Point, const LinkedCell* const LC) const; 259 bool IsInnerPoint(const TesselPoint * const Point, const LinkedCell* const LC) const; 331 double GetDistanceSquaredToTriangle(const Vector &Point, const BoundaryTriangleSet* const triangle) const; 332 double GetDistanceToSurface(const Vector &Point, const LinkedCell* const LC) const; 333 BoundaryTriangleSet * GetClosestTriangleOnSurface(const Vector &Point, const LinkedCell* const LC) const; 260 334 bool AddBoundaryPoint(TesselPoint * Walker, const int n); 335 DistanceToPointMap * FindClosestBoundaryPointsToVector(const Vector *x, const LinkedCell* LC) const; 336 BoundaryLineSet * FindClosestBoundaryLineToVector(const Vector *x, const LinkedCell* LC) const; 261 337 262 338 // print for debugging … … 299 375 300 376 //bool HasOtherBaselineBetterCandidate(const BoundaryLineSet * const BaseRay, const TesselPoint * const OptCandidate, double ShortestAngle, double RADIUS, const LinkedCell * const LC) const; 377 void FindDegeneratedCandidatesforOpenLines(TesselPoint * const Sprinter, const Vector * const OptCenter); 301 378 }; 302 379
Note:
See TracChangeset
for help on using the changeset viewer.
