diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp index 5761dc4dab9..4eee5f1aa9f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp @@ -87,6 +87,14 @@ Meshing_thread* cgal_code_mesh_3(QList pMeshes, std::cerr << " done (" << timer.time() * 1000 << " ms)" << std::endl; Scene_c3t3_item* p_new_item = new Scene_c3t3_item(surface_only); + if(polylines.empty()) { + if(protect_features) { + p_new_item->set_sharp_edges_angle(sharp_edges_angle); + } + else if (protect_borders) { + p_new_item->set_detect_borders(true); + } + } QString tooltip = QString("
From \"") + filename + QString("\" with the following mesh parameters" diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin.cpp index 85cb6ccd1a1..ecddec2f9e4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin.cpp @@ -524,10 +524,9 @@ treat_result(Scene_c3t3_item& source_item, static_cast(bbox.ymin() + bbox.ymax())/2.f, static_cast(bbox.zmin() + bbox.zmax())/2.f); - result_item.setColor(QColor(59,74,226)); + result_item.setColor(source_item.color()); result_item.setRenderingMode(source_item.renderingMode()); result_item.set_data_item(source_item.data_item()); - source_item.setVisible(false); const Scene_interface::Item_id index = scene->mainSelectionIndex(); @@ -539,6 +538,7 @@ treat_result(Scene_c3t3_item& source_item, else { result_item.update_histogram(); + result_item.invalidateOpenGLBuffers(); const Scene_interface::Item_id index = scene->mainSelectionIndex(); scene->itemChanged(index); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp index 081ca9df328..627afb7577b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp @@ -141,6 +141,10 @@ Optimizer_thread* cgal_code_optimization(Scene_c3t3_item& c3t3_item, return NULL; } Polyhedral_mesh_domain* sm_domain = new Polyhedral_mesh_domain(*smesh); + if(c3t3_item.get_sharp_edges_angle() != -1 ) + sm_domain->detect_features(c3t3_item.get_sharp_edges_angle()); + else if(c3t3_item.get_detect_borders()) + sm_domain->detect_borders(); // Create thread typedef Optimization_function Opt_function; diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp index 9e8beb2e5a7..f350e500775 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp @@ -347,6 +347,8 @@ struct Scene_c3t3_item_priv { cnc_are_shown = false; is_aabb_tree_built = false; alphaSlider = NULL; + sharp_edges_angle = -1; + detect_borders = false; } void computeIntersection(const Primitive& facet); void fill_aabb_tree() { @@ -501,6 +503,9 @@ struct Scene_c3t3_item_priv { bool is_valid; bool is_surface; bool last_intersection; + //only for optimizers + double sharp_edges_angle; + bool detect_borders; void push_normal(std::vector& normals, const EPICK::Vector_3& n) const { @@ -2106,5 +2111,12 @@ Scene_c3t3_item* Scene_c3t3_item::clone() const return new Scene_c3t3_item(d->c3t3, d->is_surface); } +void Scene_c3t3_item::set_sharp_edges_angle(double a) { d->sharp_edges_angle = a; } +double Scene_c3t3_item::get_sharp_edges_angle() { return d->sharp_edges_angle; } + +void Scene_c3t3_item::set_detect_borders(bool b) { d->detect_borders = b;} +bool Scene_c3t3_item::get_detect_borders() { return d->detect_borders; } + + #include "Scene_c3t3_item.moc" diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h index 90b02e87c7b..d71d906fce3 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h @@ -155,6 +155,12 @@ public: QColor get_histogram_color(const double v) const; + void set_sharp_edges_angle(double d); + double get_sharp_edges_angle(); + + void set_detect_borders(bool b); + bool get_detect_borders(); + void itemAboutToBeDestroyed(Scene_item *) Q_DECL_OVERRIDE; void initializeBuffers(Viewer_interface *) const Q_DECL_OVERRIDE;