Corrected update function, now only the needed simplexes should be updated.

This commit is contained in:
Paolo Cignoni 2005-12-12 11:17:32 +00:00
parent f73fa19346
commit cb6757048f
2 changed files with 34 additions and 25 deletions

View File

@ -24,6 +24,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.5 2005/11/26 00:16:44 cignoni
Corrected a lot of bugs about the use of enabled entities
Revision 1.4 2005/11/21 21:46:20 cignoni Revision 1.4 2005/11/21 21:46:20 cignoni
Changed HasColor -> HasFaceColor and HasNormal ->HasFaceNormal Changed HasColor -> HasFaceColor and HasNormal ->HasFaceNormal
@ -106,8 +109,8 @@ public:
ThisTypeIterator oldbegin=begin(); ThisTypeIterator oldbegin=begin();
ThisTypeIterator oldend=end(); ThisTypeIterator oldend=end();
BaseType::push_back(v); BaseType::push_back(v);
if(oldbegin!=begin()) _update(begin(),end()); if(oldbegin!=begin()) _updateOVP(begin(),end());
else _update(oldend,end()); else _updateOVP(oldend, end());
} }
void pop_back(); void pop_back();
void resize(const unsigned int & _size) void resize(const unsigned int & _size)
@ -115,8 +118,8 @@ public:
ThisTypeIterator oldbegin=begin(); ThisTypeIterator oldbegin=begin();
ThisTypeIterator oldend=end(); ThisTypeIterator oldend=end();
BaseType::resize(_size); BaseType::resize(_size);
if(oldbegin!=begin()) _update(begin(),end()); if(oldbegin!=begin()) _updateOVP(begin(),end());
else _update(oldend,end()); else _updateOVP(oldend, end());
if(ColorEnabled) CV.resize(_size); if(ColorEnabled) CV.resize(_size);
if(NormalEnabled) NV.resize(_size); if(NormalEnabled) NV.resize(_size);
if(VFAdjacencyEnabled) AV.resize(_size); if(VFAdjacencyEnabled) AV.resize(_size);
@ -133,15 +136,15 @@ public:
if (VFAdjacencyEnabled) AV.reserve(_size); if (VFAdjacencyEnabled) AV.reserve(_size);
if (FFAdjacencyEnabled) AF.reserve(_size); if (FFAdjacencyEnabled) AF.reserve(_size);
if (WedgeTexEnabled) WTV.reserve(_size); if (WedgeTexEnabled) WTV.reserve(_size);
if(oldbegin!=begin()) _update(begin(),end()); if(oldbegin!=begin()) _updateOVP(begin(),end());
} }
void _update(ThisTypeIterator lbegin, ThisTypeIterator lend) void _updateOVP(ThisTypeIterator lbegin, ThisTypeIterator lend)
{ {
ThisTypeIterator vi; ThisTypeIterator fi;
//for(vi=lbegin;vi!=lend;++vi) //for(fi=begin();vi!=end();++vi)
for(vi=begin();vi!=end();++vi) for(fi=lbegin;fi!=lend;++fi)
(*vi).EV=this; (*fi)._ovp=this;
} }
//////////////////////////////////////// ////////////////////////////////////////
// Enabling Eunctions // Enabling Eunctions
@ -335,15 +338,18 @@ template <class T> class WedgeTexturefOcf: public WedgeTextureOcf<TCoord2<float,
template < class T> class InfoOcf: public T { template < class T> class InfoOcf: public T {
public: public:
vector_ocf<typename T::FaceType> &Base() const { return *EV;} vector_ocf<typename T::FaceType> &Base() const { return *_ovp;}
inline int Index() const { inline int Index() const {
typename T::FaceType const *tp=static_cast<typename T::FaceType const *>(this); typename T::FaceType const *tp=static_cast<typename T::FaceType const *>(this);
int tt2=tp- &*(EV->begin()); int tt2=tp- &*(_ovp->begin());
return tt2; return tt2;
} }
public: public:
vector_ocf<typename T::FaceType> *EV; // ovp Optional Vector Pointer
// Pointer to the base vector where each face element is stored.
// used to access to the vectors of the other optional members.
vector_ocf<typename T::FaceType> *_ovp;
}; };
} // end namespace face } // end namespace face

View File

@ -24,6 +24,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.1 2005/10/14 15:07:59 cignoni
First Really Working version
****************************************************************************/ ****************************************************************************/
@ -67,8 +70,8 @@ public:
ThisTypeIterator oldbegin=begin(); ThisTypeIterator oldbegin=begin();
ThisTypeIterator oldend=end(); ThisTypeIterator oldend=end();
BaseType::push_back(v); BaseType::push_back(v);
if(oldbegin!=begin()) _update(begin(),end()); if(oldbegin!=begin()) _updateOVP(begin(),end());
else _update(oldend,end()); else _updateOVP(oldend, end());
} }
void pop_back(); void pop_back();
void resize(const unsigned int & _size) void resize(const unsigned int & _size)
@ -76,8 +79,8 @@ public:
ThisTypeIterator oldbegin=begin(); ThisTypeIterator oldbegin=begin();
ThisTypeIterator oldend=end(); ThisTypeIterator oldend=end();
BaseType::resize(_size); BaseType::resize(_size);
if(oldbegin!=begin()) _update(begin(),end()); if(oldbegin!=begin()) _updateOVP(begin(),end());
else _update(oldend,end()); else _updateOVP(oldend, end());
if(ColorEnabled) CV.resize(_size); if(ColorEnabled) CV.resize(_size);
if(NormalEnabled) NV.resize(_size); if(NormalEnabled) NV.resize(_size);
@ -88,15 +91,15 @@ public:
BaseType::reserve(_size); BaseType::reserve(_size);
if (ColorEnabled) CV.reserve(_size); if (ColorEnabled) CV.reserve(_size);
if (NormalEnabled) NV.reserve(_size); if (NormalEnabled) NV.reserve(_size);
if(oldbegin!=begin()) _update(begin(),end()); if(oldbegin!=begin()) _updateOVP(begin(),end());
} }
void _update(ThisTypeIterator lbegin, ThisTypeIterator lend) void _updateOVP(ThisTypeIterator lbegin, ThisTypeIterator lend)
{ {
ThisTypeIterator vi; ThisTypeIterator vi;
//for(vi=lbegin;vi!=lend;++vi) for(vi=lbegin;vi!=lend;++vi)
for(vi=begin();vi!=end();++vi) //for(vi=begin();vi!=end();++vi)
(*vi).EV=this; (*vi)._ovp=this;
} }
//////////////////////////////////////// ////////////////////////////////////////
// Enabling Eunctions // Enabling Eunctions
@ -218,15 +221,15 @@ template <class T> class Color4bOcf: public ColorOcf<vcg::Color4b, T> {};
template < class T> class InfoOcf: public T { template < class T> class InfoOcf: public T {
public: public:
vector_ocf<typename T::VertType> &Base() const { return *EV;} vector_ocf<typename T::VertType> &Base() const { return *_ovp;}
inline int Index() const { inline int Index() const {
typename T::VertType const *tp=static_cast<typename T::VertType const*>(this); typename T::VertType const *tp=static_cast<typename T::VertType const*>(this);
int tt2=tp- &*(EV->begin()); int tt2=tp- &*(_ovp->begin());
return tt2; return tt2;
} }
public: public:
vector_ocf<typename T::VertType> *EV; vector_ocf<typename T::VertType> *_ovp;
}; };