This commit is contained in:
Matthias Koefferlein
2026-08-22 22:21:01 +02:00
parent 9fad2ff1fa
commit a8669d35ce
2 changed files with 14 additions and 18 deletions
+10 -14
View File
@@ -221,24 +221,24 @@ Triangulation::find_points_around (Vertex *vertex, double radius)
}
Vertex *
Triangulation::insert_point (const db::DPoint &point, std::list<tl::weak_ptr<Polygon> > *new_triangles, double snap)
Triangulation::insert_point (const db::DPoint &point, std::list<tl::weak_ptr<Polygon> > *new_triangles)
{
return insert (mp_graph->create_vertex (point), new_triangles, snap);
return insert (mp_graph->create_vertex (point), new_triangles);
}
Vertex *
Triangulation::insert_point (db::DCoord x, db::DCoord y, std::list<tl::weak_ptr<Polygon> > *new_triangles, double snap)
Triangulation::insert_point (db::DCoord x, db::DCoord y, std::list<tl::weak_ptr<Polygon> > *new_triangles)
{
return insert (mp_graph->create_vertex (x, y), new_triangles, snap);
return insert (mp_graph->create_vertex (x, y), new_triangles);
}
Vertex *
Triangulation::insert (Vertex *vertex, std::list<tl::weak_ptr<Polygon> > *new_triangles, double snap)
Triangulation::insert (Vertex *vertex, std::list<tl::weak_ptr<Polygon> > *new_triangles)
{
Polygon *in_triangle = 0;
Edge *on_edge = 0;
if (! find_triangle_for_point (*vertex, snap, in_triangle, on_edge)) {
if (! find_triangle_for_point (*vertex, in_triangle, on_edge)) {
// the new vertex is outside the domain
tl_assert (! m_is_constrained);
@@ -249,11 +249,9 @@ Triangulation::insert (Vertex *vertex, std::list<tl::weak_ptr<Polygon> > *new_tr
if (on_edge) {
double snap_range = std::max (db::epsilon, snap * on_edge->length ());
if (snap > 0.0 ? vertex->distance (*on_edge->v1 ()) < snap_range : is_equal (*vertex, *on_edge->v1 ())) {
if (is_equal (*vertex, *on_edge->v1 ())) {
return on_edge->v1 ();
} else if (snap > 0.0 ? vertex->distance (*on_edge->v2 ()) < snap_range : is_equal (*vertex, *on_edge->v2 ())) {
} else if (is_equal (*vertex, *on_edge->v2 ())) {
return on_edge->v2 ();
} else {
split_triangles_on_edge (vertex, on_edge, new_triangles);
@@ -273,15 +271,13 @@ Triangulation::insert (Vertex *vertex, std::list<tl::weak_ptr<Polygon> > *new_tr
}
}
bool Triangulation::find_triangle_for_point (const db::DPoint &point, double snap, Polygon *&in_triangle, Edge *&on_edge)
bool Triangulation::find_triangle_for_point (const db::DPoint &point, Polygon *&in_triangle, Edge *&on_edge)
{
Edge *edge = find_closest_edge (point);
if (edge) {
double snap_range = std::max (db::epsilon, snap * edge->length ());
if (snap > 0.0 ? std::abs (edge->edge ().distance (point)) < snap_range : edge->side_of (point) == 0) {
if (edge->side_of (point) == 0) {
on_edge = edge;
return true;
+4 -4
View File
@@ -163,7 +163,7 @@ public:
* This method can be called after "triangulate" to add new points and adjust the triangulation.
* Inserting new points will maintain the (constrained) Delaunay condition.
*/
Vertex *insert_point (const db::DPoint &point, std::list<tl::weak_ptr<Polygon> > *new_triangles = 0, double snap = 0.0);
Vertex *insert_point (const db::DPoint &point, std::list<tl::weak_ptr<Polygon> > *new_triangles = 0);
/**
* @brief Finds the edge for two given points
@@ -286,7 +286,7 @@ protected:
* If "new_triangles" is not null, it will receive the list of new triangles created during
* the remove step.
*/
Vertex *insert_point (db::DCoord x, db::DCoord y, std::list<tl::weak_ptr<Polygon> > *new_triangles = 0, double snap = 0.0);
Vertex *insert_point (db::DCoord x, db::DCoord y, std::list<tl::weak_ptr<Polygon> > *new_triangles = 0);
/**
* @brief Removes the given vertex
@@ -335,9 +335,9 @@ private:
void remove_inside_vertex (Vertex *vertex, std::list<tl::weak_ptr<Polygon> > *new_triangles_out = 0);
std::vector<Polygon *> fill_concave_corners (const std::vector<Edge *> &edges);
void fix_triangles (const std::vector<Polygon *> &tris, const std::vector<Edge *> &fixed_edges, std::list<tl::weak_ptr<Polygon> > *new_triangles);
bool find_triangle_for_point (const db::DPoint &point, double snap, Polygon *&in_triangle, Edge *&on_edge);
bool find_triangle_for_point (const db::DPoint &point, Polygon *&in_triangle, Edge *&on_edge);
Edge *find_closest_edge (const db::DPoint &p, Vertex *vstart = 0, bool inside_only = false) const;
Vertex *insert (Vertex *vertex, std::list<tl::weak_ptr<Polygon> > *new_triangles = 0, double snap = 0.0);
Vertex *insert (Vertex *vertex, std::list<tl::weak_ptr<Polygon> > *new_triangles = 0);
void split_triangle (Polygon *t, Vertex *vertex, std::list<tl::weak_ptr<Polygon> > *new_triangles_out);
void split_triangles_on_edge (Vertex *vertex, Edge *split_edge, std::list<tl::weak_ptr<Polygon> > *new_triangles_out);
void add_more_triangles (std::vector<Polygon *> &new_triangles,