Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/poly2tri/common/shapes.h')
-rw-r--r--src/poly2tri/common/shapes.h48
1 files changed, 25 insertions, 23 deletions
diff --git a/src/poly2tri/common/shapes.h b/src/poly2tri/common/shapes.h
index 3b8a5247e..7f0b1e76a 100644
--- a/src/poly2tri/common/shapes.h
+++ b/src/poly2tri/common/shapes.h
@@ -1,6 +1,6 @@
/*
- * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
- * http://code.google.com/p/poly2tri/
+ * Poly2Tri Copyright (c) 2009-2018, Poly2Tri Contributors
+ * https://github.com/jhasse/poly2tri
*
* All rights reserved.
*
@@ -33,10 +33,10 @@
#ifndef SHAPES_H
#define SHAPES_H
-#include <vector>
-#include <cstddef>
-#include <assert.h>
#include <cmath>
+#include <cstddef>
+#include <stdexcept>
+#include <vector>
namespace p2t {
@@ -119,6 +119,8 @@ struct Point {
};
+std::ostream& operator<<(std::ostream&, const Point&);
+
// Represents a simple polygon's edge
struct Edge {
@@ -130,13 +132,13 @@ struct Edge {
if (p1.y > p2.y) {
q = &p1;
p = &p2;
- } else if (p1.y == p2.y) {
+ } else if (std::abs(p1.y - p2.y) < 1e-10) {
if (p1.x > p2.x) {
q = &p1;
p = &p2;
- } else if (p1.x == p2.x) {
+ } else if (std::abs(p1.x - p2.x) < 1e-10) {
// Repeat points
- assert(false);
+ throw std::runtime_error("Edge::Edge: p1 == p2");
}
}
@@ -171,23 +173,23 @@ void MarkConstrainedEdge(int index);
void MarkConstrainedEdge(Edge& edge);
void MarkConstrainedEdge(Point* p, Point* q);
-int Index(const Point* p) const;
-int EdgeIndex(const Point* p1, const Point* p2) const;
+int Index(const Point* p);
+int EdgeIndex(const Point* p1, const Point* p2);
Triangle* NeighborCW(const Point& point);
Triangle* NeighborCCW(const Point& point);
-bool GetConstrainedEdgeCCW(const Point& p) const;
-bool GetConstrainedEdgeCW(const Point& p) const;
+bool GetConstrainedEdgeCCW(const Point& p);
+bool GetConstrainedEdgeCW(const Point& p);
void SetConstrainedEdgeCCW(const Point& p, bool ce);
void SetConstrainedEdgeCW(const Point& p, bool ce);
-bool GetDelunayEdgeCCW(const Point& p) const;
-bool GetDelunayEdgeCW(const Point& p) const;
+bool GetDelunayEdgeCCW(const Point& p);
+bool GetDelunayEdgeCW(const Point& p);
void SetDelunayEdgeCCW(const Point& p, bool e);
void SetDelunayEdgeCW(const Point& p, bool e);
-bool Contains(const Point* p) const;
-bool Contains(const Edge& e) const;
-bool Contains(const Point* p, const Point* q) const;
+bool Contains(const Point* p);
+bool Contains(const Edge& e);
+bool Contains(const Point* p, const Point* q);
void Legalize(Point& point);
void Legalize(Point& opoint, Point& npoint);
/**
@@ -198,7 +200,7 @@ void ClearNeighbor(const Triangle *triangle);
void ClearNeighbors();
void ClearDelunayEdges();
-inline bool IsInterior() const;
+inline bool IsInterior();
inline void IsInterior(bool b);
Triangle& NeighborAcross(const Point& opoint);
@@ -293,22 +295,22 @@ inline Triangle* Triangle::GetNeighbor(int index)
return neighbors_[index];
}
-inline bool Triangle::Contains(const Point* p) const
+inline bool Triangle::Contains(const Point* p)
{
return p == points_[0] || p == points_[1] || p == points_[2];
}
-inline bool Triangle::Contains(const Edge& e) const
+inline bool Triangle::Contains(const Edge& e)
{
return Contains(e.p) && Contains(e.q);
}
-inline bool Triangle::Contains(const Point* p, const Point* q) const
+inline bool Triangle::Contains(const Point* p, const Point* q)
{
return Contains(p) && Contains(q);
}
-inline bool Triangle::IsInterior() const
+inline bool Triangle::IsInterior()
{
return interior_;
}
@@ -320,4 +322,4 @@ inline void Triangle::IsInterior(bool b)
}
-#endif \ No newline at end of file
+#endif