moved VertexBorderCorner function in updating flags
This commit is contained in:
parent
d23632a7d3
commit
2e3e2d5194
|
@ -848,27 +848,33 @@ static void EdgeMeshUniform(MeshType &m, VertexSampler &ps, float radius, bool c
|
|||
///
|
||||
static void VertexBorderCorner(MeshType & m, VertexSampler &ps, float angleRad)
|
||||
{
|
||||
typename MeshType::template PerVertexAttributeHandle<float> angleSumH = tri::Allocator<MeshType>:: template GetPerVertexAttribute<float> (m);
|
||||
// typename MeshType::template PerVertexAttributeHandle<float> angleSumH = tri::Allocator<MeshType>:: template GetPerVertexAttribute<float> (m);
|
||||
|
||||
for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi)
|
||||
angleSumH[vi]=0;
|
||||
// for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi)
|
||||
// angleSumH[vi]=0;
|
||||
|
||||
for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
|
||||
{
|
||||
for(int i=0;i<3;++i)
|
||||
// for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
|
||||
// {
|
||||
// for(int i=0;i<3;++i)
|
||||
// {
|
||||
// angleSumH[fi->V(i)] += vcg::Angle(fi->P2(i) - fi->P0(i),fi->P1(i) - fi->P0(i));
|
||||
// }
|
||||
// }
|
||||
|
||||
// for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi)
|
||||
// {
|
||||
// if((angleSumH[vi]<angleRad && vi->IsB())||
|
||||
// (angleSumH[vi]>(360-angleRad) && vi->IsB()))
|
||||
// ps.AddVert(*vi);
|
||||
// }
|
||||
|
||||
// tri::Allocator<MeshType>:: template DeletePerVertexAttribute<float> (m,angleSumH);
|
||||
vcg::tri::UpdateFlags<MeshType>::FaceClearS(m);
|
||||
vcg::tri::UpdateFlags<MeshType>::SelectVertexCornerBorder(m,angleRad);
|
||||
for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi)
|
||||
{
|
||||
angleSumH[fi->V(i)] += vcg::Angle(fi->P2(i) - fi->P0(i),fi->P1(i) - fi->P0(i));
|
||||
if(vi->IsS())ps.AddVert(*vi);
|
||||
}
|
||||
}
|
||||
|
||||
for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi)
|
||||
{
|
||||
if((angleSumH[vi]<angleRad && vi->IsB())||
|
||||
(angleSumH[vi]>(360-angleRad) && vi->IsB()))
|
||||
ps.AddVert(*vi);
|
||||
}
|
||||
|
||||
tri::Allocator<MeshType>:: template DeletePerVertexAttribute<float> (m,angleSumH);
|
||||
}
|
||||
|
||||
/// \brief Sample all the border vertices
|
||||
|
|
|
@ -443,6 +443,36 @@ public:
|
|||
FaceFauxSignedCrease(m,-AngleRad,AngleRad);
|
||||
}
|
||||
|
||||
/// \brief Select the border vertices that form a corner along the boder
|
||||
/// with an angle that is below a certain threshold
|
||||
static void SelectVertexCornerBorder(MeshType &m,typename MeshType::ScalarType &angleRad)
|
||||
{
|
||||
typedef typename MeshType::ScalarType ScalarType;
|
||||
|
||||
//get corner vertices
|
||||
typename MeshType::template PerVertexAttributeHandle<ScalarType> angleSumH = tri::Allocator<MeshType>:: template GetPerVertexAttribute<ScalarType> (m);
|
||||
|
||||
for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi)
|
||||
angleSumH[vi]=0;
|
||||
|
||||
for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
|
||||
{
|
||||
for(int i=0;i<(*fi).VN();++i)
|
||||
{
|
||||
typename MeshType::CoordType P0=fi->P(i);
|
||||
typename MeshType::CoordType P1=fi->P((i+1)%(*fi).VN());
|
||||
typename MeshType::CoordType P2=fi->P((i+2)%(*fi).VN());
|
||||
angleSumH[fi->V(i)] += vcg::Angle(P2 - P0,P1 - P0);
|
||||
}
|
||||
}
|
||||
|
||||
for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi)
|
||||
{
|
||||
if(angleSumH[vi]<angleRad && vi->IsB())
|
||||
(*vi).SetS();
|
||||
}
|
||||
}
|
||||
|
||||
}; // end class
|
||||
|
||||
} // End namespace tri
|
||||
|
|
Loading…
Reference in New Issue