|
cgma
|
#include <FacetShell.hpp>
Definition at line 35 of file FacetShell.hpp.
| FacetShell::FacetShell | ( | Lump * | my_lump, |
| DLIList< Surface * > & | my_surfs | ||
| ) |
Definition at line 53 of file FacetShell.cpp.
| FacetShell::FacetShell | ( | DLIList< Surface * > & | my_surfs | ) |
Definition at line 66 of file FacetShell.cpp.
| FacetShell::~FacetShell | ( | ) | [virtual] |
Definition at line 77 of file FacetShell.cpp.
{}
| void FacetShell::add_lump | ( | Lump * | lump_ptr | ) |
Definition at line 173 of file FacetShell.cpp.
| void FacetShell::append_simple_attribute_virt | ( | const CubitSimpleAttrib & | ) | [virtual] |
| void FacetShell::disconnect_all_surfaces | ( | ) |
Definition at line 267 of file FacetShell.cpp.
{
mySurfs.reset();
for (int i = mySurfs.size(); i--; )
{
Surface* sm_ptr = mySurfs.get_and_step();
FacetSurface* surface = dynamic_cast<FacetSurface*>(sm_ptr);
if (surface)
surface->remove_shell(this);
}
mySurfs.clean_out();
}
| void FacetShell::disconnect_surfaces | ( | DLIList< FacetSurface * > & | surfs_to_disconnect | ) |
Definition at line 243 of file FacetShell.cpp.
{
for (int i = surfs_to_disconnect.size(); i--; )
{
FacetSurface* surface = surfs_to_disconnect.get_and_step();
if( mySurfs.move_to( dynamic_cast<Surface*>(surface) ) )
mySurfs.change_to(NULL);
if (surface)
surface->remove_shell(this);
}
mySurfs.remove_all_with_value( NULL );
}
| void FacetShell::get_children_virt | ( | DLIList< TopologyBridge * > & | children | ) | [virtual] |
Implements TopologyBridge.
Definition at line 191 of file FacetShell.cpp.
{ CAST_LIST_TO_PARENT( mySurfs, children ); }
| void FacetShell::get_coedges | ( | DLIList< FacetCoEdge * > & | coedges | ) |
Definition at line 211 of file FacetShell.cpp.
{
DLIList<FacetSurface*> surface_list;
get_surfaces( surface_list );
surface_list.reset();
for ( int i = 0; i < surface_list.size(); i++ )
surface_list.next(i)->get_coedges( result_list );
}
| void FacetShell::get_curves | ( | DLIList< FacetCurve * > & | curves | ) |
Definition at line 220 of file FacetShell.cpp.
{
DLIList<FacetCoEdge*> coedge_list;
get_coedges( coedge_list );
coedge_list.reset();
for ( int i = coedge_list.size(); i--; )
{
FacetCoEdge* coedge = coedge_list.get_and_step();
FacetCurve* curve = dynamic_cast<FacetCurve*>(coedge->curve());
if (curve)
result_list.append_unique(curve);
}
}
| GeometryQueryEngine * FacetShell::get_geometry_query_engine | ( | ) | const [virtual] |
Implements TopologyBridge.
Definition at line 88 of file FacetShell.cpp.
{
return FacetQueryEngine::instance();
}
| Lump* FacetShell::get_lump | ( | ) | const [inline] |
Definition at line 107 of file FacetShell.hpp.
{ return myLump; }
| void FacetShell::get_lumps | ( | DLIList< FacetLump * > & | lumps | ) |
| void FacetShell::get_parents_virt | ( | DLIList< TopologyBridge * > & | parents | ) | [virtual] |
Implements TopologyBridge.
Definition at line 189 of file FacetShell.cpp.
| CubitStatus FacetShell::get_simple_attribute | ( | DLIList< CubitSimpleAttrib > & | ) | [virtual] |
| CubitStatus FacetShell::get_simple_attribute | ( | const CubitString & | name, |
| DLIList< CubitSimpleAttrib > & | |||
| ) | [virtual] |
| void FacetShell::get_surfaces | ( | DLIList< FacetSurface * > & | surfaces | ) |
Definition at line 202 of file FacetShell.cpp.
Definition at line 446 of file FacetShell.cpp.
{
//get a list of all the facets in the sheet
DLIList<CubitFacet*> facet_list;
int i;
for (i = mySurfs.size(); i--; )
{
FacetSurface* surf = dynamic_cast<FacetSurface*>(mySurfs.next(i));
surf->tris(facet_list);
}
//should be unique... doesn't hurt anything if it isn't
//facet_list.uniquify_ordered();
CubitFacet* this_facet;
CubitPoint* node_1;
CubitPoint* node_2;
CubitPoint* node_3;
//if any of the facets don't have another facet across a given
// edge... this is a sheet shell because it isn't closed.
for (i = facet_list.size(); i--; ){
this_facet=facet_list.get_and_step();
if(!this_facet){
PRINT_ERROR("Unexpected NULL pointer.");
return CUBIT_TRUE;
}
this_facet->tri_nodes(node_1,node_2,node_3);
if(!this_facet->shared_facet( node_1, node_2 ) ||
!this_facet->shared_facet( node_1, node_3 ) ||
!this_facet->shared_facet( node_2, node_3 ) ){
return CUBIT_TRUE;
}
}
//otherwise we made it through without finding a gap so it is close...
// thus not a sheet.
return CUBIT_FALSE;
}
| CubitPointContainment FacetShell::point_containment | ( | const CubitVector & | point, |
| double | tolerance = -1.0 |
||
| ) |
Definition at line 326 of file FacetShell.cpp.
{
//just to avoid crashes, make sure we have surfaces in this list.
if(mySurfs.size() < 1){
return CUBIT_PNT_OUTSIDE;
}
CubitVector closest_location, point = input_point;
FacetSurface *closest_surf = dynamic_cast<FacetSurface*>(mySurfs.get_and_step());
FacetSurface *tmp_surf;
closest_surf->closest_point_trimmed( point, closest_location );
double shortest_dist = point.distance_between( closest_location );
int i;
//Look through all this shell's surfaces to find the closest
//surface to input_point
for(i=mySurfs.size()-1; i--;)
{
CubitVector tmp_closest_location;
tmp_surf = dynamic_cast<FacetSurface*>(mySurfs.get_and_step());
tmp_surf->closest_point_trimmed( point, tmp_closest_location );
double tmp_shortest_dist = point.distance_between( tmp_closest_location );
if( tmp_shortest_dist < shortest_dist )
{
closest_location = tmp_closest_location;
closest_surf = tmp_surf;
shortest_dist = tmp_shortest_dist;
}
}
if( tolerance < 0 )
tolerance = GEOMETRY_RESABS;
//determine if it's on the surface, inside or outside
if( shortest_dist <= tolerance )
return CUBIT_PNT_BOUNDARY;
//find the closest facet on that surface to input_point
CubitFacet *closest_facet = closest_surf->get_eval_tool()->closest_facet( closest_location );
//get the coordinates of the closest point
CubitPoint *pt1 = NULL;
CubitPoint *pt2 = NULL;
closest_facet->closest_point_trimmed( point, closest_location, pt1, pt2 );
CubitVector normal;
CubitPoint *on_point = NULL;
//case 1: point is closest to an edge of the facet
if( pt1 || pt2 )
{
//only returned one, so the it is closest to a node
if(!pt2){
on_point = pt1;
}
else if(!pt1){
on_point = pt2;
}
else{//double-check that we are not closest to a single node
if((pt1->coordinates().distance_between(closest_location)) <= tolerance )
on_point = pt1;
else if((pt2->coordinates().distance_between(closest_location)) <= tolerance )
on_point = pt2;
}
if( on_point )
{
//get all facets that share this point
DLIList<CubitFacet*> facets_sharing_point;
on_point->facets( facets_sharing_point );
for(i=facets_sharing_point.size(); i--; )
normal += facets_sharing_point.get_and_step()->normal();
//average the normals of all these facets
normal /= facets_sharing_point.size();
}
else
{
//case 2: get the 2 normals of the 2 neighboring facets and average them
int index;
CubitFacetEdge *shared_facet_edge;
shared_facet_edge = closest_facet->edge_from_pts( pt1, pt2, index);
CubitFacet *other_facet = shared_facet_edge->other_facet( closest_facet );
if(!other_facet){
PRINT_ERROR("Edge is not connected to two facets.\n");
normal = closest_facet->normal();
}
else{
normal = ( closest_facet->normal() + other_facet->normal() ) / 2;
}
}
}
else
{
//case 3: just get the normal of this facet
normal = closest_facet->normal();
}
// if ( closest_surf->get_relative_surface_sense() == CUBIT_REVERSED )
// {
// PRINT_WARNING("mbrewer: This shouldn't happen anymore.\n");
// normal = -1.0*( normal );
// }
ShellSM *shell_sm = static_cast<ShellSM*>(this);
if( closest_surf->get_shell_sense( shell_sm ) == CUBIT_REVERSED )
{
normal = -1.0*( normal );
}
if( (point-closest_location)%(normal) > 0 )
return CUBIT_PNT_OUTSIDE;
else
return CUBIT_PNT_INSIDE;
}
| void FacetShell::remove_all_simple_attribute_virt | ( | ) | [virtual] |
| void FacetShell::remove_lump | ( | ) | [inline] |
Definition at line 109 of file FacetShell.hpp.
{ myLump = 0; }
| void FacetShell::remove_simple_attribute_virt | ( | const CubitSimpleAttrib & | ) | [virtual] |
| void FacetShell::reverse | ( | ) |
Definition at line 289 of file FacetShell.cpp.
{
for (int i = mySurfs.size(); i--; )
{
FacetSurface* surf = dynamic_cast<FacetSurface*>(mySurfs.next(i));
CubitSense sense = surf->get_shell_sense( this );
assert( CUBIT_UNKNOWN != sense );
surf->set_shell_sense( this, CubitUtil::opposite_sense( sense ) );
}
}
| void FacetShell::reverse_surfaces | ( | ) |
Definition at line 309 of file FacetShell.cpp.
{
for (int i = mySurfs.size(); i--; )
{
FacetSurface* surf = dynamic_cast<FacetSurface*>(mySurfs.next(i));
surf->reverse_sense();
}
}
Lump* FacetShell::myLump [private] |
Definition at line 130 of file FacetShell.hpp.
DLIList<Surface*> FacetShell::mySurfs [private] |
Definition at line 131 of file FacetShell.hpp.