Skip to content

v0.2.49..v0.2.50 changeset DelaunayTriangulation.cpp

Garret Voltz edited this page Nov 6, 2019 · 1 revision
diff --git a/tgs/src/main/cpp/tgs/DelaunayTriangulation/DelaunayTriangulation.cpp b/tgs/src/main/cpp/tgs/DelaunayTriangulation/DelaunayTriangulation.cpp
index 4d4f8d0..506236c 100644
--- a/tgs/src/main/cpp/tgs/DelaunayTriangulation/DelaunayTriangulation.cpp
+++ b/tgs/src/main/cpp/tgs/DelaunayTriangulation/DelaunayTriangulation.cpp
@@ -189,6 +189,7 @@ public:
   void DeleteEdge(InternalEdge * e);
   void Draw();
   InternalEdge* MakeEdge();
+  Point2d* MakePoint(const Point2d& pt);
 
   InternalEdge* getStartingEdge() const { return startingEdge; }
 
@@ -200,6 +201,7 @@ private:
   InternalEdge * startingEdge;
 
   set<QuadEdge*> _edges;
+  vector<Point2d*> _data;
 };
 
 class QuadEdge
@@ -322,6 +324,13 @@ InternalEdge *Subdivision::MakeEdge()
   return ql->e;
 }
 
+Point2d* Subdivision::MakePoint(const Point2d& pt)
+{
+  Point2d* point = new Point2d(pt);
+  _data.push_back(point);
+  return point;
+}
+
 void Splice(InternalEdge * a, InternalEdge * b)
 // This operator affects the two edge rings around the origins of a and b,
 // and, independently, the two edge rings around the left faces of a and b.
@@ -356,8 +365,9 @@ void Subdivision::DeleteEdge(InternalEdge * e)
 Subdivision::Subdivision(const Point2d & a, const Point2d & b, const Point2d & c)
 // Initialize a subdivision to the triangle defined by the points a, b, c.
 {
-  Point2d *da, *db, *dc;
-  da = new Point2d(a), db = new Point2d(b), dc = new Point2d(c);
+  Point2d* da = MakePoint(a);
+  Point2d* db = MakePoint(b);
+  Point2d* dc = MakePoint(c);
   InternalEdge *ea = MakeEdge();
   ea->EndPoints(da, db);
   InternalEdge *eb = MakeEdge();
@@ -373,10 +383,11 @@ Subdivision::Subdivision(const Point2d & a, const Point2d & b, const Point2d & c
 Subdivision::~Subdivision()
 {
   for (set<QuadEdge*>::iterator it = _edges.begin(); it != _edges.end(); ++it)
-  {
-    delete *it;
-  }
+    delete (*it);
   _edges.clear();
+  for (vector<Point2d*>::iterator it = _data.begin(); it != _data.end(); ++it)
+    delete (*it);
+  _data.clear();
 }
 
 InternalEdge *Subdivision::Connect(InternalEdge * a, InternalEdge * b)
@@ -551,7 +562,7 @@ void Subdivision::InsertSite(const Point2d & x)
   // triangle (or quadrilateral, if the new point fell on an
   // existing edge.)
   InternalEdge *base = MakeEdge();
-  base->EndPoints(e->Org(), new Point2d(x));
+  base->EndPoints(e->Org(), MakePoint(x));
   Splice(base, e);
   startingEdge = base;
   do
Clone this wiki locally