min_edge_length -> max_edge_length

This commit is contained in:
Sébastien Loriot 2015-07-02 14:39:35 +02:00
parent 20c1ae4741
commit 7894e0e071
5 changed files with 40 additions and 40 deletions

View File

@ -289,8 +289,8 @@ private:
double m_omega_H;
/** Controling the smoothness of the medial approximation. */
double m_omega_P;
/** Edges with length less than `min_edge_length` will be collapsed. */
double m_min_edge_length;
/** Edges with length less than `max_edge_length` will be collapsed. */
double m_max_edge_length;
/** Triangles with angle greater than `alpha_TH` will be split. */
double m_alpha_TH;
/** 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;
boost::tie(vb, ve) = vertices(m_tmesh);
@ -382,7 +382,7 @@ public:
* - `area_variation_factor() == 0.0001`
* - `max_iterations() == 500`
* - `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.
* @param tmesh
@ -424,10 +424,10 @@ public:
}
/// During the local remeshing step, an edge will be split
/// if it is longer than `min_edge_length()`.
double min_edge_length()
/// if it is longer than `max_edge_length()`.
double max_edge_length()
{
return m_min_edge_length;
return m_max_edge_length;
}
void set_max_triangle_angle(double value)
@ -435,9 +435,9 @@ public:
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()
{
@ -864,7 +864,7 @@ private:
m_delta_area = 0.0001;
m_max_iterations = 500;
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_zero_TH = 1e-7;
}
@ -1104,10 +1104,10 @@ private:
vertex_descriptor vi = source(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),
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(
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())
{
bool willbefixed = internal::is_vertex_degenerate(m_tmesh, m_tmesh_point_pmap,
v, m_min_edge_length);
v, m_max_edge_length);
if (willbefixed)
{
m_is_vertex_fixed_map[idx] = willbefixed;
@ -1329,7 +1329,7 @@ private:
std::size_t detect_degeneracies_heuristic()
{
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))
{

View File

@ -46,13 +46,13 @@ namespace internal {
* @param hg the mesh containing 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>
bool is_vertex_degenerate(TriangleMesh& hg,
TriangleMeshPointPMap& hg_point_pmap,
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>::halfedge_descriptor halfedge_descriptor;
@ -64,7 +64,7 @@ bool is_vertex_degenerate(TriangleMesh& hg,
std::set<face_descriptor> faces_in_disk;
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)
{
@ -114,14 +114,14 @@ bool is_vertex_degenerate(TriangleMesh& hg,
* @param hg the mesh containing the vertices
* @param root the center of the geodesic 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>
void search_vertices_in_disk(TriangleMesh& hg,
TriangleMeshPointPMap& hg_point_pmap,
typename boost::graph_traits<TriangleMesh>::vertex_descriptor root,
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>::halfedge_descriptor halfedge_descriptor;
@ -134,7 +134,7 @@ void search_vertices_in_disk(TriangleMesh& hg,
vertices_in_disk.insert(root);
vertex_visited[root] = true;
double dist_TH = min_edge_length;
double dist_TH = max_edge_length;
while (!Q.empty())
{
vertex_descriptor v = Q.front();

View File

@ -100,10 +100,10 @@ int main()
return EXIT_FAILURE;
}
double min_edge_length = 0.002;
mcs->set_min_edge_length(min_edge_length);
value = mcs->min_edge_length();
if (!check_value_equal(min_edge_length, value))
double max_edge_length = 0.002;
mcs->set_max_edge_length(max_edge_length);
value = mcs->max_edge_length();
if (!check_value_equal(max_edge_length, value))
{
return EXIT_FAILURE;
}

View File

@ -66,14 +66,14 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_min_edge_length">
<widget class="QLabel" name="label_max_edge_length">
<property name="text">
<string>min_edge_length</string>
<string>max_edge_length</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="min_edge_length"/>
<widget class="QDoubleSpinBox" name="max_edge_length"/>
</item>
</layout>
</item>
@ -162,9 +162,9 @@
</layout>
</widget>
<zorder>omega_H</zorder>
<zorder>min_edge_length</zorder>
<zorder>max_edge_length</zorder>
<zorder>label_omega_H</zorder>
<zorder>label_min_edge_length</zorder>
<zorder>label_max_edge_length</zorder>
<zorder>pushButton_contract</zorder>
<zorder>pushButton_collapse</zorder>
<zorder>pushButton_split</zorder>

View File

@ -139,9 +139,9 @@ public:
ui->omega_P->setValue(0.2);
ui->omega_P->setSingleStep(0.1);
ui->omega_P->setDecimals(3);
ui->min_edge_length->setDecimals(7);
ui->min_edge_length->setValue(0.002 * diag);
ui->min_edge_length->setSingleStep(0.0000001);
ui->max_edge_length->setDecimals(7);
ui->max_edge_length->setValue(0.002 * diag);
ui->max_edge_length->setSingleStep(0.0000001);
ui->delta_area->setDecimals(7);
ui->delta_area->setValue(1e-4);
ui->delta_area->setSingleStep(1e-5);
@ -210,7 +210,7 @@ public:
bool check_mesh(Scene_polyhedron_item* item) {
double omega_H = ui->omega_H->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();
bool is_medially_centered = ui->is_medially_centered->isChecked();
@ -229,7 +229,7 @@ public:
//set algorithm parameters
mcs->set_quality_speed_tradeoff(omega_H);
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_area_variation_factor(delta_area);
@ -263,7 +263,7 @@ public:
//set algorithm parameters
mcs->set_quality_speed_tradeoff(omega_H);
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_area_variation_factor(delta_area);
@ -284,7 +284,7 @@ public:
{
mcs->set_quality_speed_tradeoff(omega_H);
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_is_medially_centered(is_medially_centered);
}
@ -303,13 +303,13 @@ public:
{
double omega_H = ui->omega_H->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();
bool is_medially_centered = ui->is_medially_centered->isChecked();
mcs->set_quality_speed_tradeoff(omega_H);
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_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()
{
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()