minor changes on demo (wip)

This commit is contained in:
hoskillua 2022-07-31 18:55:51 +02:00
parent 22c0859d92
commit 9635ec1497
2 changed files with 49 additions and 35 deletions

View File

@ -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);

View File

@ -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_;