- Fix for Smoother set_relative error (Thanks to Leonardo Cecchinato for the fix)
- Improved SmootherT.hh Documentation git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@1261 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
@@ -264,12 +264,12 @@ set_relative_local_error(Scalar _err)
|
|||||||
for (++v_it; v_it!=v_end; ++v_it)
|
for (++v_it; v_it!=v_end; ++v_it)
|
||||||
{
|
{
|
||||||
bb_min.minimize(mesh_.point(v_it));
|
bb_min.minimize(mesh_.point(v_it));
|
||||||
bb_max.minimize(mesh_.point(v_it));
|
bb_max.maximize(mesh_.point(v_it));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// abs. error = rel. error * bounding-diagonal
|
// abs. error = rel. error * bounding-diagonal
|
||||||
set_absolute_error(_err * (bb_max-bb_min).norm());
|
set_absolute_local_error(_err * (bb_max-bb_min).norm());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -113,38 +113,81 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
/** @name Initialization and algorithm execution
|
||||||
|
* @{ */
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
/** Initialize smoother
|
/** Initialize smoother
|
||||||
* \param _comp Determine component to smooth
|
* \param _comp Determine component to smooth
|
||||||
* \param _cont Determine Continuity
|
* \param _cont Determine Continuity
|
||||||
*/
|
*/
|
||||||
void initialize(Component _comp, Continuity _cont);
|
void initialize(Component _comp, Continuity _cont);
|
||||||
|
|
||||||
|
/// Do _n smoothing iterations
|
||||||
|
virtual void smooth(unsigned int _n);
|
||||||
|
|
||||||
//@{
|
/** @} */
|
||||||
/// Set local error
|
|
||||||
|
//===========================================================================
|
||||||
|
/** @name Error control functions
|
||||||
|
* @{ */
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
/** \brief Set local error relative to bounding box
|
||||||
|
*
|
||||||
|
* This function sets a maximal error tolerance for the smoother as a fraction
|
||||||
|
* of the bounding box of the mesh. First the bounding box diagonal is computed.
|
||||||
|
* Then the error is set as the length of the diagonal multiplied with the
|
||||||
|
* given factor.
|
||||||
|
*
|
||||||
|
* @param _err Factor scaling the bounding box diagonal
|
||||||
|
*/
|
||||||
void set_relative_local_error(Scalar _err);
|
void set_relative_local_error(Scalar _err);
|
||||||
|
|
||||||
|
/** \brief Set local error as an absolute value
|
||||||
|
*
|
||||||
|
* Set the maximal error tolerance of the smoother to the given value.
|
||||||
|
*
|
||||||
|
* @param _err Maximal error
|
||||||
|
*/
|
||||||
void set_absolute_local_error(Scalar _err);
|
void set_absolute_local_error(Scalar _err);
|
||||||
|
|
||||||
|
/** \brief Disable error control of the smoother
|
||||||
|
*
|
||||||
|
* This function disables the error control of the smoother.
|
||||||
|
*/
|
||||||
void disable_local_error_check();
|
void disable_local_error_check();
|
||||||
//@}
|
|
||||||
|
|
||||||
/** \brief enable or disable feature handling
|
/** \brief enable or disable feature handling
|
||||||
|
*
|
||||||
|
* This function can be used to control if features on the mesh should be preserved.
|
||||||
|
* If enabled, the smoother will keep features and does not modify them. Features
|
||||||
|
* can be set via OpenMesh status flags (request status and set primitives as features).
|
||||||
|
* Feature flag can be set for vertices edges and faces.
|
||||||
*
|
*
|
||||||
* @param _state true : If features are selected on the mesh, they will be left unmodified\n
|
* @param _state true : If features are selected on the mesh, they will be left unmodified\n
|
||||||
* false : Features will be ignored
|
* false : Features will be ignored
|
||||||
*/
|
*/
|
||||||
void skip_features( bool _state ){ skip_features_ = _state; };
|
void skip_features( bool _state ){ skip_features_ = _state; };
|
||||||
|
|
||||||
/// Do _n smoothing iterations
|
|
||||||
virtual void smooth(unsigned int _n);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Find active vertices. Resets tagged status !
|
|
||||||
void set_active_vertices();
|
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
/** \brief Find active vertices. Resets tagged status !
|
||||||
|
*
|
||||||
|
* This function recomputes the set of active vertices, which will be touched by the smoother.
|
||||||
|
* If nothing on the mesh is selected, all vertices which are not locked, feature or boundary will be
|
||||||
|
* marked as active and moved by the smoother.
|
||||||
|
* If vertices are selected, than only the selected ones, excluding the locked, feature and boundary vertices will be
|
||||||
|
* moved.
|
||||||
|
*
|
||||||
|
* The function is called first when running the smoother.
|
||||||
|
*/
|
||||||
|
void set_active_vertices();
|
||||||
|
|
||||||
// single steps of smoothing
|
// single steps of smoothing
|
||||||
void compute_new_positions();
|
void compute_new_positions();
|
||||||
void project_to_tangent_plane();
|
void project_to_tangent_plane();
|
||||||
|
|||||||
Reference in New Issue
Block a user