|
cgma
|
#include <PartitionCurve.hpp>
Definition at line 24 of file PartitionCurve.hpp.
| PartitionCurve::~PartitionCurve | ( | ) | [virtual] |
Definition at line 60 of file PartitionCurve.cpp.
{
start_point(0);
end_point(0);
remove_all_coedges();
remove_facet_data();
}
| PartitionCurve::PartitionCurve | ( | ) | [protected] |
Definition at line 51 of file PartitionCurve.cpp.
: firstCoEdge(0), startPoint(0), endPoint(0), startNext(0), endNext(0) { }
| CubitStatus PartitionCurve::add | ( | PartitionCoEdge * | coedge | ) |
Definition at line 69 of file PartitionCurve.cpp.
{
if( coedge->myCurve )
return CUBIT_FAILURE;
coedge->curveNext = firstCoEdge;
firstCoEdge = coedge;
coedge->myCurve = this;
return CUBIT_SUCCESS;
}
| void PartitionCurve::append_simple_attribute_virt | ( | const CubitSimpleAttrib & | csa | ) | [virtual] |
Implements TopologyBridge.
Reimplemented in PartPTCurve.
Definition at line 332 of file PartitionCurve.cpp.
{ sub_entity_set().add_attribute( this, csa ); }
| virtual CubitStatus PartitionCurve::combine | ( | PartitionCurve * | dead_curve | ) | [pure virtual] |
Implemented in PartPTCurve, SegmentedCurve, and SubCurve.
| void PartitionCurve::do_facet_cleanup | ( | ) |
Definition at line 760 of file PartitionCurve.cpp.
{
int i;
const double tol = 10.0 * GEOMETRY_RESABS;
const double tol_sqr = tol * tol;
DLIList<CubitFacetEdgeData*> edge_list(facetEdges);
CubitFacetEdgeData* prev_edge = 0;
edge_list.reset();
for ( i = edge_list.size(); i--; )
{
CubitFacetEdgeData* edge = edge_list.get_and_step();
PartitionEntity* start_pt = TDVGFacetOwner::get(edge->point(0));
PartitionEntity* end_pt = TDVGFacetOwner::get(edge->point(1));
if ( start_pt && end_pt )
{
prev_edge = edge;
continue;
}
CubitVector edge_vect(edge->point(1)->coordinates());
edge_vect -= edge->point(0)->coordinates();
if ( edge_vect.length_squared() > tol_sqr )
{
prev_edge = edge;
continue;
}
CubitPoint *keep, *dead;
if ( start_pt )
{
keep = edge->point(0);
dead = edge->point(1);
}
else if ( end_pt )
{
keep = edge->point(1);
dead = edge->point(0);
}
else
{
double prev = (prev_edge->point(0)->coordinates() -
prev_edge->point(1)->coordinates()).length_squared();
double next = (edge_list.get()->point(0)->coordinates() -
edge_list.get()->point(1)->coordinates()).length_squared();
if ( prev < next )
{
dead = prev_edge->shared_point(edge);
keep = edge_list.get()->shared_point(edge);
}
else
{
dead = edge_list.get()->shared_point(edge);
keep = prev_edge->shared_point(edge);
}
assert( dead && keep );
}
if ( PartSurfFacetTool::collapse_edge( keep, dead ) )
{
;
}
else
{
prev_edge = edge;
}
}
}
| void PartitionCurve::draw_facets | ( | int | color | ) |
Definition at line 705 of file PartitionCurve.cpp.
{
if( !facetEdges.size() )
{
PRINT_ERROR("No facet data.\n");
return ;
}
int i;
GPoint* pts = new GPoint[facetEdges.size() + 1];
facetEdges.reset();
CubitPoint* pt = 0;
if( facetEdges.size() == 1 )
{
pt = facetEdges.get()->point(0);
}
else
{
pt = facetEdges.get()->shared_point(facetEdges.next());
pt = facetEdges.get()->other_point(pt);
}
CubitVector v = pt->coordinates();
pts[0].x = (float)v.x();
pts[0].y = (float)v.y();
pts[0].z = (float)v.z();
for( i = 1; i <= facetEdges.size(); i++ )
{
pt = facetEdges.get_and_step()->other_point(pt);
CubitVector v = pt->coordinates();
pts[i].x = (float)v.x();
pts[i].y = (float)v.y();
pts[i].z = (float)v.z();
}
GfxDebug::draw_polyline( pts, facetEdges.size() + 1, color );
for ( i = 0; i <= facetEdges.size(); i++ )
{
GfxDebug::draw_point( pts[i].x, pts[i].y, pts[i].z, color );
}
facetEdges.reset();
for ( i = 0; i < facetEdges.size(); i++ )
{
CubitFacetEdge* edge = facetEdges.get_and_step();
CubitVector mid = 0.5*(edge->point(0)->coordinates()+edge->point(1)->coordinates());
GfxDebug::draw_label( i, (float)mid.x(), (float)mid.y(), (float)mid.z(), color );
}
GfxDebug::flush();
delete [] pts;
}
| PartitionPoint* PartitionCurve::end_point | ( | ) | const [inline] |
Definition at line 38 of file PartitionCurve.hpp.
{ return endPoint; }
| CubitStatus PartitionCurve::end_point | ( | PartitionPoint * | point | ) |
Definition at line 150 of file PartitionCurve.cpp.
{
if( point == endPoint )
return CUBIT_SUCCESS;
if( !remove_end_point() )
{ assert(0); return CUBIT_FAILURE; }
if( !point )
return CUBIT_SUCCESS;
endPoint = point;
if( point != startPoint )
{
endNext = point->firstCurve;
point->firstCurve = this;
point->curveCount++;
}
return CUBIT_SUCCESS;
}
| CubitStatus PartitionCurve::fix_facet_data | ( | PartitionCurve * | new_curve | ) |
Definition at line 415 of file PartitionCurve.cpp.
{
if ( !facetEdges.size() )
return CUBIT_SUCCESS;
DLIList<CubitFacetEdgeData*> my_edges(facetEdges);
assert( end_point() == new_curve->start_point() );
CubitVector pos( end_point()->coordinates() );
double min_edge_len_sqr = CUBIT_DBL_MAX;
double min_edge_dst_sqr = CUBIT_DBL_MAX;
CubitFacetEdgeData* closest_edge = 0;
CubitVector point, vect, edge_pos;
int i;
for ( i = my_edges.size(); i--; ) {
CubitFacetEdgeData* edge = my_edges.step_and_get();
point = edge->point(0)->coordinates();
vect = edge->point(1)->coordinates() - point;
double len_sqr = vect.length_squared();
if ( len_sqr < min_edge_len_sqr )
min_edge_len_sqr = len_sqr;
point -= pos;
double t = (vect % -point) / len_sqr;
if ( t < 0.0 ) t = 0.0;
else if( t > 1.0 ) t = 1.0;
double dst_sqr = (point + t * vect).length_squared();
if ( dst_sqr < min_edge_dst_sqr ) {
min_edge_dst_sqr = dst_sqr;
closest_edge = edge;
edge_pos = edge->point(0)->coordinates() + t * vect;
}
}
my_edges.reset();
DLIList<CubitFacetEdgeData*> new_curve_edges;
my_edges.last();
while( my_edges.get() != closest_edge ) {
new_curve_edges.append( my_edges.pop() );
my_edges.last();
}
min_edge_len_sqr *= 0.2;
double dst_tol_sqr = CUBIT_MAX( min_edge_len_sqr, GEOMETRY_RESABS*GEOMETRY_RESABS );
bool edge_reversed = false;
if ( my_edges.size() > 1 )
{
my_edges.last();
CubitFacetEdgeData* other = my_edges.prev();
edge_reversed = other->contains( closest_edge->point(1) );
}
else if( new_curve_edges.size() > 1 )
{
new_curve_edges.last();
CubitFacetEdgeData* other = new_curve_edges.get();
edge_reversed = other->contains( closest_edge->point(0) );
}
else
{
edge_reversed = (start_point()->facet_point() == closest_edge->point(1));
assert(edge_reversed || start_point()->facet_point() == closest_edge->point(0));
}
CubitPoint* new_point = 0;
double d1 = (pos - closest_edge->point(0)->coordinates()).length_squared();
double d2 = (pos - closest_edge->point(1)->coordinates()).length_squared();
if ( (!TDVGFacetOwner::get(closest_edge->point(0)) && d1 < dst_tol_sqr) ||
(d1 < GEOMETRY_RESABS*GEOMETRY_RESABS) )
{
if ( !edge_reversed )
new_curve_edges.append( my_edges.pop() );
new_point = closest_edge->point(0);
}
else if( (!TDVGFacetOwner::get(closest_edge->point(1)) && d2 < dst_tol_sqr) ||
(d2 < GEOMETRY_RESABS*GEOMETRY_RESABS) )
{
if( edge_reversed )
new_curve_edges.append( my_edges.pop() );
new_point = closest_edge->point(1);
}
else
{
CubitFacetEdge* new_edge;
CubitFacet* new_facet;
TDVGFacetOwner::remove(closest_edge);
PartSurfFacetTool::split_edge(closest_edge, edge_pos, 0, new_point, new_edge, new_facet );
TDVGFacetOwner::set(closest_edge, this);
if ( edge_reversed ) {
new_curve_edges.append( my_edges.pop() );
my_edges.append( dynamic_cast<CubitFacetEdgeData*>(new_edge) );
} else {
new_curve_edges.append( dynamic_cast<CubitFacetEdgeData*>(new_edge) );
//TDVGFacetOwner::remove(new_edge);
}
}
CubitPointData* new_point_d = dynamic_cast<CubitPointData*>(new_point);
new_point_d->set(end_point()->coordinates());
end_point()->facet_point( new_point_d );
set_facet_data(my_edges);
new_curve_edges.reverse();
new_curve->set_facet_data(new_curve_edges);
PartitionCoEdge* coedge = 0;
while ((coedge = next_coedge(coedge)) != NULL )
{
PartitionLoop* loop = coedge->get_loop();
if (!loop) continue;
PartitionSurface* surf = loop->get_surface();
if (!surf->notify_moving_point( new_point, pos ))
return CUBIT_FAILURE;
}
new_point->set(pos);
return CUBIT_SUCCESS;
}
| void PartitionCurve::get_children_virt | ( | DLIList< TopologyBridge * > & | result | ) | [virtual] |
Implements TopologyBridge.
Definition at line 277 of file PartitionCurve.cpp.
{
result.append( startPoint );
if( startPoint != endPoint )
result.append( endPoint );
}
| void PartitionCurve::get_facet_data | ( | DLIList< CubitFacetEdgeData * > & | result_list | ) | const |
Definition at line 364 of file PartitionCurve.cpp.
{ result_list = facetEdges; }
| GeometryQueryEngine * PartitionCurve::get_geometry_query_engine | ( | ) | const [virtual] |
Implements TopologyBridge.
Definition at line 284 of file PartitionCurve.cpp.
{
return VirtualQueryEngine::instance();
}
| virtual CubitStatus PartitionCurve::get_graphics | ( | GMem & | result, |
| double | angle_tolerance = 0, |
||
| double | distance_tolerance = 0, |
||
| double | max_edge_length = 0 |
||
| ) | [pure virtual] |
Implemented in SegmentedCurve, SubCurve, and PartPTCurve.
| void PartitionCurve::get_parents_virt | ( | DLIList< TopologyBridge * > & | result | ) | [virtual] |
Implements TopologyBridge.
Definition at line 271 of file PartitionCurve.cpp.
{
for( PartitionCoEdge* coe = firstCoEdge; coe; coe = coe->curveNext )
result.append( coe );
}
| CubitStatus PartitionCurve::get_save_topology | ( | DLIList< int > & | points | ) | [protected] |
Definition at line 545 of file PartitionCurve.cpp.
{
for( int i = 0; i < 2; i++ )
{
PartitionPoint* point = i ? end_point() : start_point();
int set_id, pt_id;
if( &(point->sub_entity_set()) == &sub_entity_set() )
set_id = 0;
else
set_id = point->sub_entity_set().get_unique_id();
pt_id = point->sub_entity_set().get_id(point);
end_points.append(set_id);
end_points.append(pt_id);
}
return CUBIT_SUCCESS;
}
| CubitStatus PartitionCurve::get_simple_attribute | ( | DLIList< CubitSimpleAttrib > & | list | ) | [virtual] |
Implements TopologyBridge.
Reimplemented in PartPTCurve.
Definition at line 338 of file PartitionCurve.cpp.
{
sub_entity_set().get_attributes( this, list );
return CUBIT_SUCCESS;
}
| CubitStatus PartitionCurve::get_simple_attribute | ( | const CubitString & | name, |
| DLIList< CubitSimpleAttrib > & | list | ||
| ) | [virtual] |
Implements TopologyBridge.
Reimplemented in PartPTCurve.
Definition at line 343 of file PartitionCurve.cpp.
{
sub_entity_set().get_attributes( this, name.c_str(), list );
return CUBIT_SUCCESS;
}
| bool PartitionCurve::has_facet_data | ( | ) | const [inline] |
Definition at line 91 of file PartitionCurve.hpp.
{ return facetEdges.size() > 0; }
| bool PartitionCurve::is_in_surface | ( | const PartitionSurface * | surf, |
| bool | manifold_only = false |
||
| ) | const |
Definition at line 249 of file PartitionCurve.cpp.
{
int count = 0;
PartitionCoEdge* coedge = 0;
while ( (coedge = next_coedge(coedge)) )
if ( coedge->get_loop() && coedge->get_loop()->get_surface() == surf )
count++;
if (manifold_only)
return count == 1;
else
return count > 0;
}
| bool PartitionCurve::is_nonmanifold | ( | const PartitionSurface * | in_this_surf | ) | const |
Definition at line 239 of file PartitionCurve.cpp.
{
int count = 0;
PartitionCoEdge* coedge = 0;
while ( (coedge = next_coedge(coedge)) )
if ( coedge->get_loop() && coedge->get_loop()->get_surface() == surf )
count++;
return count > 1;
}
| int PartitionCurve::layer | ( | ) | const [inline, virtual] |
Reimplemented from TopologyBridge.
Definition at line 81 of file PartitionCurve.hpp.
{ return sub_entity_set().get_owner_layer(); }
| CubitStatus PartitionCurve::move_to_geometry | ( | CubitVector & | position | ) | [virtual] |
Reimplemented from PartitionEntity.
Definition at line 265 of file PartitionCurve.cpp.
{
const CubitVector copy(position);
return closest_point( copy, position );
}
| CubitStatus PartitionCurve::move_to_geometry | ( | CubitPoint * | facetPoint | ) |
Definition at line 831 of file PartitionCurve.cpp.
{
CubitVector new_pos;
if (!closest_point( point->coordinates(), new_pos ))
return CUBIT_FAILURE;
point->set(new_pos);
DLIList<PartitionSurface*> surfaces;
PartitionCoEdge* coedge = 0;
while ((coedge = next_coedge(coedge)) != NULL )
{
PartitionLoop* loop = coedge->get_loop();
if (!loop)
continue;
PartitionSurface* surf = loop->get_surface();
surfaces.append_unique(surf);
coedge = coedge->next();
}
int i;
surfaces.reset();
for ( i = 0; i < surfaces.size(); i++ )
if (!surfaces.get_and_step()->notify_moving_point( point, new_pos ))
break;
if (i < surfaces.size())
return CUBIT_FAILURE;
point->set(new_pos);
return CUBIT_SUCCESS;
}
| PartitionCoEdge* PartitionCurve::next_coedge | ( | const PartitionCoEdge * | prev = 0 | ) | const [inline] |
Definition at line 46 of file PartitionCurve.hpp.
{ return !prev ? firstCoEdge : prev->myCurve == this ? prev->curveNext : 0; }
| PartitionCurve* PartitionCurve::next_curve | ( | const PartitionPoint * | about_this | ) | const [inline] |
Definition at line 61 of file PartitionCurve.hpp.
{ return about_this == startPoint ? startNext :
about_this == endPoint ? endNext : 0; }
| void PartitionCurve::notify_split | ( | FacetEntity * | old_entity, |
| FacetEntity * | new_entity | ||
| ) | [virtual] |
Implements PartitionEntity.
Definition at line 382 of file PartitionCurve.cpp.
{
CubitFacetEdgeData* old_ptr = dynamic_cast<CubitFacetEdgeData*>(old_entity);
CubitFacetEdgeData* new_ptr = dynamic_cast<CubitFacetEdgeData*>(new_entity);
assert(TDVGFacetOwner::get(old_entity) == this);
assert(TDVGFacetOwner::get(new_entity) == 0);
assert(old_ptr && new_ptr);
facetEdges.reset();
if (facetEdges.get() == old_ptr)
{
if (new_ptr->contains(start_point()->facet_point()))
facetEdges.insert_first(new_ptr);
else
facetEdges.insert(new_ptr);
}
else if (facetEdges.move_to(old_ptr))
{
CubitFacetEdgeData* prev = facetEdges.prev();
if (prev->shared_point(new_ptr))
facetEdges.back();
facetEdges.insert(new_ptr);
}
else
{
assert( 0 /*old_entity not in list*/);
}
facetEdges.reset();
TDVGFacetOwner::set( new_ptr, this );
}
| int PartitionCurve::num_coedges | ( | ) | const |
Definition at line 109 of file PartitionCurve.cpp.
{
int count = 0;
for( PartitionCoEdge* coe = firstCoEdge; coe; coe = coe->curveNext )
count++;
return count;
}
| PartitionPoint* PartitionCurve::other_point | ( | const PartitionPoint * | pt | ) | const [inline] |
Definition at line 41 of file PartitionCurve.hpp.
{ return pt == startPoint ? endPoint : pt == endPoint ? startPoint : 0; }
| void PartitionCurve::print_debug_info | ( | const char * | prefix = 0, |
| bool | print_subentity_set = true |
||
| ) | const [virtual] |
Reimplemented from PartitionEntity.
Reimplemented in SegmentedCurve.
Definition at line 289 of file PartitionCurve.cpp.
{
const bool print_children = true;
if( prefix == 0 ) prefix = "";
char* new_prefix = new char[strlen(prefix)+3];
strcpy( new_prefix, prefix );
strcat( new_prefix, " ");
PRINT_INFO("%sPartitionCurve %p\n", prefix, (void*)this );
if(entset)
sub_entity_set().print_debug_info( new_prefix );
else
print_partitioned_entity();
PartitionCoEdge* coedge = 0;
DLIList<Surface*> surface_list(1);
while( (coedge = next_coedge(coedge)) )
{
surface_list.clean_out();
coedge->surfaces(surface_list);
Surface* surf_ptr = surface_list.size() == 1 ? surface_list.get() : 0;
PRINT_INFO("%s %s on Surface %p\n", prefix,
coedge->sense() == CUBIT_FORWARD ? "FORWARD" :
coedge->sense() == CUBIT_REVERSED ? "REVERSE" : "UNKNOWN",
(void*)surf_ptr );
}
PRINT_INFO("%s start point: %p\n", prefix, (void*)start_point() );
if( start_point() && print_children )
start_point()->print_debug_info( new_prefix, false );
if( end_point() && end_point() == start_point() )
PRINT_INFO("%s end point SAME as start point\n", prefix );
else
PRINT_INFO("%s end point: %p\n", prefix, (void*)end_point() );
if( end_point() && end_point() != start_point() && print_children )
end_point()->print_debug_info( new_prefix, false );
delete [] new_prefix;
}
| CubitStatus PartitionCurve::remove | ( | PartitionCoEdge * | coedge | ) |
Definition at line 80 of file PartitionCurve.cpp.
{
if( coedge->myCurve != this )
return CUBIT_FAILURE;
if( firstCoEdge == coedge )
{
firstCoEdge = coedge->curveNext;
}
else
{
PartitionCoEdge* prev = firstCoEdge;
while( prev && prev->curveNext != coedge )
prev = prev->curveNext;
if( !prev )
{
assert(0);
return CUBIT_FAILURE;
}
prev->curveNext = coedge->curveNext;
}
coedge->curveNext = 0;
coedge->myCurve = 0;
return CUBIT_SUCCESS;
}
| void PartitionCurve::remove_all_coedges | ( | ) |
Definition at line 117 of file PartitionCurve.cpp.
{
while( firstCoEdge && remove(firstCoEdge) ) {;}
assert( !firstCoEdge );
}
| void PartitionCurve::remove_all_simple_attribute_virt | ( | ) | [virtual] |
Implements TopologyBridge.
Reimplemented in PartPTCurve.
Definition at line 336 of file PartitionCurve.cpp.
{ sub_entity_set().rem_all_attrib( this ); }
| void PartitionCurve::remove_dead_facet | ( | CubitFacetEdgeData * | edge | ) |
Definition at line 540 of file PartitionCurve.cpp.
{
facetEdges.remove(edge);
}
| CubitStatus PartitionCurve::remove_end_point | ( | ) | [private] |
Definition at line 185 of file PartitionCurve.cpp.
{
assert( startPoint != endPoint || !endNext );
// endNext should be null if points are the same
if( endPoint && endPoint != startPoint &&
!remove_from_point( endPoint, endNext ) )
return CUBIT_FAILURE;
endPoint = 0;
endNext = 0;
return CUBIT_SUCCESS;
}
| void PartitionCurve::remove_facet_data | ( | ) |
Definition at line 375 of file PartitionCurve.cpp.
{
while( facetEdges.size() )
TDVGFacetOwner::remove( facetEdges.pop() );
}
| CubitStatus PartitionCurve::remove_from_point | ( | PartitionPoint * | point, |
| PartitionCurve * | next | ||
| ) | [private] |
Definition at line 200 of file PartitionCurve.cpp.
{
point->curveCount--;
if( point->firstCurve == this )
{
point->firstCurve = next;
}
else
{
PartitionCurve* prev = point->firstCurve;
while( prev )
{
PartitionCurve* temp = prev->next_curve(point);
if( temp == this )
break;
prev = temp;
}
if( !prev )
{
assert(0);
return CUBIT_FAILURE;
}
if( prev->startPoint == point )
prev->startNext = next;
else if( prev->endPoint == point )
prev->endNext = next;
else
assert(0);
}
return CUBIT_SUCCESS;
}
| void PartitionCurve::remove_simple_attribute_virt | ( | const CubitSimpleAttrib & | csa | ) | [virtual] |
Implements TopologyBridge.
Reimplemented in PartPTCurve.
Definition at line 334 of file PartitionCurve.cpp.
{ sub_entity_set().rem_attribute( this, csa ); }
| CubitStatus PartitionCurve::remove_start_point | ( | ) | [private] |
Definition at line 172 of file PartitionCurve.cpp.
{
if( startPoint == endPoint )
endNext = startNext;
else if( startPoint && !remove_from_point( startPoint, startNext ) )
return CUBIT_FAILURE;
startPoint = 0;
startNext = 0;
return CUBIT_SUCCESS;
}
| void PartitionCurve::replace_facet | ( | CubitFacetEdgeData * | dead_facet, |
| DLIList< CubitFacetEdgeData * > & | new_facets | ||
| ) |
Definition at line 598 of file PartitionCurve.cpp.
{
assert(new_facets.size() > 1); // doesn't make sense to replace 1 to 1
DLIList<CubitFacetEdgeData*> new_copy = new_facets;
new_facets.reset();
facetEdges.reset();
int dead_index = facetEdges.where_is_item(dead_facet);
assert(-1 != dead_index);
// special case for a single facet on the edge
// - use curve endpoints to determine order
if (facetEdges.size() == 1)
{
facetEdges.clean_out();
new_copy.last();
if (new_copy.get()->contains(start_point()->facet_point()) )
new_copy.reverse();
new_copy.reset();
assert( new_copy.get()->contains(start_point()->facet_point()) );
new_copy.last();
assert( new_copy.get()->contains(end_point()->facet_point()) );
facetEdges = new_copy;
}
else
{
DLIList<CubitFacetEdgeData*> ordered_edges;
int i;
// copy the edges before the dead edge into a new list
for (i=0; i< dead_index; i++)
ordered_edges.append(facetEdges.next(i));
// if there are edges before the new edges, find out whether the first or last
// new edge is adjacent to the one before the dead edge
CubitFacetEdgeData *prev = NULL;
CubitFacetEdgeData *next = NULL;
CubitPoint *new_start_pt = NULL;
CubitPoint *new_end_pt = NULL;
if (dead_index > 0)
{
prev = facetEdges.next(dead_index-1);
new_start_pt = prev->shared_point(dead_facet);
assert(new_start_pt != NULL);
}
if (dead_index < (facetEdges.size() - 1) )
{
next = facetEdges.next(dead_index+1);
new_end_pt = next->shared_point(dead_facet);
assert(new_end_pt != NULL);
}
if (prev)
{
new_copy.last();
if (new_copy.get()->contains(new_start_pt))
new_copy.reverse();
}
else
{
// use the edge after the dead edge to find out whether to reverse the new
// edges or not
assert(next != NULL);
new_copy.reset();
if (new_copy.get()->contains(new_end_pt))
new_copy.reverse();
}
if (prev)
{
new_copy.reset();
assert( prev->shared_point(new_copy.get()) != NULL);
}
if (next)
{
new_copy.last();
assert( next->shared_point(new_copy.get()) != NULL);
}
// copy the new edges into place in the ordered list
new_copy.reset();
for (i=new_copy.size(); i>0; i--)
ordered_edges.append(new_copy.get_and_step());
// add the rest of the edges to the list
facetEdges.reset();
for (i=dead_index+1; i<facetEdges.size(); i++)
ordered_edges.append(facetEdges.next(i));
facetEdges.clean_out();
facetEdges = ordered_edges;
}
TDVGFacetOwner::remove(dead_facet);
for( int j = 0; j < new_facets.size(); j++ )
TDVGFacetOwner::set(new_facets.step_and_get(),this);
// TODO - memory management - where should the facets get deleted
}
| void PartitionCurve::reverse_point_order | ( | ) | [protected] |
Definition at line 350 of file PartitionCurve.cpp.
{
if( startPoint != endPoint )
{
PartitionPoint* tmp_pt = startPoint;
startPoint = endPoint;
endPoint = tmp_pt;
PartitionCurve* tmp_cv = startNext;
startNext = endNext;
endNext = tmp_cv;
}
}
| void PartitionCurve::set_facet_data | ( | const DLIList< CubitFacetEdgeData * > & | new_list | ) |
Definition at line 367 of file PartitionCurve.cpp.
{
remove_facet_data();
facetEdges = new_list;
for( int i = facetEdges.size(); i--; )
TDVGFacetOwner::set( facetEdges.step_and_get(), this );
}
| virtual PartitionCurve* PartitionCurve::split | ( | double | param | ) | [pure virtual] |
Implemented in PartPTCurve, SegmentedCurve, and SubCurve.
| PartitionPoint* PartitionCurve::start_point | ( | ) | const [inline] |
Definition at line 35 of file PartitionCurve.hpp.
{ return startPoint; }
| CubitStatus PartitionCurve::start_point | ( | PartitionPoint * | point | ) |
Definition at line 123 of file PartitionCurve.cpp.
{
if( point == startPoint )
return CUBIT_SUCCESS;
if( !remove_start_point() )
{ assert(0); return CUBIT_FAILURE; }
if( !point )
return CUBIT_SUCCESS;
startPoint = point;
if( point == endPoint )
{
startNext = endNext;
endNext = 0;
}
else
{
startNext = point->firstCurve;
point->firstCurve = this;
point->curveCount++;
}
return CUBIT_SUCCESS;
}
| void PartitionCurve::transform | ( | const CubitTransformMatrix & | xform | ) | [virtual] |
Implements PartitionEntity.
Reimplemented in SegmentedCurve.
Definition at line 564 of file PartitionCurve.cpp.
{
int i;
DLIList<CubitPoint*> points(facetEdges.size());
for ( i = facetEdges.size(); i--; )
{
CubitFacetEdgeData* edge = facetEdges.step_and_get();
edge->point(0)->marked(1);
edge->point(1)->marked(1);
}
for ( i = facetEdges.size(); i--; )
{
CubitFacetEdgeData* edge = facetEdges.step_and_get();
for ( int j = 0; j < 2; j++ )
{
CubitPoint* pt = edge->point(j);
if( pt->marked() )
{
pt->marked(0);
if( TDVGFacetOwner::get(pt) == 0 )
points.append(pt);
}
}
}
for( i = points.size(); i--; )
{
CubitPoint* pt = points.get_and_step();
pt->set( xform * pt->coordinates() );
}
}
PartitionCurve * PartitionCurve::endNext [private] |
Definition at line 127 of file PartitionCurve.hpp.
PartitionPoint * PartitionCurve::endPoint [private] |
Definition at line 126 of file PartitionCurve.hpp.
DLIList<CubitFacetEdgeData*> PartitionCurve::facetEdges [private] |
Definition at line 118 of file PartitionCurve.hpp.
PartitionCoEdge* PartitionCurve::firstCoEdge [private] |
Definition at line 124 of file PartitionCurve.hpp.
PartitionCurve* PartitionCurve::startNext [private] |
Definition at line 127 of file PartitionCurve.hpp.
PartitionPoint* PartitionCurve::startPoint [private] |
Definition at line 126 of file PartitionCurve.hpp.