mirror of https://github.com/CGAL/cgal
min_edge_length -> max_edge_length
This commit is contained in:
parent
20c1ae4741
commit
7894e0e071
|
|
@ -289,8 +289,8 @@ private:
|
||||||
double m_omega_H;
|
double m_omega_H;
|
||||||
/** Controling the smoothness of the medial approximation. */
|
/** Controling the smoothness of the medial approximation. */
|
||||||
double m_omega_P;
|
double m_omega_P;
|
||||||
/** Edges with length less than `min_edge_length` will be collapsed. */
|
/** Edges with length less than `max_edge_length` will be collapsed. */
|
||||||
double m_min_edge_length;
|
double m_max_edge_length;
|
||||||
/** Triangles with angle greater than `alpha_TH` will be split. */
|
/** Triangles with angle greater than `alpha_TH` will be split. */
|
||||||
double m_alpha_TH;
|
double m_alpha_TH;
|
||||||
/** Value very close to zero. */
|
/** Value very close to zero. */
|
||||||
|
|
@ -356,7 +356,7 @@ double diagonal_length(const Bbox_3& bbox)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double init_min_edge_length()
|
double init_max_edge_length()
|
||||||
{
|
{
|
||||||
vertex_iterator vb, ve;
|
vertex_iterator vb, ve;
|
||||||
boost::tie(vb, ve) = vertices(m_tmesh);
|
boost::tie(vb, ve) = vertices(m_tmesh);
|
||||||
|
|
@ -382,7 +382,7 @@ public:
|
||||||
* - `area_variation_factor() == 0.0001`
|
* - `area_variation_factor() == 0.0001`
|
||||||
* - `max_iterations() == 500`
|
* - `max_iterations() == 500`
|
||||||
* - `is_medially_centered() == true`
|
* - `is_medially_centered() == true`
|
||||||
* - `min_edge_length()` == 0.002 * the length of the diagonal of the bounding box of `tmesh`
|
* - `max_edge_length()` == 0.002 * the length of the diagonal of the bounding box of `tmesh`
|
||||||
*
|
*
|
||||||
* @pre `tmesh` is a triangulated surface mesh without borders and has exactly one connected component.
|
* @pre `tmesh` is a triangulated surface mesh without borders and has exactly one connected component.
|
||||||
* @param tmesh
|
* @param tmesh
|
||||||
|
|
@ -424,10 +424,10 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
/// During the local remeshing step, an edge will be split
|
/// During the local remeshing step, an edge will be split
|
||||||
/// if it is longer than `min_edge_length()`.
|
/// if it is longer than `max_edge_length()`.
|
||||||
double min_edge_length()
|
double max_edge_length()
|
||||||
{
|
{
|
||||||
return m_min_edge_length;
|
return m_max_edge_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_max_triangle_angle(double value)
|
void set_max_triangle_angle(double value)
|
||||||
|
|
@ -435,9 +435,9 @@ public:
|
||||||
m_alpha_TH = value;
|
m_alpha_TH = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_min_edge_length(double value)
|
void set_max_edge_length(double value)
|
||||||
{
|
{
|
||||||
m_min_edge_length = value;
|
m_max_edge_length = value;
|
||||||
}
|
}
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
|
|
@ -679,7 +679,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collapses edges of the meso-skeleton with length less than `min_edge_length()` and returns the number of edges collapsed.
|
* Collapses edges of the meso-skeleton with length less than `max_edge_length()` and returns the number of edges collapsed.
|
||||||
*/
|
*/
|
||||||
std::size_t collapse_edges()
|
std::size_t collapse_edges()
|
||||||
{
|
{
|
||||||
|
|
@ -864,7 +864,7 @@ private:
|
||||||
m_delta_area = 0.0001;
|
m_delta_area = 0.0001;
|
||||||
m_max_iterations = 500;
|
m_max_iterations = 500;
|
||||||
m_is_medially_centered = true;
|
m_is_medially_centered = true;
|
||||||
m_min_edge_length = init_min_edge_length();
|
m_max_edge_length = init_max_edge_length();
|
||||||
m_alpha_TH = 110 * (CGAL_PI / 180.0);
|
m_alpha_TH = 110 * (CGAL_PI / 180.0);
|
||||||
m_zero_TH = 1e-7;
|
m_zero_TH = 1e-7;
|
||||||
}
|
}
|
||||||
|
|
@ -1104,10 +1104,10 @@ private:
|
||||||
|
|
||||||
vertex_descriptor vi = source(h, m_tmesh);
|
vertex_descriptor vi = source(h, m_tmesh);
|
||||||
vertex_descriptor vj = target(h, m_tmesh);
|
vertex_descriptor vj = target(h, m_tmesh);
|
||||||
/// \todo do not use sqrt but square m_min_edge_length
|
/// \todo do not use sqrt but square m_max_edge_length
|
||||||
double edge_length = sqrt(squared_distance(get(m_tmesh_point_pmap, vi),
|
double edge_length = sqrt(squared_distance(get(m_tmesh_point_pmap, vi),
|
||||||
get(m_tmesh_point_pmap, vj)));
|
get(m_tmesh_point_pmap, vj)));
|
||||||
if (internal::is_collapse_ok(m_tmesh, h) && edge_length < m_min_edge_length)
|
if (internal::is_collapse_ok(m_tmesh, h) && edge_length < m_max_edge_length)
|
||||||
{
|
{
|
||||||
Point p = midpoint(
|
Point p = midpoint(
|
||||||
get(vertex_point, m_tmesh, source(h, m_tmesh)),
|
get(vertex_point, m_tmesh, source(h, m_tmesh)),
|
||||||
|
|
@ -1310,7 +1310,7 @@ private:
|
||||||
if (m_is_vertex_fixed_map.find(idx) == m_is_vertex_fixed_map.end())
|
if (m_is_vertex_fixed_map.find(idx) == m_is_vertex_fixed_map.end())
|
||||||
{
|
{
|
||||||
bool willbefixed = internal::is_vertex_degenerate(m_tmesh, m_tmesh_point_pmap,
|
bool willbefixed = internal::is_vertex_degenerate(m_tmesh, m_tmesh_point_pmap,
|
||||||
v, m_min_edge_length);
|
v, m_max_edge_length);
|
||||||
if (willbefixed)
|
if (willbefixed)
|
||||||
{
|
{
|
||||||
m_is_vertex_fixed_map[idx] = willbefixed;
|
m_is_vertex_fixed_map[idx] = willbefixed;
|
||||||
|
|
@ -1329,7 +1329,7 @@ private:
|
||||||
std::size_t detect_degeneracies_heuristic()
|
std::size_t detect_degeneracies_heuristic()
|
||||||
{
|
{
|
||||||
std::size_t num_fixed = 0;
|
std::size_t num_fixed = 0;
|
||||||
double elength_fixed = m_min_edge_length;
|
double elength_fixed = m_max_edge_length;
|
||||||
|
|
||||||
BOOST_FOREACH(vertex_descriptor v, vertices(m_tmesh))
|
BOOST_FOREACH(vertex_descriptor v, vertices(m_tmesh))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -46,13 +46,13 @@ namespace internal {
|
||||||
|
|
||||||
* @param hg the mesh containing the given vertex
|
* @param hg the mesh containing the given vertex
|
||||||
* @param root the given vertex
|
* @param root the given vertex
|
||||||
* @param min_edge_length the diameter of the geodesic disk
|
* @param max_edge_length the diameter of the geodesic disk
|
||||||
*/
|
*/
|
||||||
template<class TriangleMesh, class TriangleMeshPointPMap>
|
template<class TriangleMesh, class TriangleMeshPointPMap>
|
||||||
bool is_vertex_degenerate(TriangleMesh& hg,
|
bool is_vertex_degenerate(TriangleMesh& hg,
|
||||||
TriangleMeshPointPMap& hg_point_pmap,
|
TriangleMeshPointPMap& hg_point_pmap,
|
||||||
typename boost::graph_traits<TriangleMesh>::vertex_descriptor root,
|
typename boost::graph_traits<TriangleMesh>::vertex_descriptor root,
|
||||||
double min_edge_length)
|
double max_edge_length)
|
||||||
{
|
{
|
||||||
typedef typename boost::graph_traits<TriangleMesh>::vertex_descriptor vertex_descriptor;
|
typedef typename boost::graph_traits<TriangleMesh>::vertex_descriptor vertex_descriptor;
|
||||||
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
|
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
|
||||||
|
|
@ -64,7 +64,7 @@ bool is_vertex_degenerate(TriangleMesh& hg,
|
||||||
std::set<face_descriptor> faces_in_disk;
|
std::set<face_descriptor> faces_in_disk;
|
||||||
|
|
||||||
vertices_in_disk.clear();
|
vertices_in_disk.clear();
|
||||||
search_vertices_in_disk(hg, hg_point_pmap, root, vertices_in_disk, min_edge_length);
|
search_vertices_in_disk(hg, hg_point_pmap, root, vertices_in_disk, max_edge_length);
|
||||||
|
|
||||||
BOOST_FOREACH(vertex_descriptor vd, vertices_in_disk)
|
BOOST_FOREACH(vertex_descriptor vd, vertices_in_disk)
|
||||||
{
|
{
|
||||||
|
|
@ -114,14 +114,14 @@ bool is_vertex_degenerate(TriangleMesh& hg,
|
||||||
* @param hg the mesh containing the vertices
|
* @param hg the mesh containing the vertices
|
||||||
* @param root the center of the geodesic disk
|
* @param root the center of the geodesic disk
|
||||||
* @param vertices_in_disk containing the found vertices within the disk
|
* @param vertices_in_disk containing the found vertices within the disk
|
||||||
* @param min_edge_length the diameter of the geodesic disk
|
* @param max_edge_length the diameter of the geodesic disk
|
||||||
*/
|
*/
|
||||||
template<class TriangleMesh, class TriangleMeshPointPMap>
|
template<class TriangleMesh, class TriangleMeshPointPMap>
|
||||||
void search_vertices_in_disk(TriangleMesh& hg,
|
void search_vertices_in_disk(TriangleMesh& hg,
|
||||||
TriangleMeshPointPMap& hg_point_pmap,
|
TriangleMeshPointPMap& hg_point_pmap,
|
||||||
typename boost::graph_traits<TriangleMesh>::vertex_descriptor root,
|
typename boost::graph_traits<TriangleMesh>::vertex_descriptor root,
|
||||||
std::set<typename boost::graph_traits<TriangleMesh>::vertex_descriptor>& vertices_in_disk,
|
std::set<typename boost::graph_traits<TriangleMesh>::vertex_descriptor>& vertices_in_disk,
|
||||||
double min_edge_length)
|
double max_edge_length)
|
||||||
{
|
{
|
||||||
typedef typename boost::graph_traits<TriangleMesh>::vertex_descriptor vertex_descriptor;
|
typedef typename boost::graph_traits<TriangleMesh>::vertex_descriptor vertex_descriptor;
|
||||||
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
|
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
|
||||||
|
|
@ -134,7 +134,7 @@ void search_vertices_in_disk(TriangleMesh& hg,
|
||||||
vertices_in_disk.insert(root);
|
vertices_in_disk.insert(root);
|
||||||
vertex_visited[root] = true;
|
vertex_visited[root] = true;
|
||||||
|
|
||||||
double dist_TH = min_edge_length;
|
double dist_TH = max_edge_length;
|
||||||
while (!Q.empty())
|
while (!Q.empty())
|
||||||
{
|
{
|
||||||
vertex_descriptor v = Q.front();
|
vertex_descriptor v = Q.front();
|
||||||
|
|
|
||||||
|
|
@ -100,10 +100,10 @@ int main()
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
double min_edge_length = 0.002;
|
double max_edge_length = 0.002;
|
||||||
mcs->set_min_edge_length(min_edge_length);
|
mcs->set_max_edge_length(max_edge_length);
|
||||||
value = mcs->min_edge_length();
|
value = mcs->max_edge_length();
|
||||||
if (!check_value_equal(min_edge_length, value))
|
if (!check_value_equal(max_edge_length, value))
|
||||||
{
|
{
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,14 +66,14 @@
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_min_edge_length">
|
<widget class="QLabel" name="label_max_edge_length">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>min_edge_length</string>
|
<string>max_edge_length</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QDoubleSpinBox" name="min_edge_length"/>
|
<widget class="QDoubleSpinBox" name="max_edge_length"/>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -162,9 +162,9 @@
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<zorder>omega_H</zorder>
|
<zorder>omega_H</zorder>
|
||||||
<zorder>min_edge_length</zorder>
|
<zorder>max_edge_length</zorder>
|
||||||
<zorder>label_omega_H</zorder>
|
<zorder>label_omega_H</zorder>
|
||||||
<zorder>label_min_edge_length</zorder>
|
<zorder>label_max_edge_length</zorder>
|
||||||
<zorder>pushButton_contract</zorder>
|
<zorder>pushButton_contract</zorder>
|
||||||
<zorder>pushButton_collapse</zorder>
|
<zorder>pushButton_collapse</zorder>
|
||||||
<zorder>pushButton_split</zorder>
|
<zorder>pushButton_split</zorder>
|
||||||
|
|
|
||||||
|
|
@ -139,9 +139,9 @@ public:
|
||||||
ui->omega_P->setValue(0.2);
|
ui->omega_P->setValue(0.2);
|
||||||
ui->omega_P->setSingleStep(0.1);
|
ui->omega_P->setSingleStep(0.1);
|
||||||
ui->omega_P->setDecimals(3);
|
ui->omega_P->setDecimals(3);
|
||||||
ui->min_edge_length->setDecimals(7);
|
ui->max_edge_length->setDecimals(7);
|
||||||
ui->min_edge_length->setValue(0.002 * diag);
|
ui->max_edge_length->setValue(0.002 * diag);
|
||||||
ui->min_edge_length->setSingleStep(0.0000001);
|
ui->max_edge_length->setSingleStep(0.0000001);
|
||||||
ui->delta_area->setDecimals(7);
|
ui->delta_area->setDecimals(7);
|
||||||
ui->delta_area->setValue(1e-4);
|
ui->delta_area->setValue(1e-4);
|
||||||
ui->delta_area->setSingleStep(1e-5);
|
ui->delta_area->setSingleStep(1e-5);
|
||||||
|
|
@ -210,7 +210,7 @@ public:
|
||||||
bool check_mesh(Scene_polyhedron_item* item) {
|
bool check_mesh(Scene_polyhedron_item* item) {
|
||||||
double omega_H = ui->omega_H->value();
|
double omega_H = ui->omega_H->value();
|
||||||
double omega_P = ui->omega_P->value();
|
double omega_P = ui->omega_P->value();
|
||||||
double min_edge_length = ui->min_edge_length->value();
|
double max_edge_length = ui->max_edge_length->value();
|
||||||
double delta_area = ui->delta_area->value();
|
double delta_area = ui->delta_area->value();
|
||||||
bool is_medially_centered = ui->is_medially_centered->isChecked();
|
bool is_medially_centered = ui->is_medially_centered->isChecked();
|
||||||
|
|
||||||
|
|
@ -229,7 +229,7 @@ public:
|
||||||
//set algorithm parameters
|
//set algorithm parameters
|
||||||
mcs->set_quality_speed_tradeoff(omega_H);
|
mcs->set_quality_speed_tradeoff(omega_H);
|
||||||
mcs->set_medially_centered_speed_tradeoff(omega_P);
|
mcs->set_medially_centered_speed_tradeoff(omega_P);
|
||||||
mcs->set_min_edge_length(min_edge_length);
|
mcs->set_max_edge_length(max_edge_length);
|
||||||
mcs->set_is_medially_centered(is_medially_centered);
|
mcs->set_is_medially_centered(is_medially_centered);
|
||||||
mcs->set_area_variation_factor(delta_area);
|
mcs->set_area_variation_factor(delta_area);
|
||||||
|
|
||||||
|
|
@ -263,7 +263,7 @@ public:
|
||||||
//set algorithm parameters
|
//set algorithm parameters
|
||||||
mcs->set_quality_speed_tradeoff(omega_H);
|
mcs->set_quality_speed_tradeoff(omega_H);
|
||||||
mcs->set_medially_centered_speed_tradeoff(omega_P);
|
mcs->set_medially_centered_speed_tradeoff(omega_P);
|
||||||
mcs->set_min_edge_length(min_edge_length);
|
mcs->set_max_edge_length(max_edge_length);
|
||||||
mcs->set_is_medially_centered(is_medially_centered);
|
mcs->set_is_medially_centered(is_medially_centered);
|
||||||
mcs->set_area_variation_factor(delta_area);
|
mcs->set_area_variation_factor(delta_area);
|
||||||
|
|
||||||
|
|
@ -284,7 +284,7 @@ public:
|
||||||
{
|
{
|
||||||
mcs->set_quality_speed_tradeoff(omega_H);
|
mcs->set_quality_speed_tradeoff(omega_H);
|
||||||
mcs->set_medially_centered_speed_tradeoff(omega_P);
|
mcs->set_medially_centered_speed_tradeoff(omega_P);
|
||||||
mcs->set_min_edge_length(min_edge_length);
|
mcs->set_max_edge_length(max_edge_length);
|
||||||
mcs->set_area_variation_factor(delta_area);
|
mcs->set_area_variation_factor(delta_area);
|
||||||
mcs->set_is_medially_centered(is_medially_centered);
|
mcs->set_is_medially_centered(is_medially_centered);
|
||||||
}
|
}
|
||||||
|
|
@ -303,13 +303,13 @@ public:
|
||||||
{
|
{
|
||||||
double omega_H = ui->omega_H->value();
|
double omega_H = ui->omega_H->value();
|
||||||
double omega_P = ui->omega_P->value();
|
double omega_P = ui->omega_P->value();
|
||||||
double min_edge_length = ui->min_edge_length->value();
|
double max_edge_length = ui->max_edge_length->value();
|
||||||
double delta_area = ui->delta_area->value();
|
double delta_area = ui->delta_area->value();
|
||||||
bool is_medially_centered = ui->is_medially_centered->isChecked();
|
bool is_medially_centered = ui->is_medially_centered->isChecked();
|
||||||
|
|
||||||
mcs->set_quality_speed_tradeoff(omega_H);
|
mcs->set_quality_speed_tradeoff(omega_H);
|
||||||
mcs->set_medially_centered_speed_tradeoff(omega_P);
|
mcs->set_medially_centered_speed_tradeoff(omega_P);
|
||||||
mcs->set_min_edge_length(min_edge_length);
|
mcs->set_max_edge_length(max_edge_length);
|
||||||
mcs->set_area_variation_factor(delta_area);
|
mcs->set_area_variation_factor(delta_area);
|
||||||
mcs->set_is_medially_centered(is_medially_centered);
|
mcs->set_is_medially_centered(is_medially_centered);
|
||||||
}
|
}
|
||||||
|
|
@ -402,7 +402,7 @@ void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionMCFSkeleton_t
|
||||||
void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionUpdateBBox()
|
void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionUpdateBBox()
|
||||||
{
|
{
|
||||||
double diag = scene->len_diagonal();
|
double diag = scene->len_diagonal();
|
||||||
ui->min_edge_length->setValue(0.002 * diag);
|
ui->max_edge_length->setValue(0.002 * diag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionSegment()
|
void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionSegment()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue