mirror of https://github.com/CGAL/cgal
Store domain options in c3t3 and retrieve them in optimizers to preserve features as much as possible.
This commit is contained in:
parent
54f2a119f9
commit
83e0d459f2
|
|
@ -87,6 +87,14 @@ Meshing_thread* cgal_code_mesh_3(QList<const SMesh*> 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("<div>From \"") + filename +
|
||||
QString("\" with the following mesh parameters"
|
||||
|
|
|
|||
|
|
@ -524,10 +524,9 @@ treat_result(Scene_c3t3_item& source_item,
|
|||
static_cast<float>(bbox.ymin() + bbox.ymax())/2.f,
|
||||
static_cast<float>(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);
|
||||
|
|
|
|||
|
|
@ -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<Polyhedral_mesh_domain,Parameters> Opt_function;
|
||||
|
|
|
|||
|
|
@ -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<float>& 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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue