corrected bugs in Iterator

This commit is contained in:
Nico Pietroni 2009-09-02 13:28:37 +00:00
parent c1daa656fe
commit e43cfa5f43
1 changed files with 44 additions and 14 deletions

View File

@ -64,7 +64,7 @@ class GeometricInterpolator{
public: public:
typedef typename VertexType::ScalarType ScalarType; typedef typename VertexType::ScalarType ScalarType;
static void Apply( const VertexType &a, const VertexType &b, ScalarType t, VertexType &res){ static void Apply( const VertexType &a, const VertexType &b, ScalarType t, VertexType &res){
assert (&a != &b); /*assert (&a != &b);*/
res.P() = a.P()*(1-t) + b.P()*(t); res.P() = a.P()*(1-t) + b.P()*(t);
} }
}; };
@ -622,7 +622,15 @@ private:
bool over; bool over;
public: public:
Iterator(Pos& pos){ Iterator(Pos& pos){
start = cur = Pos(pos.F(), pos.E()); start =Pos(pos.F(), pos.E());
while((start.F()->IsD())||(!start.F()->IsF(start.E())))
{
int i = start.F()->FFi( start.E() );
start.F() = start.F()->FFp( start.E() );
start.E() = (i+2)%3;
}
cur=start;
over = false; over = false;
} }
bool End() const { bool End() const {
@ -644,6 +652,28 @@ public:
if (cur.F()==start.F()) over=true; if (cur.F()==start.F()) over=true;
} }
// void operator ++ () {
// int i = cur.F()->FFi( cur.E() );
// cur.F() = cur.F()->FFp( cur.E() );
// cur.E() = (i+2)%3;
// if (cur.F()->IsF(cur.E())) {
// //// jump over faux diag
// int i = cur.F()->FFi( cur.E() );
// cur.F() = cur.F()->FFp( cur.E() );
// cur.E() = (i+2)%3;
//
// }
// // jump over real edge
// //FaceType *f =cur.F()->FFp( cur.E() );
// //if (f==cur.F()) over=true; // border found
// //cur.E() = (cur.F()->FFi( cur.E() ) +2 )%3;
// //cur.F() = f;
// if (cur.F()==start.F()) over=true;
//}
Pos GetPos(){ Pos GetPos(){
return cur; return cur;
} }
@ -742,9 +772,9 @@ typedef enum { VALENCY_FLAGS = 24 } ___; // this bit and the 4 successive one ar
static void SetValency(VertexType *v, int n){ static void SetValency(VertexType *v, int n){
//v->Q() = n; //v->Q() = n;
assert(n>=0 && n<=31); /* assert(n>=0 && n<=31);
v->Flags()&= ~(31<<VALENCY_FLAGS); v->Flags()&= ~(31<<VALENCY_FLAGS);
v->Flags()|= n<<VALENCY_FLAGS; v->Flags()|= n<<VALENCY_FLAGS;*/
} }
static int GetValency(const VertexType *v){ static int GetValency(const VertexType *v){
@ -753,19 +783,19 @@ static int GetValency(const VertexType *v){
} }
static void IncreaseValency(VertexType *v, int dv=1){ static void IncreaseValency(VertexType *v, int dv=1){
#ifdef NDEBUG //#ifdef NDEBUG
v->Flags() += dv<<VALENCY_FLAGS; // v->Flags() += dv<<VALENCY_FLAGS;
#else //#else
SetValency( v, GetValency(v)+dv ); // SetValency( v, GetValency(v)+dv );
#endif //#endif
} }
static void DecreaseValency(VertexType *v, int dv=1){ static void DecreaseValency(VertexType *v, int dv=1){
#ifdef NDEBUG //#ifdef NDEBUG
v->Flags() -= dv<<VALENCY_FLAGS; // v->Flags() -= dv<<VALENCY_FLAGS;
#else //#else
SetValency( v, GetValency(v)-dv ); // SetValency( v, GetValency(v)-dv );
#endif //#endif
} }
static void UpdateValencyInFlags(MeshType& m){ static void UpdateValencyInFlags(MeshType& m){