re-added CatmullClark without point updates support

git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@1085 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
David Bommes
2014-06-04 11:53:17 +00:00
parent ff2053119e
commit d77c740b86
2 changed files with 17 additions and 13 deletions

View File

@@ -113,18 +113,22 @@ CatmullClarkT<MeshType,RealType>::subdivide( MeshType& _m , size_t _n , const bo
EdgeIter e_itr = _m.edges_begin(); EdgeIter e_itr = _m.edges_begin();
EdgeIter e_end = _m.edges_end(); EdgeIter e_end = _m.edges_end();
for ( ; e_itr != e_end; ++e_itr) for ( ; e_itr != e_end; ++e_itr)
compute_midpoint( _m, *e_itr ); compute_midpoint( _m, *e_itr, _update_points );
// compute new positions for old vertices // position updates activated?
VertexIter v_itr = _m.vertices_begin(); if(_update_points)
VertexIter v_end = _m.vertices_end(); {
for ( ; v_itr != v_end; ++v_itr) // compute new positions for old vertices
update_vertex( _m, *v_itr ); VertexIter v_itr = _m.vertices_begin();
VertexIter v_end = _m.vertices_end();
for ( ; v_itr != v_end; ++v_itr)
update_vertex( _m, *v_itr );
// Commit changes in geometry // Commit changes in geometry
v_itr = _m.vertices_begin(); v_itr = _m.vertices_begin();
for ( ; v_itr != v_end; ++v_itr) for ( ; v_itr != v_end; ++v_itr)
_m.set_point(*v_itr, _m.property( vp_pos_, *v_itr ) ); _m.set_point(*v_itr, _m.property( vp_pos_, *v_itr ) );
}
// Split each edge at midpoint stored in edge property ep_pos_; // Split each edge at midpoint stored in edge property ep_pos_;
// Attention! Creating new edges, hence make sure the loop ends correctly. // Attention! Creating new edges, hence make sure the loop ends correctly.
@@ -283,7 +287,7 @@ CatmullClarkT<MeshType,RealType>::split_edge( MeshType& _m, const EdgeHandle& _e
template <typename MeshType, typename RealType> template <typename MeshType, typename RealType>
void void
CatmullClarkT<MeshType,RealType>::compute_midpoint( MeshType& _m, const EdgeHandle& _eh) CatmullClarkT<MeshType,RealType>::compute_midpoint( MeshType& _m, const EdgeHandle& _eh, const bool _update_points)
{ {
HalfedgeHandle heh, opp_heh; HalfedgeHandle heh, opp_heh;
@@ -296,7 +300,7 @@ CatmullClarkT<MeshType,RealType>::compute_midpoint( MeshType& _m, const EdgeHand
// boundary edge: just average vertex positions // boundary edge: just average vertex positions
// this yields the [1/2 1/2] mask // this yields the [1/2 1/2] mask
if (_m.is_boundary(_eh) ) if (_m.is_boundary(_eh) || !_update_points)
{ {
pos *= 0.5; pos *= 0.5;
} }

View File

@@ -144,7 +144,7 @@ private:
void split_face( MeshType& _m, const FaceHandle& _fh); void split_face( MeshType& _m, const FaceHandle& _fh);
void compute_midpoint( MeshType& _m, const EdgeHandle& _eh); void compute_midpoint( MeshType& _m, const EdgeHandle& _eh, const bool _update_points);
void update_vertex(MeshType& _m, const VertexHandle& _vh); void update_vertex(MeshType& _m, const VertexHandle& _vh);