76 if (_mesh.status(_vh).deleted())
79 double gauss_curv = 2.0 * M_PI;
91 const typename MeshT::Point p0 = _mesh.point(_vh);
93 typename MeshT::CVOHIter voh_it( _mesh.cvoh_iter(_vh));
95 if ( ! voh_it->is_valid() )
100 for (
auto voh_it : _mesh.voh_range(_vh))
102 typename MeshT::Point p1 = _mesh.point(voh_it.to());
103 typename MeshT::Point p2 = _mesh.point(voh_it.opp().next().to());
118 if ( ! _m.cvoh_iter(_vh)->
is_valid() )
121 for(
auto voh_it : _m.voh_range(_vh))
123 if ( voh_it.edge().is_boundary() )
126 const typename MeshT::Point p0 = _m.point( _vh );
127 const typename MeshT::Point p1 = _m.point(voh_it.to());
128 const typename MeshT::Point p2 = _m.point(voh_it.prev().from());
130 const typename MeshT::Point p3 = _m.point(voh_it.opp().next().to());
132 const REALT alpha = acos(
OpenMesh::sane_aarg((p0-p2).normalize() | (p1-p2).normalize()) );
137 if ( !OpenMesh::is_eq(alpha,M_PI/2.0) )
138 cotw += (REALT(1.0))/tan(alpha);
140 if ( !OpenMesh::is_eq(beta,M_PI/2.0) )
141 cotw += (REALT(1.0))/tan(beta);
158 if ( !OpenMesh::is_eq(alpha,M_PI/2.0) )
159 tmp += (p0-p1).sqrnorm()*1.0/tan(alpha);
161 if ( !OpenMesh::is_eq(gamma,M_PI/2.0) )
162 tmp += (p0-p2).sqrnorm()*1.0/tan(gamma);
172 _area += 0.125*( tmp );
178 _area += ((p1-p0) % (p2-p0)).norm() * 0.5 * 0.5;
182 _area += ((p1-p0) % (p2-p0)).norm() * 0.5 * 0.25;
186 _n += ((p0-p1)*cotw);