Changed all the MeshType::HasSomething() into the now standard tri::HasSomething(MeshType &m)
This changed implied the fact that you need different functor constructor (you have to keep the mesh inside it to know at runtime if some attribute are present or not)
This commit is contained in:
parent
8a8f48ac85
commit
c90b11ca80
|
@ -126,13 +126,13 @@ struct MidPoint : public std::unary_function<face::Pos<typename MESH_TYPE::Fac
|
||||||
assert(mp);
|
assert(mp);
|
||||||
nv.P()= (ep.f->V(ep.z)->P()+ep.f->V1(ep.z)->P())/2.0;
|
nv.P()= (ep.f->V(ep.z)->P()+ep.f->V1(ep.z)->P())/2.0;
|
||||||
|
|
||||||
if( MESH_TYPE::HasPerVertexNormal())
|
if( tri::HasPerVertexNormal(*mp))
|
||||||
nv.N()= (ep.f->V(ep.z)->N()+ep.f->V1(ep.z)->N()).normalized();
|
nv.N()= (ep.f->V(ep.z)->N()+ep.f->V1(ep.z)->N()).normalized();
|
||||||
|
|
||||||
if( MESH_TYPE::HasPerVertexColor())
|
if( tri::HasPerVertexColor(*mp))
|
||||||
nv.C().lerp(ep.f->V(ep.z)->C(),ep.f->V1(ep.z)->C(),.5f);
|
nv.C().lerp(ep.f->V(ep.z)->C(),ep.f->V1(ep.z)->C(),.5f);
|
||||||
|
|
||||||
if( MESH_TYPE::HasPerVertexQuality())
|
if( tri::HasPerVertexQuality(*mp))
|
||||||
nv.Q() = ((ep.f->V(ep.z)->Q()+ep.f->V1(ep.z)->Q())) / 2.0;
|
nv.Q() = ((ep.f->V(ep.z)->Q()+ep.f->V1(ep.z)->Q())) / 2.0;
|
||||||
|
|
||||||
if( tri::HasPerVertexTexCoord(*mp))
|
if( tri::HasPerVertexTexCoord(*mp))
|
||||||
|
@ -538,6 +538,9 @@ Siggraph 2000 Course Notes
|
||||||
template<class MESH_TYPE>
|
template<class MESH_TYPE>
|
||||||
struct MidPointButterfly : public std::unary_function<face::Pos<typename MESH_TYPE::FaceType> , typename MESH_TYPE::CoordType>
|
struct MidPointButterfly : public std::unary_function<face::Pos<typename MESH_TYPE::FaceType> , typename MESH_TYPE::CoordType>
|
||||||
{
|
{
|
||||||
|
MESH_TYPE &m;
|
||||||
|
MidPointButterfly(MESH_TYPE &_m):m(_m){}
|
||||||
|
|
||||||
void operator()(typename MESH_TYPE::VertexType &nv, face::Pos<typename MESH_TYPE::FaceType> ep)
|
void operator()(typename MESH_TYPE::VertexType &nv, face::Pos<typename MESH_TYPE::FaceType> ep)
|
||||||
{
|
{
|
||||||
face::Pos<typename MESH_TYPE::FaceType> he(ep.f,ep.z,ep.f->V(ep.z));
|
face::Pos<typename MESH_TYPE::FaceType> he(ep.f,ep.z,ep.f->V(ep.z));
|
||||||
|
@ -548,7 +551,7 @@ struct MidPointButterfly : public std::unary_function<face::Pos<typename MESH_TY
|
||||||
he.FlipV();
|
he.FlipV();
|
||||||
vr=&he.v->P();
|
vr=&he.v->P();
|
||||||
|
|
||||||
if( MESH_TYPE::HasPerVertexColor())
|
if( tri::HasPerVertexColor(m))
|
||||||
nv.C().lerp(ep.f->V(ep.z)->C(),ep.f->V1(ep.z)->C(),.5f);
|
nv.C().lerp(ep.f->V(ep.z)->C(),ep.f->V1(ep.z)->C(),.5f);
|
||||||
|
|
||||||
if(he.IsBorder())
|
if(he.IsBorder())
|
||||||
|
|
|
@ -351,12 +351,13 @@ struct OddPointLoopGeneric : public std::unary_function<face::Pos<typename MESH_
|
||||||
typedef WEIGHT_TYPE Weight;
|
typedef WEIGHT_TYPE Weight;
|
||||||
typedef typename MESH_TYPE::template PerVertexAttributeHandle<int> ValenceAttr;
|
typedef typename MESH_TYPE::template PerVertexAttributeHandle<int> ValenceAttr;
|
||||||
|
|
||||||
|
MESH_TYPE &m;
|
||||||
Projection proj;
|
Projection proj;
|
||||||
Weight weight;
|
Weight weight;
|
||||||
ValenceAttr *valence;
|
ValenceAttr *valence;
|
||||||
|
|
||||||
inline OddPointLoopGeneric(Projection proj = Projection(), Weight weight = Weight()) :
|
inline OddPointLoopGeneric(MESH_TYPE &_m, Projection proj = Projection(), Weight weight = Weight()) :
|
||||||
proj(proj), weight(weight), valence(0) {}
|
m(_m), proj(proj), weight(weight), valence(0) {}
|
||||||
|
|
||||||
void operator()(typename MESH_TYPE::VertexType &nv, face::Pos<typename MESH_TYPE::FaceType> ep) {
|
void operator()(typename MESH_TYPE::VertexType &nv, face::Pos<typename MESH_TYPE::FaceType> ep) {
|
||||||
proj.reset();
|
proj.reset();
|
||||||
|
@ -367,7 +368,7 @@ struct OddPointLoopGeneric : public std::unary_function<face::Pos<typename MESH_
|
||||||
he.FlipV();
|
he.FlipV();
|
||||||
r = he.v;
|
r = he.v;
|
||||||
|
|
||||||
if( MESH_TYPE::HasPerVertexColor())
|
if( tri::HasPerVertexColor(m))
|
||||||
nv.C().lerp(ep.f->V(ep.z)->C(),ep.f->V1(ep.z)->C(),.5f);
|
nv.C().lerp(ep.f->V(ep.z)->C(),ep.f->V1(ep.z)->C(),.5f);
|
||||||
|
|
||||||
if (he.IsBorder()) {
|
if (he.IsBorder()) {
|
||||||
|
@ -521,6 +522,7 @@ struct EvenPointLoopGeneric : public std::unary_function<face::Pos<typename MESH
|
||||||
template<class MESH_TYPE>
|
template<class MESH_TYPE>
|
||||||
struct OddPointLoop : OddPointLoopGeneric<MESH_TYPE, Centroid<MESH_TYPE> >
|
struct OddPointLoop : OddPointLoopGeneric<MESH_TYPE, Centroid<MESH_TYPE> >
|
||||||
{
|
{
|
||||||
|
OddPointLoop(MESH_TYPE &_m):OddPointLoopGeneric<MESH_TYPE, Centroid<MESH_TYPE> >(_m){}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class MESH_TYPE>
|
template<class MESH_TYPE>
|
||||||
|
@ -575,7 +577,7 @@ bool RefineOddEvenE(MESH_TYPE &m, ODD_VERT odd, EVEN_VERT even, PREDICATE edgePr
|
||||||
//if (RefineSelected && !(*fi).V(i)->IsS() )
|
//if (RefineSelected && !(*fi).V(i)->IsS() )
|
||||||
// break;
|
// break;
|
||||||
face::Pos<typename MESH_TYPE::FaceType>aux (&(*fi),i);
|
face::Pos<typename MESH_TYPE::FaceType>aux (&(*fi),i);
|
||||||
if( MESH_TYPE::HasPerVertexColor() ) {
|
if( tri::HasPerVertexColor(m) ) {
|
||||||
(*fi).V(i)->C().lerp((*fi).V0(i)->C() , (*fi).V1(i)->C(),0.5f);
|
(*fi).V(i)->C().lerp((*fi).V0(i)->C() , (*fi).V1(i)->C(),0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue