|
cgma
|
#include <PST_Data.hpp>
Definition at line 181 of file PST_Data.hpp.
| PST_Edge::PST_Edge | ( | PST_Point * | start_pt, |
| PST_Point * | end_pt | ||
| ) | [inline] |
Definition at line 195 of file PST_Data.hpp.
: mark(0), private_mark_(false), start_(0), end_(0) { assert( start_pt != end_pt ); set_start_point( start_pt ); set_end_point( end_pt ); forward_ = PST_CoEdge(this); reverse_ = PST_CoEdge(this); }
Definition at line 249 of file PST_Data.cpp.
{
// Update list "head" pointers on points, if necessary.
if( start_point() )
remove_start_point();
if( end_point() )
remove_end_point();
// Destroy parent facets
for ( int i = 0; i < 2; i++ )
{
PST_CoEdge* coedge = i ? reverse() : forward();
if ( coedge->face() )
{
PST_Face* face = coedge->face();
face->coedge_ = 0;
PST_CoEdge* first = coedge;
do {
assert(coedge->face() == face);
coedge->face_ = 0;
PST_CoEdge* next = coedge->next();
coedge->next_ = 0;
coedge = next;
} while( first != coedge );
delete face ;
}
}
}
| double PST_Edge::closest_on_edge | ( | const CubitVector & | pos | ) |
Definition at line 288 of file PST_Data.cpp.
{
double t = closest_on_line( p );
if( t < 0.0 )
t = 0.0;
else if( t > 1.0 )
t = 1.0;
return t;
}
| double PST_Edge::closest_on_line | ( | const CubitVector & | pos | ) |
Definition at line 279 of file PST_Data.cpp.
{
CubitVector B = start_coord();
CubitVector M = end_coord() - B;
if( M.length_squared() < RESABS_SQR )
return 0.0;
return ( M % ( P - B ) ) / ( M % M );
}
| double PST_Edge::closest_on_line | ( | const CubitVector & | base, |
| const CubitVector & | direction | ||
| ) |
Definition at line 298 of file PST_Data.cpp.
{
CubitVector B1 = start_coord();
CubitVector M1 = direction();
if( M1.length_squared() < RESABS_SQR )
return 0.0;
if( M2.length_squared() < RESABS_SQR )
return closest_on_line( B2 );
CubitVector cross = M2 * M1;
if( cross.length_squared() < CUBIT_RESABS ) //parallel
return 0.0;
CubitVector N = M2 * cross;
double D = -( N % B2 );
return -( N % B1 + D ) / ( N % M1 );
}
| PST_CoEdge * PST_Edge::coedge | ( | PST_Face * | face | ) | [inline] |
Definition at line 534 of file PST_Data.hpp.
| PST_Face* PST_Edge::common_face | ( | PST_Edge * | edge | ) | [inline] |
| PST_Point * PST_Edge::common_point | ( | PST_Edge * | edge | ) | [inline] |
| PST_Face * PST_Edge::create_face | ( | PST_Point * | p1, |
| PST_Point * | p2, | ||
| PST_Point * | p3 | ||
| ) | [static] |
Definition at line 339 of file PST_Data.cpp.
{
// It is trivial to generalize this function for creating
// faces with an arbitrary number of sides, but I just
// want triangles.
const int size = 3;
PST_Point* p[size] = { pt1, pt2, pt3 };
int i;
PST_Edge* e[size];
PST_CoEdge* c[size];
// Initialize edge and coedge arrays, creating
// edges if necessary.
for( i = 0; i < size; i++ )
{
e[i] = p[i]->common( p[(i+1)%size] );
if( !e[i] )
{
e[i] = new PST_Edge( p[i], p[(i+1)%size] );
c[i] = e[i]->forward();
}
else
{
c[i] = e[i]->start_point() == p[i] ? e[i]->forward() : e[i]->reverse();
// If the co-edge in the appropriate direction is already
// part of a face (other than the boundary face), then we
// can't proceed.
// if( !c[i]->face()->boundary() )
if( c[i]->face() )
{
while( --i >= 0 )
if( ! c[i]->face() )
delete e[i];
return 0;
}
}
}
PST_Face* result = new PST_Face( c[0] );
for ( i = 0; i < size; i++ )
{
int next = (i + 1) % size;
c[i]->face_ = result;
c[i]->next_ = c[next];
}
return result;
}
| void PST_Edge::debug_draw | ( | int | color = 1, |
| bool | flush = true |
||
| ) |
Definition at line 620 of file PST_Data.cpp.
{
GfxDebug::draw_line(
float(start_coord().x()), float(start_coord().y()), float(start_coord().z()),
float( end_coord().x()), float( end_coord().y()), float( end_coord().z()),
color );
if( flush ) GfxDebug::flush();
}
| void PST_Edge::debug_draw_edges | ( | DLIList< PST_Edge * > & | list, |
| int | color, | ||
| int | bcolor = 0, |
||
| bool | flush = true |
||
| ) | [static] |
Definition at line 755 of file PST_Data.cpp.
{
if( !boundary_color ) boundary_color = color;
for( int e = edge_list.size(); e--; )
{
PST_Edge* edge_ptr = edge_list.get_and_step();
int c = !edge_ptr->forward()->face() || !edge_ptr->reverse()->face()
? boundary_color : color;
edge_ptr->debug_draw( c, false );
}
if( flush ) GfxDebug::flush();
}
| void PST_Edge::debug_draw_faces | ( | DLIList< PST_Edge * > & | list, |
| int | color, | ||
| bool | flush = true |
||
| ) | [static] |
Definition at line 771 of file PST_Data.cpp.
{
DLIList<PST_Face*> face_list;
PST_Edge::faces( edge_list, face_list );
PST_Face::debug_draw_faces( face_list, color, flush );
}
| void PST_Edge::debug_draw_points | ( | DLIList< PST_Edge * > & | list, |
| int | color, | ||
| int | bcolor = 0, |
||
| bool | flush = true |
||
| ) | [static] |
Definition at line 725 of file PST_Data.cpp.
{
if( ! boundary_color ) boundary_color = color;
DLIList<PST_Point*> point_list;
DLIList<PST_Point*> boundary_list;
PST_Edge::points( edge_list, point_list );
for( int i = point_list.size(); i--; )
{
PST_Point* pt = point_list.step_and_get();
PST_Edge* e = pt->edge();
do
{
if( !e->forward()->face() || !e->reverse()->face() )
break;
e = e->next(pt);
} while( e != pt->edge() );
if( !e->forward()->face() || !e->reverse()->face() )
{
point_list.change_to( 0 );
boundary_list.append( pt );
}
}
point_list.remove_all_with_value(0);
PST_Point::debug_draw_points( point_list, color, false );
PST_Point::debug_draw_points( boundary_list, boundary_color, flush );
}
| CubitVector PST_Edge::direction | ( | ) | [inline] |
Definition at line 259 of file PST_Data.hpp.
{ return end_coord() - start_coord(); }
| void PST_Edge::edges | ( | DLIList< PST_Face * > & | faces, |
| DLIList< PST_Edge * > & | edges | ||
| ) | [static] |
Definition at line 807 of file PST_Data.cpp.
{
int f;
for( f = faces.size(); f--; )
{
PST_CoEdge* first = faces.get_and_step()->first_coedge();
PST_CoEdge* coedge = first;
do
{
coedge->edge()->private_mark_ = 1;
coedge = coedge->next();
} while( coedge != first );
}
for( f = faces.size(); f--; )
{
PST_CoEdge* first = faces.get_and_step()->first_coedge();
PST_CoEdge* coedge = first;
do
{
if( coedge->edge()->private_mark_ )
{
coedge->edge()->private_mark_ = 0;
edges.append( coedge->edge() );
}
coedge = coedge->next();
} while( coedge != first );
}
}
| void PST_Edge::edges | ( | DLIList< PST_Point * > & | pts, |
| DLIList< PST_Edge * > & | edges | ||
| ) | [static] |
Definition at line 837 of file PST_Data.cpp.
{
int p;
for( p = pts.size(); p--; )
{
PST_Point* pt = pts.get_and_step();
PST_Edge* edge = pt->edge();
if( edge ) do
{
edge->private_mark_ = 1;
edge = edge->next( pt );
} while( edge != pt->edge() );
}
for( p = pts.size(); p--; )
{
PST_Point* pt = pts.get_and_step();
PST_Edge* edge = pt->edge();
if( edge ) do
{
if( edge->private_mark_ )
{
edge->private_mark_ = 0;
edges.append( edge );
}
edge = edge->next( pt );
} while( edge != pt->edge() );
}
}
| const CubitVector& PST_Edge::end_coord | ( | ) | [inline] |
Definition at line 256 of file PST_Data.hpp.
{ return *end_; }
| PST_Point* PST_Edge::end_point | ( | ) | [inline] |
Definition at line 250 of file PST_Data.hpp.
{ return end_; }
| void PST_Edge::faces | ( | DLIList< PST_Edge * > & | edges, |
| DLIList< PST_Face * > & | faces | ||
| ) | [static] |
Definition at line 778 of file PST_Data.cpp.
{
int e;
for( e = edges.size(); e--; )
{
PST_Edge* edge_ptr = edges.get_and_step();
if( edge_ptr->forward()->face() )
edge_ptr->forward()->face()->private_mark_ = 1;
if( edge_ptr->reverse()->face() )
edge_ptr->reverse()->face()->private_mark_ = 1;
}
for( e = edges.size(); e--; )
{
PST_Edge* edge_ptr = edges.get_and_step();
PST_Face* fface_ptr = edge_ptr->forward()->face();
PST_Face* rface_ptr = edge_ptr->reverse()->face();
if( fface_ptr && fface_ptr->private_mark_ )
{
fface_ptr->private_mark_ = 0;
faces.append( fface_ptr );
}
if( rface_ptr && rface_ptr->private_mark_ )
{
rface_ptr->private_mark_ = 0;
faces.append( rface_ptr );
}
}
}
| PST_CoEdge* PST_Edge::forward | ( | ) | [inline] |
Definition at line 283 of file PST_Data.hpp.
{ return &forward_; }
| PST_Edge * PST_Edge::insert_in_face | ( | PST_Point * | end, |
| PST_CoEdge * | after_this | ||
| ) | [static] |
Definition at line 507 of file PST_Data.cpp.
{
if( end->edge_ )
return 0;
PST_Point* start = after_this->end_point();
PST_Edge* new_edge = new PST_Edge( start, end );
new_edge->forward_.next_ = new_edge->reverse();
new_edge->reverse_.next_ = after_this->next_;
new_edge->forward_.face_ = new_edge->reverse_.face_ = after_this->face_;
after_this->next_ = new_edge->forward();
after_this->face_->modified(true);
return new_edge;
}
| void PST_Edge::make_facets | ( | GMem & | gmem, |
| double | tolerance, | ||
| DLIList< PST_Edge * > & | edges | ||
| ) | [static] |
Definition at line 902 of file PST_Data.cpp.
{
assert(gmem.fListCount % 4 == 0);
std::vector<double> points(gmem.pointListCount*3);
std::vector<int> facets(gmem.fListCount*3/4);
int i;
GPoint* pitor = gmem.point_list();
std::vector<double>::iterator ditor = points.begin();
for ( i = gmem.pointListCount; i--; )
{
*ditor++ = pitor->x;
*ditor++ = pitor->y;
*ditor++ = pitor->z;
pitor++;
}
int* fitor = gmem.facet_list();
std::vector<int>::iterator iitor = facets.begin();
for ( i = 0; i < gmem.fListCount; i += 4 )
{
assert( *fitor++ == 3 );
*iitor++ = *fitor++;
*iitor++ = *fitor++;
*iitor++ = *fitor++;
}
make_facets( points, facets, tolerance, edge_list );
}
| void PST_Edge::make_facets | ( | const std::vector< double > & | coordinates, |
| const std::vector< int > & | connections, | ||
| double | tolerance, | ||
| DLIList< PST_Edge * > & | edge_list | ||
| ) | [static] |
Definition at line 932 of file PST_Data.cpp.
{
DLIList<PST_Face*> face_list;
double tol_sqr = tolerance * tolerance;
int i, j, k, numcoords, numtriangles;
numcoords = coordinates.size()/3;
numtriangles = connections.size()/3;
//The list of points created.
PST_Point** ptlist = new PST_Point*[numcoords];
//The list of indices into ptlist, where the index into this
//list is the same as the index into the point list, and
//the value in this list is the index of the corresponding
//point in ptlist. This is used because some points will
//be merged due to the tolerance.
int* ptindex_list = new int[numcoords];
//Create the points
k = 0;
for( i = 0; i < numcoords; i++ )
{
CubitVector pos( coordinates[3*i], coordinates[3*i+1], coordinates[3*i+2] );
//Check if we need to merge this point with a different point
for( j = 0; j < k; j++ )
{
if( (*(ptlist[j]) - pos).length_squared() <= tol_sqr )
break;
}
if( j == k )
{
ptlist[k] = new PST_Point( pos );
ptlist[k++]->sequence = i;
}
ptindex_list[i] = j;
}
int fail_count = 0;
for ( i = 0; i < numtriangles; i++ )
{
int i1 = ptindex_list[connections[3*i ]];
int i2 = ptindex_list[connections[3*i+1]];
int i3 = ptindex_list[connections[3*i+2]];
if ( i1 == i2 || i2 == i3 || i3 == i1 )
{
PRINT_ERROR("Degenerate facet encountered in PST_Edge::make_facets()\n");
fail_count++;
}
else
{
PST_Face* new_face
= PST_Edge::create_face( ptlist[i1], ptlist[i2], ptlist[i3] );
if( new_face ){
face_list.append(new_face);
new_face->sequence = i;
}
else{
fail_count++;
}
}
}
if( fail_count > 0 )
PRINT_ERROR("Failed to construct %d facets in PST_Data::make_facets(..)\n",
fail_count);
delete [] ptindex_list;
delete [] ptlist;
if(fail_count == 0)
{
PST_Edge::edges( face_list, edge_list );
validate( edge_list, true );
bool debug1 = false;
if (debug1)
debug_draw_edges( edge_list, CUBIT_BLUE_INDEX, CUBIT_RED_INDEX, true );
}
}
| void PST_Edge::make_gmem | ( | GMem & | gmem, |
| DLIList< PST_Face * > & | facets | ||
| ) | [static] |
Definition at line 640 of file PST_Data.cpp.
{
DLIList<PST_Point*> point_list, temp_list;
int i, j, pcount, fcount;
for( i = facets.size(); i--; )
{
PST_Face* facet = facets.get_and_step();
// if( facet->boundary() )
// continue;
temp_list.clean_out();
facet->append_points( temp_list );
for( j = temp_list.size(); j--; )
{
temp_list.get_and_step()->mark = -1;
}
}
pcount = 0;
fcount = 0;
for( i = facets.size(); i--; )
{
PST_Face* facet = facets.get_and_step();
// if( facet->boundary() )
// continue;
temp_list.clean_out();
facet->append_points( temp_list );
fcount += temp_list.size() + 1;
for( j = temp_list.size(); j--; )
{
PST_Point* pt_ptr = temp_list.get_and_step();
if( pt_ptr->mark == -1 )
{
pt_ptr->mark = pcount++;
point_list.append( pt_ptr );
}
}
}
gmem.allocate_tri( facets.size() );
gmem.pointListCount = point_list.size();
GPoint* pt_array = gmem.point_list();
point_list.reset();
for( i = 0; i < point_list.size(); i++ )
{
PST_Point* pt_ptr = point_list.get_and_step();
pt_array[i].x = float(pt_ptr->x());
pt_array[i].y = float(pt_ptr->y());
pt_array[i].z = float(pt_ptr->z());
}
gmem.fListCount = facets.size() * 4;
int* offset = gmem.facet_list();
for( i = facets.size(); i--; )
{
// if( facets.get()->boundary() )
// continue;
temp_list.clean_out();
facets.get_and_step()->append_points( temp_list );
*(offset++) = temp_list.size();
for( j = temp_list.size(); j--; )
{
*(offset++) = temp_list.get_and_step()->mark;
}
}
}
| void PST_Edge::make_gmem | ( | GMem & | gmem, |
| DLIList< PST_Edge * > & | edges | ||
| ) | [static] |
Definition at line 711 of file PST_Data.cpp.
{
DLIList<PST_Face*> face_list;
PST_Edge::faces( edges, face_list );
make_gmem( gmem, face_list );
}
| PST_Edge* PST_Edge::next | ( | PST_Point * | pt | ) | [inline] |
Definition at line 312 of file PST_Data.hpp.
{ return pt == start_ ? start_next_ :
pt == end_ ? end_next_ : 0; }
| PST_Point* PST_Edge::other | ( | PST_Point * | pt | ) | [inline] |
Definition at line 278 of file PST_Data.hpp.
| PST_CoEdge* PST_Edge::other | ( | PST_CoEdge * | coedge | ) | [inline] |
Definition at line 289 of file PST_Data.hpp.
| PST_Face* PST_Edge::other | ( | PST_Face * | face | ) | [inline] |
| PST_Edge * PST_Edge::other | ( | PST_Point * | point, |
| PST_Face * | face | ||
| ) |
| void PST_Edge::points | ( | DLIList< PST_Edge * > & | edges, |
| DLIList< PST_Point * > & | pts | ||
| ) | [static] |
Definition at line 868 of file PST_Data.cpp.
{
int e;
for( e = edges.size(); e--; )
{
PST_Edge* edge_ptr = edges.get_and_step();
edge_ptr->start_point()->private_mark_ = 1;
edge_ptr->end_point()->private_mark_ = 1;
}
for( e = edges.size(); e--; )
{
PST_Edge* edge_ptr = edges.get_and_step();
PST_Point* sp = edge_ptr->start_point();
PST_Point* ep = edge_ptr->end_point();
if( sp->private_mark_ )
{
sp->private_mark_ = 0;
points.append( sp );
}
if( ep->private_mark_ )
{
ep->private_mark_ = 0;
points.append( ep );
}
}
}
| CubitVector PST_Edge::position | ( | double | t | ) | [inline] |
Definition at line 263 of file PST_Data.hpp.
{ return start_coord() + t * direction(); }
| void PST_Edge::print | ( | ) |
Definition at line 1233 of file PST_Data.cpp.
| void PST_Edge::remove_end_point | ( | ) | [inline, private] |
Definition at line 343 of file PST_Data.hpp.
{ remove_point( end_, end_next_); }
| void PST_Edge::remove_point | ( | PST_Point *& | ptr, |
| PST_Edge *& | next | ||
| ) | [private] |
Definition at line 581 of file PST_Data.cpp.
{
if( next == this )
{
ptr->edge_ = 0;
next= 0;
ptr = 0;
return;
}
PST_Edge* prev = next;
while( prev->next(ptr) != this )
{
prev = prev->next(ptr);
assert( prev != next );
}
if( prev->start_next_ == this )
{
prev->start_next_ = next;
}
else
{
assert(prev->end_next_ == this);
prev->end_next_ = next;
}
if( ptr->edge_ == this )
ptr->edge_ = next;
}
| void PST_Edge::remove_start_point | ( | ) | [inline, private] |
Definition at line 342 of file PST_Data.hpp.
{ remove_point( start_, start_next_ ); }
| PST_CoEdge* PST_Edge::reverse | ( | ) | [inline] |
Definition at line 286 of file PST_Data.hpp.
{ return &reverse_; }
| CubitSense PST_Edge::sense | ( | PST_Face * | face | ) | [inline] |
Definition at line 547 of file PST_Data.hpp.
{
CubitSense result = CUBIT_UNKNOWN;
if( forward_.face_ == face )
result = CUBIT_FORWARD;
if( reverse_.face_ == face )
result = (result != CUBIT_UNKNOWN) ? CUBIT_UNKNOWN : CUBIT_REVERSED;
return result;
}
| CubitSense PST_Edge::sense | ( | PST_CoEdge * | coedge | ) | [inline] |
Definition at line 303 of file PST_Data.hpp.
{ return coedge == forward() ? CUBIT_FORWARD :
coedge == reverse() ? CUBIT_REVERSED : CUBIT_UNKNOWN; }
| void PST_Edge::set_end_point | ( | PST_Point * | pt | ) | [inline, private] |
Definition at line 348 of file PST_Data.hpp.
| void PST_Edge::set_point | ( | PST_Point * | pt, |
| PST_Point *& | ptr, | ||
| PST_Edge *& | next | ||
| ) | [private] |
Definition at line 550 of file PST_Data.cpp.
{
if( ptr )
remove_point( ptr, next );
if( pt->edge_ )
{
if( pt->edge()->start_point() == pt )
{
next = pt->edge()->start_next_;
pt->edge()->start_next_ = this;
}
else
{
assert( pt->edge()->end_point() == pt );
next = pt->edge()->end_next_;
pt->edge()->end_next_ = this;
}
}
else
{
next = this;
pt->edge_ = this;
}
ptr = pt;
}
| void PST_Edge::set_start_point | ( | PST_Point * | pt | ) | [inline, private] |
Definition at line 346 of file PST_Data.hpp.
{ set_point( pt, start_, start_next_ ); }
| PST_Edge * PST_Edge::split | ( | PST_Point * | point | ) |
Definition at line 524 of file PST_Data.cpp.
{
if( point->edge_ )
return 0;
PST_Edge* new_edge = new PST_Edge( point, end_ );
if (forward()->face()) {
new_edge->forward_.face_ = forward_.face_;
new_edge->forward_.next_ = forward_.next_;
forward_.next_ = new_edge->forward();
forward_.face_->modified(true);
}
if (reverse()->face()) {
new_edge->reverse_.face_ = reverse_.face_;
new_edge->reverse_.next_ = reverse();
reverse_.previous()->next_ = new_edge->reverse();
reverse_.face_->modified(true);
}
set_end_point(point);
return new_edge;
}
| PST_Edge * PST_Edge::split_face | ( | PST_Point * | start, |
| PST_Point * | end, | ||
| PST_Face * | hint = 0 |
||
| ) | [static] |
Definition at line 391 of file PST_Data.cpp.
{
if( !start->edge_ || !end->edge_ )
return 0;
if( ! face )
{
PST_Edge* start_edge = start->edge();
do
{
PST_Face* curr_face = start_edge->forward()->face();
PST_Face* rev_face = start_edge->reverse()->face();
while( true )
{
PST_CoEdge* coe = curr_face->coedge_;
do
{
if( coe->other( end ) )
{
if( face ) return 0;
face = curr_face;
curr_face = rev_face;
break;
}
coe = coe->next();
} while( coe != curr_face->coedge_ );
if( curr_face == rev_face )
break;
else
curr_face = rev_face;
}
start_edge = start_edge->next(start);
} while( start_edge != start->edge() );
if( !face ) return 0;
}
PST_CoEdge* start_coedge = 0;
PST_CoEdge* end_coedge = 0;
PST_CoEdge* coedge = face->coedge_;
do
{
if( coedge->end_point() == start )
{
start_coedge = coedge;
break;
}
coedge = coedge->next();
} while( coedge != face->coedge_ );
if( ! start_coedge )
return 0;
coedge = start_coedge->next();
PST_CoEdge* stop = start_coedge;
do
{
if( coedge->end_point() == start )
{
start_coedge = coedge;
}
if( coedge->end_point() == end )
{
end_coedge = coedge;
break;
}
coedge = coedge->next();
} while( coedge != stop );
if( ! end_coedge )
return 0;
return split_face( start_coedge, end_coedge );
}
| PST_Edge * PST_Edge::split_face | ( | PST_CoEdge * | after_coedge_1, |
| PST_CoEdge * | after_coedge_2 | ||
| ) | [static] |
Definition at line 473 of file PST_Data.cpp.
{
PST_Point* point1 = coedge1->end_point();
PST_Point* point2 = coedge2->end_point();
if( (coedge1->edge() == coedge2->edge() ) ||
(coedge1->face() != coedge2->face() ) ||
(point1 == point2 ) ||
( point1->common( point2 ) ) )
return 0;
PST_Edge* new_edge = new PST_Edge( point1, point2 );
new_edge->forward_.next_ = coedge2->next_;
new_edge->reverse_.next_ = coedge1->next_;
coedge1->next_ = new_edge->forward();
coedge2->next_ = new_edge->reverse();
PST_Face* old_face = coedge1->face();
PST_Face* new_face = new PST_Face( new_edge->forward(), old_face );
//new_face->boundary(0);
old_face->coedge_ = new_edge->reverse();
new_edge->reverse_.face_ = old_face;
coedge1 = new_edge->forward();
do
{
coedge1->face_ = new_face;
coedge1 = coedge1->next();
} while( coedge1 != new_edge->forward() );
return new_edge;
}
| const CubitVector& PST_Edge::start_coord | ( | ) | [inline] |
Definition at line 253 of file PST_Data.hpp.
{ return *start_; }
| PST_Point* PST_Edge::start_point | ( | ) | [inline] |
Definition at line 247 of file PST_Data.hpp.
{ return start_; }
| int PST_Edge::validate | ( | DLIList< PST_Edge * > & | edges, |
| CubitBoolean | print = CUBIT_FALSE |
||
| ) | [static] |
Definition at line 1200 of file PST_Data.cpp.
{
DLIList<PST_Face*> faces;
PST_Edge::faces( edges, faces );
int result = 0;
for( int f = faces.size(); f--; )
result += faces.get_and_step()->validate(print);
return result;
}
| int PST_Edge::validate | ( | CubitBoolean | print = CUBIT_FALSE | ) |
Definition at line 1029 of file PST_Data.cpp.
{
int result = 0;
int count = 0;
PST_Edge* edge = 0;
if( !start_ )
{
if( print ) PRINT_ERROR("Edge %p has null start point.\n", (void*)this);
result++;
}
else
{
result += start_->validate(print);
edge = this;
count = 0;
do
{
if( count++ > PST_MAX_LIST_LEN )
{
if( print )
{
PRINT_ERROR("Bad edge list around Point %p.\n", (void*)start_);
}
result++;
break;
}
edge = edge->next( start_ );
} while( edge != this );
}
if( !end_ )
{
if( print ) PRINT_ERROR("Edge %p has null end point.\n", (void*)this);
result++;
}
else
{
result += end_->validate(print);
count = 0;
edge = this;
do
{
if( count++ > PST_MAX_LIST_LEN )
{
if( print )
{
PRINT_ERROR("Bad edge list around Point %p.\n", (void*)end_);
}
result++;
break;
}
edge = edge->next( end_ );
} while( edge != this );
}
if (forward_.face_ && !forward_.next_)
{
if( print )
PRINT_ERROR("Forward CoEdge on Edge %p as Face %p but no next().\n",
(void*)this, (void*)forward_.face_);
count++;
}
if (reverse_.face_ && !reverse_.next_)
{
if( print )
PRINT_ERROR("Reverse CoEdge on Edge %p as Face %p but no next().\n",
(void*)this, (void*)reverse_.face_);
count++;
}
if (!forward_.face_ && forward_.next_)
{
if( print )
PRINT_ERROR("Forward CoEdge on Edge %p as %p as next CoEdge but no Face.\n",
(void*)this, (void*)forward_.next_);
count++;
}
if (!reverse_.face_ && reverse_.next_)
{
if( print )
PRINT_ERROR("Reverse CoEdge on Edge %p as %p as next CoEdge but no Face.\n",
(void*)this, (void*)reverse_.next_);
count++;
}
return result;
}
PST_Point* PST_Edge::end_ [private] |
Definition at line 352 of file PST_Data.hpp.
PST_Edge* PST_Edge::end_next_ [private] |
Definition at line 354 of file PST_Data.hpp.
PST_CoEdge PST_Edge::forward_ [private] |
Definition at line 356 of file PST_Data.hpp.
| int PST_Edge::mark |
Definition at line 336 of file PST_Data.hpp.
cBit PST_Edge::private_mark_ [private] |
Definition at line 339 of file PST_Data.hpp.
PST_CoEdge PST_Edge::reverse_ [private] |
Definition at line 357 of file PST_Data.hpp.
PST_Point* PST_Edge::start_ [private] |
Definition at line 351 of file PST_Data.hpp.
PST_Edge* PST_Edge::start_next_ [private] |
Definition at line 353 of file PST_Data.hpp.