mirror of https://github.com/CGAL/cgal
minor changes on demo (wip)
This commit is contained in:
parent
22c0859d92
commit
9635ec1497
|
|
@ -409,9 +409,6 @@ template<typename PolygonMesh, typename FaceMeasureMap, typename VertexCurvature
|
|||
const typename GetGeomTraits<PolygonMesh, NamedParameters>::type::FT
|
||||
r = choose_parameter(get_parameter(np, internal_np::ball_radius), 0.01);
|
||||
|
||||
if (r < 0.000001)
|
||||
return;
|
||||
|
||||
typename GetVertexPointMap<PolygonMesh, NamedParameters>::const_type
|
||||
vpm = choose_parameter(get_parameter(np, CGAL::vertex_point),
|
||||
get_const_property_map(CGAL::vertex_point, pmesh));
|
||||
|
|
@ -446,7 +443,7 @@ template<typename PolygonMesh, typename FaceMeasureMap, typename VertexCurvature
|
|||
|
||||
const typename GT::FT f_ratio = face_in_ball_ratio_2<GT>(x, r, c);
|
||||
|
||||
if (f_ratio > 0.000001)
|
||||
if (f_ratio > 0.00000001)
|
||||
{
|
||||
corrected_mui += f_ratio * get(fmm, fi);
|
||||
for (face_descriptor fj : faces_around_face(halfedge(fi, pmesh), pmesh))
|
||||
|
|
@ -492,7 +489,7 @@ template<typename PolygonMesh, typename VertexCurvatureMap,
|
|||
expand_interpolated_corrected_measure_vertex(pmesh, mu1_map, mu1_expand_map, v, np);
|
||||
|
||||
typename GT::FT v_mu0 = get(mu0_expand_map, v);
|
||||
if (v_mu0 > 0.000001)
|
||||
if (v_mu0 > 0.00000001)
|
||||
put(vcm, v, 0.5 * get(mu1_expand_map, v) / v_mu0);
|
||||
else
|
||||
put(vcm, v, 0);
|
||||
|
|
@ -528,7 +525,7 @@ template<typename PolygonMesh, typename VertexCurvatureMap,
|
|||
expand_interpolated_corrected_measure_vertex(pmesh, mu2_map, mu2_expand_map, v, np);
|
||||
|
||||
typename GT::FT v_mu0 = get(mu0_expand_map, v);
|
||||
if(v_mu0 > 0.000001)
|
||||
if(v_mu0 > 0.00000001)
|
||||
put(vcm, v, get(mu2_expand_map, v) / v_mu0);
|
||||
else
|
||||
put(vcm, v, 0);
|
||||
|
|
|
|||
|
|
@ -487,8 +487,10 @@ public:
|
|||
connect(scene_obj, SIGNAL(itemIndexSelected(int)),
|
||||
this,SLOT(detectScalarProperties(int)));
|
||||
|
||||
on_propertyBox_currentIndexChanged(0);
|
||||
connect(dock_widget->expandingRadiusSlider, SIGNAL(valueChanged(int)),
|
||||
this, SLOT(setExpandingRadius(int)));
|
||||
|
||||
on_propertyBox_currentIndexChanged(0);
|
||||
|
||||
}
|
||||
private:
|
||||
|
|
@ -716,6 +718,10 @@ private Q_SLOTS:
|
|||
{
|
||||
Scene_surface_mesh_item* item =
|
||||
qobject_cast<Scene_surface_mesh_item*>(sender());
|
||||
|
||||
maxEdgeLength = -1;
|
||||
setExpandingRadius(dock_widget->expandingRadiusSlider->value());
|
||||
|
||||
if(!item)
|
||||
return;
|
||||
SMesh& smesh = *item->face_graph();
|
||||
|
|
@ -784,43 +790,56 @@ private Q_SLOTS:
|
|||
treat_sm_property<face_descriptor>("f:jacobian", item->face_graph());
|
||||
}
|
||||
|
||||
double sliderRangeToExpandRadius(SMesh& smesh, double val)
|
||||
void setExpandingRadius(int val_int)
|
||||
{
|
||||
double sliderMin = dock_widget->expandingRadiusSlider->minimum();
|
||||
double sliderMax = dock_widget->expandingRadiusSlider->maximum() - sliderMin;
|
||||
val -= sliderMin;
|
||||
double val = val_int - sliderMin;
|
||||
sliderMin = 0;
|
||||
|
||||
SMesh& smesh = *(qobject_cast<Scene_surface_mesh_item*>(scene->item(scene->mainSelectionIndex())))->face_graph();
|
||||
|
||||
auto vpm = get(CGAL::vertex_point, smesh);
|
||||
|
||||
auto edge_range = CGAL::edges(smesh);
|
||||
if (maxEdgeLength < 0)
|
||||
{
|
||||
auto edge_range = CGAL::edges(smesh);
|
||||
|
||||
if (edge_range.begin() == edge_range.end())
|
||||
return 0;
|
||||
if (edge_range.begin() == edge_range.end())
|
||||
{
|
||||
expandRadius = 0;
|
||||
dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius));
|
||||
return;
|
||||
}
|
||||
|
||||
auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) {
|
||||
auto res = EPICK().compare_squared_distance_3_object()(
|
||||
get(vpm, source((l), smesh)),
|
||||
get(vpm, target((l), smesh)),
|
||||
get(vpm, source((r), smesh)),
|
||||
get(vpm, target((r), smesh)));
|
||||
return res == CGAL::SMALLER;
|
||||
});
|
||||
auto edge_reference = std::max_element(edge_range.begin(), edge_range.end(), [&, vpm, smesh](auto l, auto r) {
|
||||
auto res = EPICK().compare_squared_distance_3_object()(
|
||||
get(vpm, source((l), smesh)),
|
||||
get(vpm, target((l), smesh)),
|
||||
get(vpm, source((r), smesh)),
|
||||
get(vpm, target((r), smesh)));
|
||||
return res == CGAL::SMALLER;
|
||||
});
|
||||
|
||||
// if edge_reference is not derefrenceble
|
||||
if (edge_reference == edge_range.end())
|
||||
return 0;
|
||||
// if edge_reference is not derefrenceble
|
||||
if (edge_reference == edge_range.end())
|
||||
{
|
||||
expandRadius = 0;
|
||||
dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius));
|
||||
return;
|
||||
}
|
||||
|
||||
double L = sqrt(
|
||||
(get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh)))
|
||||
.squared_length()
|
||||
);
|
||||
maxEdgeLength = sqrt(
|
||||
(get(vpm, source((*edge_reference), smesh)) - get(vpm, target((*edge_reference), smesh)))
|
||||
.squared_length()
|
||||
);
|
||||
|
||||
std::cout << L << std::endl;
|
||||
|
||||
double outMin = 0, outMax = 5 * L, base = 1.2;
|
||||
|
||||
return (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1);
|
||||
}
|
||||
|
||||
double outMin = 0, outMax = 5 * maxEdgeLength, base = 1.2;
|
||||
|
||||
expandRadius = (pow(base, val) - 1) * outMax / (pow(base, sliderMax) - 1);
|
||||
dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius));
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -830,9 +849,6 @@ private Q_SLOTS:
|
|||
"v:interpolated_corrected_mean_curvature": "v:interpolated_corrected_gaussian_curvature";
|
||||
SMesh& smesh = *item->face_graph();
|
||||
|
||||
expandRadius = sliderRangeToExpandRadius(smesh, dock_widget->expandingRadiusSlider->value());
|
||||
dock_widget->expandingRadiusLabel->setText(tr("Expanding Radius : %1").arg(expandRadius));
|
||||
|
||||
//compute once and store the value per vertex
|
||||
bool non_init;
|
||||
SMesh::Property_map<vertex_descriptor, double> mu_i_map;
|
||||
|
|
@ -1611,6 +1627,7 @@ private:
|
|||
std::unordered_map<Scene_surface_mesh_item*, Vertex_source_map> is_source;
|
||||
|
||||
double expandRadius;
|
||||
double maxEdgeLength = -1;
|
||||
double minBox;
|
||||
double maxBox;
|
||||
QPixmap legend_;
|
||||
|
|
|
|||
Loading…
Reference in New Issue