Revision: 54528
http://brlcad.svn.sourceforge.net/brlcad/?rev=54528&view=rev
Author: indianlarry
Date: 2013-03-04 17:28:50 +0000 (Mon, 04 Mar 2013)
Log Message:
-----------
Added function AddPointCheckForDuplicates() to class SweepContext to extend the
package to check for duplicates in both the constrained polygon inputs
(SweepContext(std::vector<Point*> &polyline) constructor, AddOuterLoop() and
AddHole() functions) or from the new AddPointCheckForDuplicatees().
Modified Paths:
--------------
brlcad/trunk/src/other/poly2tri/poly2tri/sweep/sweep_context.cc
brlcad/trunk/src/other/poly2tri/poly2tri/sweep/sweep_context.h
Modified: brlcad/trunk/src/other/poly2tri/poly2tri/sweep/sweep_context.cc
===================================================================
--- brlcad/trunk/src/other/poly2tri/poly2tri/sweep/sweep_context.cc
2013-03-04 17:06:14 UTC (rev 54527)
+++ brlcad/trunk/src/other/poly2tri/poly2tri/sweep/sweep_context.cc
2013-03-04 17:28:50 UTC (rev 54528)
@@ -34,41 +34,75 @@
namespace p2t {
+bool SweepContext::lessthanpoint::operator() (const Point* a, const Point* b)
const
+{
+ if (a->y < b->y) {
+ return true;
+ } else if (a->y == b->y) {
+ return (a->x < b->x);
+ }
+ return false;
+}
+
SweepContext::SweepContext()
{
basin = Basin();
edge_event = EdgeEvent();
}
-SweepContext::SweepContext(std::vector<Point*> &polyline) : points_(polyline)
+SweepContext::SweepContext(std::vector<Point*> &polyline)
{
+ std::vector<Point*> polylineunique;
basin = Basin();
edge_event = EdgeEvent();
- InitEdges(points_);
+ for(unsigned int i = 0; i < polyline.size(); i++) {
+ Point *p = AddPointCheckForDuplicates(polyline[i]);
+ polylineunique.push_back(p);
+ }
+ InitEdges(polylineunique);
+
}
void SweepContext::AddOuterLoop(std::vector<Point*> &polyline)
{
- InitEdges(polyline);
+ std::vector<Point*> polylineunique;
for(unsigned int i = 0; i < polyline.size(); i++) {
- points_.push_back(polyline[i]);
+ Point *p = AddPointCheckForDuplicates(polyline[i]);
+ polylineunique.push_back(p);
}
+ InitEdges(polylineunique);
+
}
void SweepContext::AddHole(std::vector<Point*> &polyline)
{
- InitEdges(polyline);
+ std::vector<Point*> polylineunique;
for(unsigned int i = 0; i < polyline.size(); i++) {
- points_.push_back(polyline[i]);
+ Point *p = AddPointCheckForDuplicates(polyline[i]);
+ polylineunique.push_back(p);
}
+ InitEdges(polylineunique);
}
void SweepContext::AddPoint(Point* point) {
points_.push_back(point);
}
+Point* SweepContext::AddPointCheckForDuplicates(Point* point) {
+ std::pair<std::set<Point*,lessthanpoint>::iterator,bool> result;
+
+ result = points_set_.insert(point);
+ if (result.second) {
+ points_.push_back(point);
+ return point;
+ }
+ Point* found_point = *points_set_.find(point);
+ delete point;
+ return found_point;
+}
+
std::vector<Triangle*>& SweepContext::GetTriangles()
{
return triangles_;
@@ -214,6 +248,7 @@
delete edge_list[i];
}
points_.clear();
+ points_set_.clear();
}
}
\ No newline at end of file
Modified: brlcad/trunk/src/other/poly2tri/poly2tri/sweep/sweep_context.h
===================================================================
--- brlcad/trunk/src/other/poly2tri/poly2tri/sweep/sweep_context.h
2013-03-04 17:06:14 UTC (rev 54527)
+++ brlcad/trunk/src/other/poly2tri/poly2tri/sweep/sweep_context.h
2013-03-04 17:28:50 UTC (rev 54528)
@@ -33,6 +33,7 @@
#define SWEEP_CONTEXT_H
#include <list>
+#include <set>
#include <vector>
#include <cstddef>
@@ -88,6 +89,7 @@
void AddHole(std::vector<Point*> &polyline);
void AddPoint(Point* point);
+Point* AddPointCheckForDuplicates(Point* point);
AdvancingFront* front();
@@ -128,6 +130,11 @@
}
};
+struct lessthanpoint{
+public:
+ bool operator() (const Point* a, const Point* b) const;
+};
+
Basin basin;
EdgeEvent edge_event;
@@ -138,6 +145,7 @@
std::vector<Triangle*> triangles_;
std::list<Triangle*> map_;
std::vector<Point*> points_;
+std::set<Point*,lessthanpoint> points_set_;
// Advancing front
AdvancingFront* front_;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits