mirror of https://github.com/CGAL/cgal
Make repair_plugin work for Surface_mesh
This commit is contained in:
parent
8e7c2439b8
commit
1ec6d7b058
|
|
@ -1126,7 +1126,7 @@ bool remove_self_intersections(TriangleMesh& tm, const int max_steps = 7, bool v
|
|||
boundary_hedges.resize(boundary_hedges_initial_size);
|
||||
BOOST_FOREACH(face_descriptor fh, faces_to_remove)
|
||||
{
|
||||
halfedge_descriptor h = fh->halfedge();
|
||||
halfedge_descriptor h = halfedge(fh,tm);
|
||||
for (int i=0;i<3; ++i)
|
||||
{
|
||||
if ( is_border( opposite(h, tm), tm) ){
|
||||
|
|
@ -1154,7 +1154,7 @@ bool remove_self_intersections(TriangleMesh& tm, const int max_steps = 7, bool v
|
|||
std::set<vertex_descriptor> border_vertices;
|
||||
BOOST_FOREACH(halfedge_descriptor h, boundary_hedges)
|
||||
{
|
||||
if (!border_vertices.insert(h->vertex()).second){
|
||||
if (!border_vertices.insert(target(h,tm)).second){
|
||||
BOOST_FOREACH(halfedge_descriptor hh, halfedges_around_target(h,tm)){
|
||||
if (!is_border(hh, tm))
|
||||
faces_to_remove.insert(face(hh, tm));
|
||||
|
|
@ -1176,7 +1176,7 @@ bool remove_self_intersections(TriangleMesh& tm, const int max_steps = 7, bool v
|
|||
std::set<edge_descriptor> edges_to_remove;
|
||||
BOOST_FOREACH(face_descriptor fh, faces_to_remove)
|
||||
{
|
||||
BOOST_FOREACH(halfedge_descriptor h, halfedges_around_face(fh->halfedge(),tm))
|
||||
BOOST_FOREACH(halfedge_descriptor h, halfedges_around_face(halfedge(fh,tm),tm))
|
||||
{
|
||||
if (halfedge(target(h, tm), tm)==h) // limit the number of insertions
|
||||
vertices_to_remove.insert(target(h, tm));
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ polyhedron_demo_plugin(surface_intersection_plugin Surface_intersection_plugin)
|
|||
target_link_libraries(surface_intersection_plugin scene_polyhedron_item scene_polylines_item)
|
||||
|
||||
polyhedron_demo_plugin(repair_polyhedron_plugin Repair_polyhedron_plugin)
|
||||
target_link_libraries(repair_polyhedron_plugin scene_polyhedron_item)
|
||||
target_link_libraries(repair_polyhedron_plugin scene_surface_mesh_item scene_polyhedron_item)
|
||||
|
||||
qt5_wrap_ui( isotropicRemeshingUI_FILES Isotropic_remeshing_dialog.ui)
|
||||
polyhedron_demo_plugin(isotropic_remeshing_plugin Isotropic_remeshing_plugin ${isotropicRemeshingUI_FILES})
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include <QtCore/qglobal.h>
|
||||
|
||||
#include "Scene_polyhedron_item.h"
|
||||
#include "Scene_surface_mesh_item.h"
|
||||
#include <CGAL/Three/Scene_interface.h>
|
||||
#include "Polyhedron_type.h"
|
||||
#include <CGAL/Three/Polyhedron_demo_plugin_interface.h>
|
||||
|
|
@ -13,7 +14,6 @@
|
|||
#include <QObject>
|
||||
|
||||
#include <CGAL/Polygon_mesh_processing/repair.h>
|
||||
#include <CGAL/boost/graph/graph_traits_Polyhedron_3.h>
|
||||
|
||||
using namespace CGAL::Three;
|
||||
class Polyhedron_demo_repair_polyhedron_plugin :
|
||||
|
|
@ -58,9 +58,15 @@ public:
|
|||
bool applicable(QAction*) const
|
||||
{
|
||||
int item_id = scene->mainSelectionIndex();
|
||||
return qobject_cast<Scene_polyhedron_item*>(
|
||||
scene->item(item_id));
|
||||
return qobject_cast<Scene_polyhedron_item*>(scene->item(item_id)) ||
|
||||
qobject_cast<Scene_surface_mesh_item*>(scene->item(item_id));
|
||||
}
|
||||
template <typename Item>
|
||||
void on_actionRemoveIsolatedVertices_triggered(Scene_interface::Item_id index);
|
||||
template <typename Item>
|
||||
void on_actionRemoveDegenerateFaces_triggered(Scene_interface::Item_id index);
|
||||
template <typename Item>
|
||||
void on_actionRemoveSelfIntersections_triggered(Scene_interface::Item_id index);
|
||||
|
||||
public Q_SLOTS:
|
||||
void on_actionRemoveIsolatedVertices_triggered();
|
||||
|
|
@ -75,13 +81,11 @@ private:
|
|||
Messages_interface* messages;
|
||||
}; // end Polyhedron_demo_repair_polyhedron_plugin
|
||||
|
||||
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveIsolatedVertices_triggered()
|
||||
template <typename Item>
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveIsolatedVertices_triggered(Scene_interface::Item_id index)
|
||||
{
|
||||
const Scene_interface::Item_id index = scene->mainSelectionIndex();
|
||||
|
||||
Scene_polyhedron_item* poly_item =
|
||||
qobject_cast<Scene_polyhedron_item*>(scene->item(index));
|
||||
Item* poly_item =
|
||||
qobject_cast<Item*>(scene->item(index));
|
||||
if (poly_item)
|
||||
{
|
||||
std::size_t nbv =
|
||||
|
|
@ -94,12 +98,18 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveIsolatedVertices_t
|
|||
}
|
||||
}
|
||||
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveDegenerateFaces_triggered()
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveIsolatedVertices_triggered()
|
||||
{
|
||||
const Scene_interface::Item_id index = scene->mainSelectionIndex();
|
||||
on_actionRemoveIsolatedVertices_triggered<Scene_polyhedron_item>(index);
|
||||
on_actionRemoveIsolatedVertices_triggered<Scene_surface_mesh_item>(index);
|
||||
}
|
||||
|
||||
Scene_polyhedron_item* poly_item =
|
||||
qobject_cast<Scene_polyhedron_item*>(scene->item(index));
|
||||
template <typename Item>
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveDegenerateFaces_triggered(Scene_interface::Item_id index)
|
||||
{
|
||||
Item* poly_item =
|
||||
qobject_cast<Item*>(scene->item(index));
|
||||
if (poly_item)
|
||||
{
|
||||
std::size_t nbv =
|
||||
|
|
@ -112,12 +122,18 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveDegenerateFaces_tr
|
|||
}
|
||||
}
|
||||
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveSelfIntersections_triggered()
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveDegenerateFaces_triggered()
|
||||
{
|
||||
const Scene_interface::Item_id index = scene->mainSelectionIndex();
|
||||
on_actionRemoveDegenerateFaces_triggered<Scene_polyhedron_item>(index);
|
||||
on_actionRemoveDegenerateFaces_triggered<Scene_surface_mesh_item>(index);
|
||||
}
|
||||
|
||||
Scene_polyhedron_item* poly_item =
|
||||
qobject_cast<Scene_polyhedron_item*>(scene->item(index));
|
||||
template <typename Item>
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveSelfIntersections_triggered(Scene_interface::Item_id index)
|
||||
{
|
||||
Item* poly_item =
|
||||
qobject_cast<Item*>(scene->item(index));
|
||||
if (poly_item)
|
||||
{
|
||||
bool solved =
|
||||
|
|
@ -130,4 +146,11 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveSelfIntersections_
|
|||
}
|
||||
}
|
||||
|
||||
void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveSelfIntersections_triggered()
|
||||
{
|
||||
const Scene_interface::Item_id index = scene->mainSelectionIndex();
|
||||
on_actionRemoveSelfIntersections_triggered<Scene_polyhedron_item>(index);
|
||||
on_actionRemoveSelfIntersections_triggered<Scene_surface_mesh_item>(index);
|
||||
}
|
||||
|
||||
#include "Repair_polyhedron_plugin.moc"
|
||||
|
|
|
|||
Loading…
Reference in New Issue