This commit is contained in:
Matthias Koefferlein 2023-08-12 21:34:45 +02:00
parent b710b32fbe
commit 255f2dd572
2 changed files with 44 additions and 32 deletions

View File

@ -441,44 +441,56 @@ Triangles::find_closest_edge (const db::DPoint &p, db::Vertex *vstart, bool insi
void
Triangles::insert_new_vertex (db::Vertex *vertex, std::vector<db::Triangle *> *new_triangles_out)
{
#if 0
if len(self.vertexes) <= 3:
if len(self.vertexes) == 3:
# form the first triangle
s1 = TriangleEdge(self.vertexes[0], self.vertexes[1])
s2 = TriangleEdge(self.vertexes[1], self.vertexes[2])
s3 = TriangleEdge(self.vertexes[2], self.vertexes[0])
# avoid degenerate Triangles to happen here @@@
if vprod_sign(s1.d(), s2.d()) == 0:
self.vertexes = [] # reject some points?
else:
t = Triangle(s1, s2, s3)
if new_triangles_out is not None:
new_triangles_out.append(t)
self.triangles.append(t)
return 0
if (mp_triangles.empty ()) {
new_triangles = []
if (m_vertex_heap.size () == 3) {
# Find closest edge
closest_edge = self.find_closest_edge(vertex)
assert(closest_edge is not None)
std::vector<db::Vertex *> vv;
for (auto v = m_vertex_heap.begin (); v != m_vertex_heap.end (); ++v) {
vv.push_back (v.operator-> ());
}
s1 = TriangleEdge(vertex, closest_edge.p1)
s2 = TriangleEdge(vertex, closest_edge.p2)
// form the first triangle
db::TriangleEdge *s1 = create_edge (vv[0], vv[1]);
db::TriangleEdge *s2 = create_edge (vv[1], vv[2]);
db::TriangleEdge *s3 = create_edge (vv[2], vv[0]);
t = Triangle(s1, closest_edge, s2)
self.triangles.append(t)
new_triangles.append(t)
if (db::vprod_sign (s1->d (), s2->d ()) == 0) {
// avoid degenerate Triangles to happen here
tl_assert (false);
} else {
db::Triangle *t = create_triangle (s1, s2, s3);
if (new_triangles_out) {
new_triangles_out->push_back (t);
}
}
self._add_more_triangles(new_triangles, closest_edge, closest_edge.p1, vertex, s1)
self._add_more_triangles(new_triangles, closest_edge, closest_edge.p2, vertex, s2)
}
if new_triangles_out is not None:
new_triangles_out += new_triangles
return;
return self._fix_triangles(new_triangles, [], new_triangles_out)
#endif
}
std::vector<db::Triangle *> new_triangles;
// Find closest edge
db::TriangleEdge *closest_edge = find_closest_edge (*vertex);
tl_assert (closest_edge != 0);
db::TriangleEdge *s1 = create_edge (vertex, closest_edge->v1 ());
db::TriangleEdge *s2 = create_edge (vertex, closest_edge->v2 ());
db::Triangle *t = create_triangle (s1, closest_edge, s2);
new_triangles.push_back (t);
add_more_triangles (new_triangles, closest_edge, closest_edge->v1 (), vertex, s1);
add_more_triangles (new_triangles, closest_edge, closest_edge->v2 (), vertex, s2);
if (new_triangles_out) {
new_triangles_out->insert (new_triangles_out->end (), new_triangles.begin (), new_triangles.end ());
}
fix_triangles (new_triangles, std::vector<db::TriangleEdge *> (), new_triangles_out);
}
void

View File

@ -92,7 +92,7 @@ private:
db::TriangleEdge *incoming_edge,
db::Vertex *from_vertex, db::Vertex *to_vertex,
db::TriangleEdge *conn_edge);
void insert_new_vertex (db::Vertex *vertex, std::vector<db::Triangle *> *new_triangles_out);
void insert_new_vertex(db::Vertex *vertex, std::vector<db::Triangle *> *new_triangles_out);
};
}