#ifndef GenerateContours_h #define GenerateContours_h #include #include #include #include namespace MeshGenerator { struct PlanarStraightLineGraph { struct Edge { int v0 = 0; int v1 = 0; explicit Edge(int v0_, int v1_) : v0(v0_), v1(v1_) { } }; std::vector points; std::vector edges; }; struct Face { std::vector vertices; }; enum class LineJoin { Bevel, Miter, Round }; enum class LineCap { Butt, Round, Square }; std::vector generateStroke(std::vector const &paths, float lineWidth, float miterLimit, LineJoin lineJoin, LineCap lineCap); std::unique_ptr makePlanarStraightLineGraph(std::vector const &paths); std::vector findFaces(PlanarStraightLineGraph const &graph); bool faceInsideFace(PlanarStraightLineGraph const &graph, Face const &face, Face const &otherFace); float triangleArea(Point const &v1, Point const &v2, Point const &v3); bool traceRay(std::vector const &paths, Point const &sourcePoint, bool isNonZero); } #endif /* GenerateContours_h */