And another one
git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@909 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
@@ -124,7 +124,7 @@ CatmullClarkT<MeshType,RealType>::subdivide( MeshType& _m , size_t _n , const bo
|
||||
// Commit changes in geometry
|
||||
v_itr = _m.vertices_begin();
|
||||
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_;
|
||||
// Attention! Creating new edges, hence make sure the loop ends correctly.
|
||||
|
||||
@@ -79,7 +79,7 @@ bool CompositeT<MeshType,RealType>::prepare( MeshType& _m )
|
||||
typename MeshType::VertexIter v_it(_m.vertices_begin());
|
||||
|
||||
for (; v_it != _m.vertices_end(); ++v_it)
|
||||
_m.data(v_it).set_position(_m.point(*v_it));
|
||||
_m.data(*v_it).set_position(_m.point(*v_it));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -109,7 +109,7 @@ void CompositeT<MeshType,RealType>::Tvv3()
|
||||
// set new positions for vertices
|
||||
v_it = mesh_.vertices_begin();
|
||||
for (j = 0; j < n_vertices; ++j) {
|
||||
mesh_.data(v_it).set_position(mesh_.data(v_it).position() * 3.0);
|
||||
mesh_.data(*v_it).set_position(mesh_.data(*v_it).position() * 3.0);
|
||||
++v_it;
|
||||
}
|
||||
|
||||
@@ -173,7 +173,7 @@ void CompositeT<MeshType,RealType>::Tvv4()
|
||||
// set new positions for vertices
|
||||
v_it = mesh_.vertices_begin();
|
||||
for (j = 0; j < n_vertices; ++j) {
|
||||
mesh_.data(v_it).set_position(mesh_.data(v_it).position() * 4.0);
|
||||
mesh_.data(*v_it).set_position(mesh_.data(*v_it).position() * 4.0);
|
||||
++v_it;
|
||||
}
|
||||
|
||||
@@ -298,11 +298,11 @@ void CompositeT<MeshType,RealType>::VF()
|
||||
cog = zero_point;
|
||||
|
||||
for (fv_it = mesh_.fv_iter(*f_it); fv_it.is_valid(); ++fv_it) {
|
||||
cog += mesh_.data(fv_it).position();
|
||||
cog += mesh_.data(*fv_it).position();
|
||||
++valence;
|
||||
}
|
||||
cog /= valence;
|
||||
mesh_.data(f_it).set_position(cog);
|
||||
mesh_.data(*f_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -441,7 +441,7 @@ void CompositeT<MeshType,RealType>::FF()
|
||||
|
||||
for (ff_it = mesh_.ff_iter(*f_it); ff_it.is_valid(); ++ff_it)
|
||||
{
|
||||
cog += mesh_.data(ff_it).position();
|
||||
cog += mesh_.data(*ff_it).position();
|
||||
++valence;
|
||||
}
|
||||
cog /= valence;
|
||||
@@ -451,7 +451,7 @@ void CompositeT<MeshType,RealType>::FF()
|
||||
for (f_it = mesh_.faces_end(); f_it != mesh_.faces_begin(); )
|
||||
{
|
||||
--f_it;
|
||||
mesh_.data(f_it).set_position(point_vector.back());
|
||||
mesh_.data(*f_it).set_position(point_vector.back());
|
||||
point_vector.pop_back();
|
||||
}
|
||||
}
|
||||
@@ -602,7 +602,7 @@ void CompositeT<MeshType,RealType>::FVc(Coeff& _coeff)
|
||||
if (valence > 0)
|
||||
cog /= valence;
|
||||
|
||||
mesh_.data(v_it).set_position(cog);
|
||||
mesh_.data(*v_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -614,7 +614,7 @@ void CompositeT<MeshType,RealType>::FVc(scalar_t _c)
|
||||
|
||||
unsigned int valence;
|
||||
typename MeshType::Point cog,
|
||||
zero_point(0.0, 0.0, 0.0);
|
||||
zero_point(0.0, 0.0, 0.0);
|
||||
typename MeshType::VertexOHalfedgeIter voh_it;
|
||||
typename MeshType::VertexIter v_it;
|
||||
|
||||
@@ -631,14 +631,14 @@ void CompositeT<MeshType,RealType>::FVc(scalar_t _c)
|
||||
|
||||
if (mesh_.face_handle(*voh_it).is_valid()) {
|
||||
|
||||
if (mesh_.face_handle(mesh_.opposite_halfedge_handle(mesh_.next_halfedge_handle(*voh_it))).is_valid()) {
|
||||
cog += mesh_.deref(mesh_.face_handle(*voh_it)).position() * _c;
|
||||
cog += mesh_.deref(mesh_.face_handle(mesh_.opposite_halfedge_handle(mesh_.next_halfedge_handle(*voh_it)))).position() * (1.0 - _c);
|
||||
} else {
|
||||
cog += mesh_.deref(mesh_.face_handle(*voh_it)).position();
|
||||
}
|
||||
if (mesh_.face_handle(mesh_.opposite_halfedge_handle(mesh_.next_halfedge_handle(*voh_it))).is_valid()) {
|
||||
cog += mesh_.deref(mesh_.face_handle(*voh_it)).position() * _c;
|
||||
cog += mesh_.deref(mesh_.face_handle(mesh_.opposite_halfedge_handle(mesh_.next_halfedge_handle(*voh_it)))).position() * (1.0 - _c);
|
||||
} else {
|
||||
cog += mesh_.deref(mesh_.face_handle(*voh_it)).position();
|
||||
}
|
||||
} else {
|
||||
--valence;
|
||||
--valence;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -683,7 +683,7 @@ void CompositeT<MeshType,RealType>::VdE()
|
||||
|
||||
cog /= valence;
|
||||
|
||||
mesh_.data(e_it).set_position(cog);
|
||||
mesh_.data(*e_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -716,7 +716,7 @@ void CompositeT<MeshType,RealType>::VdEc(scalar_t _c)
|
||||
}
|
||||
}
|
||||
|
||||
mesh_.data(e_it).set_position(cog);
|
||||
mesh_.data(*e_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -776,7 +776,7 @@ void CompositeT<MeshType,RealType>::VdEg(scalar_t _gamma)
|
||||
cog += mesh_.data(mesh_.to_vertex_handle(heh)).position() * 2.0 * _gamma;
|
||||
}
|
||||
|
||||
mesh_.data(e_it).set_position(cog);
|
||||
mesh_.data(*e_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -839,7 +839,7 @@ void CompositeT<MeshType,RealType>::VdEg(Coeff& _coeff)
|
||||
cog += mesh_.data(mesh_.to_vertex_handle(heh)).position() * 2.0 * gamma;
|
||||
}
|
||||
|
||||
mesh_.data(e_it).set_position(cog);
|
||||
mesh_.data(*e_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -867,7 +867,7 @@ void CompositeT<MeshType,RealType>::EV()
|
||||
|
||||
cog /= valence;
|
||||
|
||||
mesh_.data(v_it).set_position(cog);
|
||||
mesh_.data(*v_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -903,7 +903,7 @@ void CompositeT<MeshType,RealType>::EVc(Coeff& _coeff)
|
||||
|
||||
cog /= valence;
|
||||
|
||||
mesh_.data(v_it).set_position(cog);
|
||||
mesh_.data(*v_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -933,7 +933,7 @@ void CompositeT<MeshType,RealType>::EVc(scalar_t _c)
|
||||
|
||||
cog /= valence;
|
||||
|
||||
mesh_.data(v_it).set_position(cog);
|
||||
mesh_.data(*v_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -959,7 +959,7 @@ void CompositeT<MeshType,RealType>::EF()
|
||||
}
|
||||
|
||||
cog /= valence;
|
||||
mesh_.data(f_it).set_position(cog);
|
||||
mesh_.data(*f_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -989,7 +989,7 @@ void CompositeT<MeshType,RealType>::FE()
|
||||
}
|
||||
|
||||
cog /= valence;
|
||||
mesh_.data(e_it).set_position(cog);
|
||||
mesh_.data(*e_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1007,7 +1007,7 @@ void CompositeT<MeshType,RealType>::VE()
|
||||
cog = mesh_.data(mesh_.to_vertex_handle(mesh_.halfedge_handle(*e_it, 0))).position();
|
||||
cog += mesh_.data(mesh_.to_vertex_handle(mesh_.halfedge_handle(*e_it, 1))).position();
|
||||
cog /= 2.0;
|
||||
mesh_.data(e_it).set_position(cog);
|
||||
mesh_.data(*e_it).set_position(cog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1042,7 +1042,7 @@ void CompositeT<MeshType,RealType>::VV()
|
||||
for (v_it = mesh_.vertices_end(); v_it != mesh_.vertices_begin(); )
|
||||
{
|
||||
--v_it;
|
||||
mesh_.data(v_it).set_position(point_vector.back());
|
||||
mesh_.data(*v_it).set_position(point_vector.back());
|
||||
point_vector.pop_back();
|
||||
}
|
||||
}
|
||||
@@ -1073,13 +1073,13 @@ void CompositeT<MeshType,RealType>::VVc(Coeff& _coeff)
|
||||
}
|
||||
cog /= valence;
|
||||
c = _coeff(valence);
|
||||
cog = cog * (1 - c) + mesh_.data(v_it).position() * c;
|
||||
cog = cog * (1 - c) + mesh_.data(*v_it).position() * c;
|
||||
point_vector.push_back(cog);
|
||||
}
|
||||
for (v_it = mesh_.vertices_end(); v_it != mesh_.vertices_begin(); )
|
||||
{
|
||||
--v_it;
|
||||
mesh_.data(v_it).set_position(point_vector.back());
|
||||
mesh_.data(*v_it).set_position(point_vector.back());
|
||||
point_vector.pop_back();
|
||||
}
|
||||
}
|
||||
@@ -1116,7 +1116,7 @@ void CompositeT<MeshType,RealType>::VVc(scalar_t _c)
|
||||
for (v_it = mesh_.vertices_end(); v_it != mesh_.vertices_begin(); ) {
|
||||
|
||||
--v_it;
|
||||
mesh_.data(v_it).set_position(point_vector.back());
|
||||
mesh_.data(*v_it).set_position(point_vector.back());
|
||||
point_vector.pop_back();
|
||||
|
||||
}
|
||||
@@ -1160,7 +1160,7 @@ void CompositeT<MeshType,RealType>::EdE()
|
||||
for (e_it = mesh_.edges_end(); e_it != mesh_.edges_begin(); )
|
||||
{
|
||||
--e_it;
|
||||
mesh_.data(e_it).set_position(point_vector.back());
|
||||
mesh_.data(*e_it).set_position(point_vector.back());
|
||||
point_vector.pop_back();
|
||||
}
|
||||
}
|
||||
@@ -1204,7 +1204,7 @@ void CompositeT<MeshType,RealType>::EdEc(scalar_t _c)
|
||||
for (e_it = mesh_.edges_end(); e_it != mesh_.edges_begin(); ) {
|
||||
|
||||
--e_it;
|
||||
mesh_.data(e_it).set_position(point_vector.back());
|
||||
mesh_.data(*e_it).set_position(point_vector.back());
|
||||
point_vector.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ protected:
|
||||
typename MeshType::VertexIter v_it;
|
||||
|
||||
for (v_it=_m.vertices_begin(); v_it != _m.vertices_end(); ++v_it)
|
||||
_m.set_point(*v_it, _m.data(v_it).position());
|
||||
_m.set_point(*v_it, _m.data(*v_it).position());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ protected:
|
||||
// Commit changes in geometry
|
||||
for ( vit = _m.vertices_begin();
|
||||
vit != _m.vertices_end(); ++vit) {
|
||||
_m.set_point(vit, _m.property( vp_pos_, vit ) );
|
||||
_m.set_point(*vit, _m.property( vp_pos_, *vit ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@ protected:
|
||||
// Commit changes in geometry
|
||||
for ( vit = /*initialVerticesEnd;*/_m.vertices_begin();
|
||||
vit != _m.vertices_end(); ++vit)
|
||||
_m.set_point(vit, _m.property( vp_pos_, vit ) );
|
||||
_m.set_point(*vit, _m.property( vp_pos_, *vit ) );
|
||||
|
||||
#if defined(_DEBUG) || defined(DEBUG)
|
||||
// Now we have an consistent mesh!
|
||||
|
||||
@@ -212,16 +212,16 @@ protected:
|
||||
// tag existing edges
|
||||
for (eit=_m.edges_begin(); eit != _m.edges_end();++eit)
|
||||
{
|
||||
_m.status( eit ).set_tagged( true );
|
||||
if ( (gen%2) && _m.is_boundary(eit) )
|
||||
compute_new_boundary_points( _m, eit ); // *) creates new vertices
|
||||
_m.status( *eit ).set_tagged( true );
|
||||
if ( (gen%2) && _m.is_boundary(*eit) )
|
||||
compute_new_boundary_points( _m, *eit ); // *) creates new vertices
|
||||
}
|
||||
|
||||
// insert new vertices, and store pos in vp_pos_
|
||||
typename MeshType::FaceIter fend = _m.faces_end();
|
||||
for (fit = _m.faces_begin();fit != fend; ++fit)
|
||||
{
|
||||
if (_m.is_boundary(fit))
|
||||
if (_m.is_boundary(*fit))
|
||||
{
|
||||
if(gen%2)
|
||||
_m.property(fp_pos_, *fit).invalidate();
|
||||
@@ -312,13 +312,13 @@ protected:
|
||||
int nOrdinary = 0;
|
||||
|
||||
//check number of extraordinary vertices
|
||||
for(fvit = _m.fv_iter( fit ); fvit.is_valid(); ++fvit)
|
||||
for(fvit = _m.fv_iter( *fit ); fvit.is_valid(); ++fvit)
|
||||
if( (_m.valence(*fvit)) == 6 || _m.is_boundary(*fvit) )
|
||||
++nOrdinary;
|
||||
|
||||
if(nOrdinary==3)
|
||||
{
|
||||
for(fheit = _m.fh_iter( fit ); fheit.is_valid(); ++fheit)
|
||||
for(fheit = _m.fh_iter( *fit ); fheit.is_valid(); ++fheit)
|
||||
{
|
||||
//one ring vertex has weight 32/81
|
||||
heh = *fheit;
|
||||
@@ -346,9 +346,9 @@ protected:
|
||||
else
|
||||
{
|
||||
//only use irregular vertices:
|
||||
for(fheit = _m.fh_iter( fit ); fheit.is_valid(); ++fheit)
|
||||
for(fheit = _m.fh_iter( *fit ); fheit.is_valid(); ++fheit)
|
||||
{
|
||||
vh = _m.to_vertex_handle(fheit);
|
||||
vh = _m.to_vertex_handle(*fheit);
|
||||
if( (_m.valence(vh) != 6) && (!_m.is_boundary(vh)) )
|
||||
{
|
||||
unsigned int K = _m.valence(vh);
|
||||
@@ -371,21 +371,21 @@ protected:
|
||||
//split faces
|
||||
for (fit = _m.faces_begin();fit != fend; ++fit)
|
||||
{
|
||||
if ( _m.is_boundary(fit) && (gen%2))
|
||||
if ( _m.is_boundary(*fit) && (gen%2))
|
||||
{
|
||||
boundary_split( _m, fit );
|
||||
boundary_split( _m, *fit );
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(_m.property(fp_pos_, *fit).is_valid());
|
||||
_m.split( fit, _m.property(fp_pos_, *fit) );
|
||||
_m.split( *fit, _m.property(fp_pos_, *fit) );
|
||||
}
|
||||
}
|
||||
|
||||
// flip old edges
|
||||
for (eit=_m.edges_begin(); eit != _m.edges_end(); ++eit)
|
||||
if ( _m.status( eit ).tagged() && !_m.is_boundary( eit ) )
|
||||
_m.flip(eit);
|
||||
if ( _m.status( *eit ).tagged() && !_m.is_boundary( *eit ) )
|
||||
_m.flip(*eit);
|
||||
|
||||
// Now we have an consistent mesh!
|
||||
ASSERT_CONSISTENCY( MeshType, _m );
|
||||
@@ -455,7 +455,7 @@ private:
|
||||
typename MeshType::HalfedgeHandle heh;
|
||||
|
||||
// find boundary edge
|
||||
for( fe_it=_m.fe_iter( _fh ); fe_it.is_valid() && !_m.is_boundary( fe_it ); ++fe_it ) {};
|
||||
for( fe_it=_m.fe_iter( _fh ); fe_it.is_valid() && !_m.is_boundary( *fe_it ); ++fe_it ) {};
|
||||
|
||||
// use precomputed, already inserted but not linked vertices
|
||||
vhl = _m.property(ep_nv_, *fe_it).first;
|
||||
|
||||
@@ -175,20 +175,20 @@ protected:
|
||||
// tag existing edges
|
||||
for (eit=_m.edges_begin(); eit != _m.edges_end();++eit)
|
||||
{
|
||||
_m.status( eit ).set_tagged( true );
|
||||
if ( (gen%2) && _m.is_boundary(eit) )
|
||||
compute_new_boundary_points( _m, eit ); // *) creates new vertices
|
||||
_m.status( *eit ).set_tagged( true );
|
||||
if ( (gen%2) && _m.is_boundary(*eit) )
|
||||
compute_new_boundary_points( _m, *eit ); // *) creates new vertices
|
||||
}
|
||||
|
||||
// do relaxation of old vertices, but store new pos in property vp_pos_
|
||||
|
||||
for (vit=_m.vertices_begin(); vit!=_m.vertices_end(); ++vit)
|
||||
{
|
||||
if ( _m.is_boundary(vit) )
|
||||
if ( _m.is_boundary(*vit) )
|
||||
{
|
||||
if ( gen%2 )
|
||||
{
|
||||
heh = _m.halfedge_handle(vit);
|
||||
heh = _m.halfedge_handle(*vit);
|
||||
if (heh.is_valid()) // skip isolated newly inserted vertices *)
|
||||
{
|
||||
typename OpenMesh::HalfedgeHandle
|
||||
@@ -201,28 +201,28 @@ protected:
|
||||
pos += _m.point(_m.from_vertex_handle(prev_heh));
|
||||
pos *= real_t(4.0);
|
||||
|
||||
pos += real_t(19.0) * _m.point( vit );
|
||||
pos += real_t(19.0) * _m.point( *vit );
|
||||
pos *= _1over27;
|
||||
|
||||
_m.property( vp_pos_, vit ) = pos;
|
||||
_m.property( vp_pos_, *vit ) = pos;
|
||||
}
|
||||
}
|
||||
else
|
||||
_m.property( vp_pos_, vit ) = _m.point( vit );
|
||||
_m.property( vp_pos_, *vit ) = _m.point( *vit );
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t valence=0;
|
||||
|
||||
pos = zero;
|
||||
for ( vvit = _m.vv_iter(vit); vvit.is_valid(); ++vvit)
|
||||
for ( vvit = _m.vv_iter(*vit); vvit.is_valid(); ++vvit)
|
||||
{
|
||||
pos += _m.point( vvit );
|
||||
pos += _m.point( *vvit );
|
||||
++valence;
|
||||
}
|
||||
pos *= weights_[ valence ].second;
|
||||
pos += weights_[ valence ].first * _m.point(vit);
|
||||
_m.property( vp_pos_, vit ) = pos;
|
||||
pos += weights_[ valence ].first * _m.point(*vit);
|
||||
_m.property( vp_pos_, *vit ) = pos;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ protected:
|
||||
typename MeshType::FaceIter fend = _m.faces_end();
|
||||
for (fit = _m.faces_begin();fit != fend; ++fit)
|
||||
{
|
||||
if ( (gen%2) && _m.is_boundary(fit))
|
||||
if ( (gen%2) && _m.is_boundary(*fit))
|
||||
{
|
||||
boundary_split( _m, *fit );
|
||||
}
|
||||
@@ -238,23 +238,23 @@ protected:
|
||||
{
|
||||
fvit = _m.fv_iter( *fit );
|
||||
pos = _m.point( *fvit);
|
||||
pos += _m.point(++fvit);
|
||||
pos += _m.point(++fvit);
|
||||
pos += _m.point(*(++fvit));
|
||||
pos += _m.point(*(++fvit));
|
||||
pos *= _1over3;
|
||||
vh = _m.add_vertex( zero );
|
||||
_m.property( vp_pos_, vh ) = pos;
|
||||
_m.split( fit, vh );
|
||||
_m.split( *fit, vh );
|
||||
}
|
||||
}
|
||||
|
||||
// commit new positions (now iterating over all vertices)
|
||||
for (vit=_m.vertices_begin();vit != _m.vertices_end(); ++vit)
|
||||
_m.set_point(vit, _m.property( vp_pos_, vit ) );
|
||||
_m.set_point(*vit, _m.property( vp_pos_, *vit ) );
|
||||
|
||||
// flip old edges
|
||||
for (eit=_m.edges_begin(); eit != _m.edges_end(); ++eit)
|
||||
if ( _m.status( eit ).tagged() && !_m.is_boundary( eit ) )
|
||||
_m.flip(eit);
|
||||
if ( _m.status( *eit ).tagged() && !_m.is_boundary( *eit ) )
|
||||
_m.flip(*eit);
|
||||
|
||||
// Now we have an consistent mesh!
|
||||
ASSERT_CONSISTENCY( MeshType, _m );
|
||||
@@ -348,7 +348,7 @@ private:
|
||||
typename MeshType::HalfedgeHandle heh;
|
||||
|
||||
// find boundary edge
|
||||
for( fe_it=_m.fe_iter( _fh ); fe_it.is_valid() && !_m.is_boundary( fe_it ); ++fe_it ) {};
|
||||
for( fe_it=_m.fe_iter( _fh ); fe_it.is_valid() && !_m.is_boundary( *fe_it ); ++fe_it ) {};
|
||||
|
||||
// use precomputed, already inserted but not linked vertices
|
||||
vhl = _m.property(ep_nv_, *fe_it).first;
|
||||
|
||||
Reference in New Issue
Block a user