27 auto d_coords = this->inPointSet()->getDataPtr()->getPoints();
29 c_coords.assign(d_coords);
30 std::vector<DataType3f::Coord> vts;
31 for (
size_t i = 0; i < c_coords.size(); i++)
33 vts.push_back(c_coords[i]);
35 std::vector<TopologyModule::Triangle> outTriangles;
82 const Vec3f& a = vertices[triangle[0]];
83 const Vec3f& b = vertices[triangle[1]];
84 const Vec3f& c = vertices[triangle[2]];
92 for (
size_t i = 0; i < vertices.size(); ++i) {
93 if (i == triangle[0] || i == triangle[1] || i == triangle[2]) {
105 std::vector<TopologyModule::Triangle>
earClipping(
const std::vector<Vec3f>& vertices) {
106 std::vector<TopologyModule::Triangle> triangles;
107 std::vector<int> indices(vertices.size());
108 std::iota(indices.begin(), indices.end(), 0);
111 for (
size_t i = 0; i < vertices.size(); i++)
113 int prev = indices[(i + indices.size() - 1) % indices.size()];
114 int curr = indices[i];
115 int next = indices[(i + 1) % indices.size()];
117 stand_N += (vertices[prev] - vertices[curr]).
cross(vertices[curr] - vertices[next]);
121 while (indices.size() > 2) {
122 bool earFound =
false;
123 for (
size_t i = 0; i < indices.size(); ++i) {
124 int prev = indices[(i + indices.size() - 1) % indices.size()];
125 int curr = indices[i];
126 int next = indices[(i + 1) % indices.size()];
129 if (
isEar(vertices, triangle, stand_N)) {
130 triangles.push_back(triangle);
131 indices.erase(indices.begin() + i);
137 for (
int i = 0; i < indices.size() - 2; i++)