Ported Polygon->is_valid() and ExPolygon->is_valid()

This commit is contained in:
Alessandro Ranellucci 2013-08-26 23:27:51 +02:00
parent da0b85c0d9
commit fe42427a54
13 changed files with 37 additions and 54 deletions

View file

@ -40,6 +40,16 @@ ExPolygon::area() const
return a;
}
bool
ExPolygon::is_valid() const
{
if (!this->contour.is_valid() || !this->contour.is_counter_clockwise()) return false;
for (Polygons::const_iterator it = this->holes.begin(); it != this->holes.end(); ++it) {
if (!(*it).is_valid() || (*it).is_counter_clockwise()) return false;
}
return true;
}
SV*
ExPolygon::to_SV() {
const unsigned int num_holes = this->holes.size();

View file

@ -20,6 +20,7 @@ class ExPolygon
void translate(double x, double y);
void rotate(double angle, Point* center);
double area() const;
bool is_valid() const;
};
typedef std::vector<ExPolygon> ExPolygons;

View file

@ -92,4 +92,10 @@ Polygon::make_clockwise()
return false;
}
bool
Polygon::is_valid() const
{
return this->points.size() >= 3;
}
}

View file

@ -20,6 +20,7 @@ class Polygon : public MultiPoint {
bool is_counter_clockwise() const;
bool make_counter_clockwise();
bool make_clockwise();
bool is_valid() const;
};
typedef std::vector<Polygon> Polygons;