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;
|
||||
/** 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))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue