Improved EarClipTesselator.

More resillient against zero area ears.
Less prone to make invalid traingles due to vertices touching edge
but might fail to produce triangles at all in that case.
This commit is contained in:
Jacob Støren
2020-01-24 11:14:37 +01:00
parent 1949940b96
commit cb664d9820
2 changed files with 38 additions and 16 deletions

View File

@@ -209,9 +209,16 @@ public:
virtual bool calculateTriangles( std::vector<size_t>* triangles );
protected:
bool isTriangleValid( std::list<size_t>::const_iterator u,
std::list<size_t>::const_iterator v,
std::list<size_t>::const_iterator w ) const;
enum TriangleStatus
{
INVALID_TRIANGLE,
NEAR_ZERO_AREA_TRIANGLE,
VALID_TRIANGLE
};
TriangleStatus calculateTriangleStatus( std::list<size_t>::const_iterator u,
std::list<size_t>::const_iterator v,
std::list<size_t>::const_iterator w ) const;
bool isPointInsideTriangle( const cvf::Vec3d& A, const cvf::Vec3d& B, const cvf::Vec3d& C, const cvf::Vec3d& P ) const;
double calculateProjectedPolygonArea() const;