PolyFEM
Loading...
Searching...
No Matches
ClipperUtils.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <Eigen/Core>
4#ifdef POLYFEM_WITH_CLIPPER
5#include <clipper.hpp>
6#endif
7#include <polyclipper_vector2d.hh>
8#include <polyclipper_vector3d.hh>
9
10namespace polyfem::utils
11{
13 static constexpr int64_t DOUBLE_TO_INT_SCALE_FACTOR = 1l << 51;
14
16 {
17 public:
18 PolygonClipping() = delete;
19
24 static std::vector<Eigen::MatrixXd> clip(
25 const Eigen::MatrixXd &subject_polygon,
26 const Eigen::MatrixXd &clipping_polygon);
27
28#ifdef POLYFEM_WITH_CLIPPER
29 static ClipperLib::IntPoint toClipperPoint(const Eigen::RowVector2d &p);
30 static Eigen::RowVector2d fromClipperPoint(const ClipperLib::IntPoint &p);
31
32 static ClipperLib::Path toClipperPolygon(const Eigen::MatrixXd &V);
33 static Eigen::MatrixXd fromClipperPolygon(const ClipperLib::Path &path);
34#endif
35
36 static PolyClipper::Vector2d toPolyClipperVector(const Eigen::Vector2d &v);
37 static Eigen::Vector2d fromPolyClipperVector(const PolyClipper::Vector2d &v);
38 };
39
41 {
42 public:
43 TriangleClipping() = delete;
44
50 static std::vector<Eigen::MatrixXd> clip(
51 const Eigen::MatrixXd &subject_triangle,
52 const Eigen::MatrixXd &clipping_triangle);
53 };
54
56 {
57 public:
59
60 typedef std::vector<int> Polygon;
61 typedef std::vector<Polygon> Polygons;
62
67 static std::vector<Eigen::MatrixXd> clip(
68 const Eigen::MatrixXd &subject_tet,
69 const Eigen::MatrixXd &clipping_tet);
70
71 static PolyClipper::Vector3d toPolyClipperVector(const Eigen::Vector3d &v);
72 static Eigen::Vector3d fromPolyClipperVector(const PolyClipper::Vector3d &v);
73 };
74
75} // namespace polyfem::utils
int V
static PolyClipper::Vector2d toPolyClipperVector(const Eigen::Vector2d &v)
static std::vector< Eigen::MatrixXd > clip(const Eigen::MatrixXd &subject_polygon, const Eigen::MatrixXd &clipping_polygon)
Clip a polygon using convex polygon.
static Eigen::Vector2d fromPolyClipperVector(const PolyClipper::Vector2d &v)
static Eigen::Vector3d fromPolyClipperVector(const PolyClipper::Vector3d &v)
static std::vector< Eigen::MatrixXd > clip(const Eigen::MatrixXd &subject_tet, const Eigen::MatrixXd &clipping_tet)
Clip a tetrahedron using tetrahedron.
static PolyClipper::Vector3d toPolyClipperVector(const Eigen::Vector3d &v)
static std::vector< Eigen::MatrixXd > clip(const Eigen::MatrixXd &subject_triangle, const Eigen::MatrixXd &clipping_triangle)
Clip a triangle using triangle.