Merge branch 'fix_calc_normal_for_edges' into 'master'
Fix calc_normal for edges See merge request OpenMesh/OpenMesh!325
This commit is contained in:
@@ -456,13 +456,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// calculated and returns the average of the two vertex normals
|
/// calculated and returns the average of the two vertex normals
|
||||||
Normal calc_normal(EdgeHandle _eh) const
|
Normal calc_normal(EdgeHandle _eh) const;
|
||||||
{
|
|
||||||
HalfedgeHandle _heh = this->halfedge_handle(_eh, 0);
|
|
||||||
VertexHandle vh0 = this->from_vertex_handle(_heh);
|
|
||||||
VertexHandle vh1 = this->to_vertex_handle(_heh);
|
|
||||||
return 0.5 * (this->calc_normal(vh0) + this->calc_normal(vh1));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** defines a consistent representation of a sector geometry:
|
/** defines a consistent representation of a sector geometry:
|
||||||
the halfedge _in_heh defines the sector orientation
|
the halfedge _in_heh defines the sector orientation
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ PolyMeshT<Kernel>::calc_face_normal_impl(FaceHandle _fh, PointIs3DTag) const
|
|||||||
{
|
{
|
||||||
assert(this->halfedge_handle(_fh).is_valid());
|
assert(this->halfedge_handle(_fh).is_valid());
|
||||||
ConstFaceVertexIter fv_it(this->cfv_iter(_fh));
|
ConstFaceVertexIter fv_it(this->cfv_iter(_fh));
|
||||||
|
|
||||||
// Safeguard for 1-gons
|
// Safeguard for 1-gons
|
||||||
if (!(++fv_it).is_valid()) return Normal(0, 0, 0);
|
if (!(++fv_it).is_valid()) return Normal(0, 0, 0);
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ PolyMeshT<Kernel>::calc_face_normal_impl(FaceHandle _fh, PointIs3DTag) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
const typename vector_traits<Normal>::value_type length = norm(n);
|
const typename vector_traits<Normal>::value_type length = norm(n);
|
||||||
|
|
||||||
// The expression ((n *= (1.0/norm)),n) is used because the OpenSG
|
// The expression ((n *= (1.0/norm)),n) is used because the OpenSG
|
||||||
// vector class does not return self after component-wise
|
// vector class does not return self after component-wise
|
||||||
// self-multiplication with a scalar!!!
|
// self-multiplication with a scalar!!!
|
||||||
@@ -424,6 +424,28 @@ calc_normal(HalfedgeHandle _heh, const double _feature_angle) const
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
template <class Kernel>
|
||||||
|
typename PolyMeshT<Kernel>::Normal
|
||||||
|
PolyMeshT<Kernel>::
|
||||||
|
calc_normal(EdgeHandle _eh) const
|
||||||
|
{
|
||||||
|
Normal n(0);
|
||||||
|
for (int i = 0; i < 2; ++i)
|
||||||
|
{
|
||||||
|
const auto heh = this->halfedge_handle(_eh, i);
|
||||||
|
const auto fh = this->face_handle(heh);
|
||||||
|
if (fh.is_valid())
|
||||||
|
n += calc_normal(fh);
|
||||||
|
}
|
||||||
|
const auto length = norm(n);
|
||||||
|
if (length != 0)
|
||||||
|
n /= length;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
template <class Kernel>
|
template <class Kernel>
|
||||||
bool
|
bool
|
||||||
PolyMeshT<Kernel>::
|
PolyMeshT<Kernel>::
|
||||||
|
|||||||
Reference in New Issue
Block a user