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)
|
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)
|
// for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi)
|
||||||
angleSumH[vi]=0;
|
// angleSumH[vi]=0;
|
||||||
|
|
||||||
for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
|
// for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
|
||||||
{
|
// {
|
||||||
for(int i=0;i<3;++i)
|
// 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
|
/// \brief Sample all the border vertices
|
||||||
|
|
|
||||||
|
|
@ -443,6 +443,36 @@ public:
|
||||||
FaceFauxSignedCrease(m,-AngleRad,AngleRad);
|
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 class
|
||||||
|
|
||||||
} // End namespace tri
|
} // End namespace tri
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue