Changes in src/tesselation.hpp [ce70970:27bd2f]
- File:
-
- 1 edited
-
src/tesselation.hpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/tesselation.hpp
rce70970 r27bd2f 23 23 #include <list> 24 24 #include <set> 25 #include <stack>26 25 27 26 #include "atom_particleinfo.hpp" … … 43 42 #define DoTecplotOutput 1 44 43 #define DoRaster3DOutput 1 45 #define DoVRMLOutput 044 #define DoVRMLOutput 1 46 45 #define TecplotSuffix ".dat" 47 46 #define Raster3DSuffix ".r3d" 48 47 #define VRMLSUffix ".wrl" 49 48 50 #define ParallelEpsilon 1e-351 52 49 // ======================================================= some template functions ========================================= 53 50 54 #define IndexToIndex map <int, int>55 56 51 #define PointMap map < int, class BoundaryPointSet * > 57 #define PointSet set < class BoundaryPointSet * >58 #define PointList list < class BoundaryPointSet * >59 52 #define PointPair pair < int, class BoundaryPointSet * > 60 53 #define PointTestPair pair < PointMap::iterator, bool > 61 62 54 #define CandidateList list <class CandidateForTesselation *> 63 55 #define CandidateMap map <class BoundaryLineSet *, class CandidateForTesselation *> 64 56 65 57 #define LineMap multimap < int, class BoundaryLineSet * > 66 #define LineSet set < class BoundaryLineSet * >67 #define LineList list < class BoundaryLineSet * >68 58 #define LinePair pair < int, class BoundaryLineSet * > 69 59 #define LineTestPair pair < LineMap::iterator, bool > 70 60 71 61 #define TriangleMap map < int, class BoundaryTriangleSet * > 72 #define TriangleSet set < class BoundaryTriangleSet * >73 #define TriangleList list < class BoundaryTriangleSet * >74 62 #define TrianglePair pair < int, class BoundaryTriangleSet * > 75 63 #define TriangleTestPair pair < TrianglePair::iterator, bool > 76 64 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 84 65 #define DistanceMultiMap multimap <double, pair < PointMap::iterator, PointMap::iterator> > 85 66 #define DistanceMultiMapPair pair <double, pair < PointMap::iterator, PointMap::iterator> > 86 67 87 68 #define TesselPointList list <TesselPoint *> 88 #define TesselPointSet set <TesselPoint *>89 90 #define ListOfTesselPointList list<list <TesselPoint *> *>91 92 enum centers {Opt, OtherOpt};93 69 94 70 /********************************************** declarations *******************************/ … … 110 86 public: 111 87 BoundaryPointSet(); 112 BoundaryPointSet(TesselPoint * constWalker);88 BoundaryPointSet(TesselPoint * Walker); 113 89 ~BoundaryPointSet(); 114 90 115 void AddLine( BoundaryLineSet * constline);91 void AddLine(class BoundaryLineSet *line); 116 92 117 93 LineMap lines; … … 129 105 public: 130 106 BoundaryLineSet(); 131 BoundaryLineSet(BoundaryPointSet * const Point[2], const int number); 132 BoundaryLineSet(BoundaryPointSet * const Point1, BoundaryPointSet * const Point2, const int number); 107 BoundaryLineSet(class BoundaryPointSet *Point[2], const int number); 133 108 ~BoundaryLineSet(); 134 109 135 void AddTriangle( BoundaryTriangleSet * consttriangle);136 bool IsConnectedTo(c onst BoundaryLineSet * const line) const;137 bool ContainsBoundaryPoint(c onst BoundaryPointSet * const point) const;138 bool CheckConvexityCriterion() const;139 class BoundaryPointSet *GetOtherEndpoint(c onst BoundaryPointSet * const point) const;110 void AddTriangle(class BoundaryTriangleSet *triangle); 111 bool IsConnectedTo(class BoundaryLineSet *line); 112 bool ContainsBoundaryPoint(class BoundaryPointSet *point); 113 bool CheckConvexityCriterion(); 114 class BoundaryPointSet *GetOtherEndpoint(class BoundaryPointSet *); 140 115 141 116 class BoundaryPointSet *endpoints[2]; … … 152 127 public: 153 128 BoundaryTriangleSet(); 154 BoundaryTriangleSet(class BoundaryLineSet * const line[3], constint number);129 BoundaryTriangleSet(class BoundaryLineSet *line[3], int number); 155 130 ~BoundaryTriangleSet(); 156 131 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; 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); 167 141 168 142 class BoundaryPointSet *endpoints[3]; 169 143 class BoundaryLineSet *lines[3]; 170 144 Vector NormalVector; 171 Vector SphereCenter;172 145 int Nr; 173 146 }; 174 147 175 148 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 has182 * only marginally something to do with the tesselation. Hence, there is no incorporation into the bookkeeping of the Tesselation183 * 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);208 149 209 150 // =========================================================== class TESSELPOINT =========================================== … … 237 178 virtual TesselPoint *GetPoint() const { return NULL; }; 238 179 virtual TesselPoint *GetTerminalPoint() const { return NULL; }; 239 virtual int GetMaxId() const { return 0; };240 180 virtual void GoToNext() const {}; 241 181 virtual void GoToPrevious() const {}; … … 251 191 public : 252 192 CandidateForTesselation(BoundaryLineSet* currentBaseLine); 253 CandidateForTesselation(TesselPoint* candidate, BoundaryLineSet* currentBaseLine, BoundaryPointSet *point,Vector OptCandidateCenter, Vector OtherOptCandidateCenter);193 CandidateForTesselation(TesselPoint* candidate, BoundaryLineSet* currentBaseLine, Vector OptCandidateCenter, Vector OtherOptCandidateCenter); 254 194 ~CandidateForTesselation(); 255 195 256 bool CheckValidity(const double RADIUS, const LinkedCell *LC) const;257 258 196 TesselPointList pointlist; 259 const BoundaryLineSet * BaseLine; 260 const BoundaryPointSet * ThirdPoint; 261 const BoundaryTriangleSet *T; 262 Vector OldCenter; 197 BoundaryLineSet *BaseLine; 263 198 Vector OptCenter; 264 199 Vector OtherOptCenter; … … 281 216 void AddTesselationPoint(TesselPoint* Candidate, const int n); 282 217 void SetTesselationPoint(TesselPoint* Candidate, const int n) const; 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); 218 void AddTesselationLine(class BoundaryPointSet *a, class BoundaryPointSet *b, const int n); 219 void AlwaysAddTesselationTriangleLine(class BoundaryPointSet *a, class BoundaryPointSet *b, const int n); 286 220 void AddTesselationTriangle(); 287 221 void AddTesselationTriangle(const int nr); 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); 222 void AddCandidateTriangle(CandidateForTesselation CandidateLine); 291 223 void RemoveTesselationTriangle(class BoundaryTriangleSet *triangle); 292 224 void RemoveTesselationLine(class BoundaryLineSet *line); 293 225 void RemoveTesselationPoint(class BoundaryPointSet *point); 294 bool CheckDegeneracy(CandidateForTesselation &CandidateLine, const double RADIUS, const LinkedCell *LC) const;295 226 296 227 297 228 // concave envelope 298 boolFindStartingTriangle(const double RADIUS, const LinkedCell *LC);229 void FindStartingTriangle(const double RADIUS, const LinkedCell *LC); 299 230 void FindSecondPointForTesselation(class TesselPoint* a, Vector Oben, class TesselPoint*& OptCandidate, double Storage[3], 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); 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); 303 233 int CheckPresenceOfTriangle(class TesselPoint *Candidates[3]) const; 304 234 class BoundaryTriangleSet * GetPresentTriangle(TesselPoint *Candidates[3]); … … 312 242 double PickFarthestofTwoBaselines(class BoundaryLineSet *Base); 313 243 class BoundaryPointSet *IsConvexRectangle(class BoundaryLineSet *Base); 314 IndexToIndex* FindAllDegeneratedTriangles();315 IndexToIndex* FindAllDegeneratedLines();244 map<int, int> * FindAllDegeneratedTriangles(); 245 map<int, int> * FindAllDegeneratedLines(); 316 246 void RemoveDegeneratedTriangles(); 317 247 void AddBoundaryPointByDegeneratedTriangle(class TesselPoint *point, LinkedCell *LC); 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; 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; 330 258 bool IsInnerPoint(const Vector &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; 259 bool IsInnerPoint(const TesselPoint * const Point, const LinkedCell* const LC) const; 334 260 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;337 261 338 262 // print for debugging … … 375 299 376 300 //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);378 301 }; 379 302
Note:
See TracChangeset
for help on using the changeset viewer.
