cgma
|
#include <OCCLump.hpp>
Definition at line 44 of file OCCLump.hpp.
OCCLump::OCCLump | ( | TopoDS_Solid * | theSolid, |
OCCSurface * | surface = NULL , |
||
OCCShell * | shell = NULL |
||
) |
Definition at line 72 of file OCCLump.cpp.
{ myTopoDSSolid = theSolid; mySheetSurface = surface; myShell = shell; if(myTopoDSSolid && !myTopoDSSolid->IsNull()) assert(myTopoDSSolid->ShapeType() == TopAbs_SOLID); }
OCCLump::~OCCLump | ( | ) | [virtual] |
Definition at line 81 of file OCCLump.cpp.
{ if (myTopoDSSolid) { myTopoDSSolid->Nullify(); delete myTopoDSSolid; } }
void OCCLump::add_body | ( | BodySM * | new_body | ) | [inline] |
Definition at line 59 of file OCCLump.hpp.
{myBodyPtr = new_body;}
void OCCLump::append_simple_attribute_virt | ( | const CubitSimpleAttrib & | csa | ) | [virtual] |
Implements TopologyBridge.
Definition at line 136 of file OCCLump.cpp.
{ TopoDS_Shape shape; if(mySheetSurface) shape = *(mySheetSurface->get_TopoDS_Face()); else if(myShell) shape = *(myShell->get_TopoDS_Shell()); else shape =*myTopoDSSolid; OCCAttribSet::append_attribute(csa, shape); }
CubitBox OCCLump::bounding_box | ( | void | ) | const [virtual] |
Implements GeometryEntity.
Definition at line 235 of file OCCLump.cpp.
{ Bnd_Box box; TopoDS_Shape shape; if(mySheetSurface) shape = *(mySheetSurface->get_TopoDS_Face()); else if(myShell) shape = *(myShell->get_TopoDS_Shell()); else shape =*myTopoDSSolid; //calculate the bounding box BRepBndLib::Add(shape, box); double min[3], max[3]; //get values box.Get(min[0], min[1], min[2], max[0], max[1], max[2]); //update boundingbox. CubitBox cBox(min, max); return cBox; }
BodySM * OCCLump::get_body | ( | ) | const |
Definition at line 301 of file OCCLump.cpp.
{ if(mySheetSurface) return mySheetSurface->my_body(); if(myShell) return myShell->my_body(); return myBodyPtr; }
void OCCLump::get_children_virt | ( | DLIList< TopologyBridge * > & | children | ) | [virtual] |
Implements TopologyBridge.
Definition at line 310 of file OCCLump.cpp.
{ if (mySheetSurface) { shellsms.append(mySheetSurface->my_shell()); return; } else if(myShell) { shellsms.append(myShell); return; } TopTools_IndexedMapOfShape M; TopExp::MapShapes(*myTopoDSSolid, TopAbs_SHELL, M); int ii; for (ii=1; ii<=M.Extent(); ii++) { TopologyBridge *shell = OCCQueryEngine::instance()->occ_to_cgm(M(ii)); if (shell) shellsms.append_unique(shell); } }
GeometryQueryEngine * OCCLump::get_geometry_query_engine | ( | ) | const [virtual] |
Implements TopologyBridge.
Definition at line 265 of file OCCLump.cpp.
{ return OCCQueryEngine::instance(); }
void OCCLump::get_parents_virt | ( | DLIList< TopologyBridge * > & | parents | ) | [virtual] |
Implements TopologyBridge.
Definition at line 291 of file OCCLump.cpp.
{ if(mySheetSurface) bodies.append(mySheetSurface->my_body()); else if (myShell) bodies.append(myShell->my_body()); else bodies.append(myBodyPtr); }
CubitStatus OCCLump::get_simple_attribute | ( | DLIList< CubitSimpleAttrib > & | csa_list | ) | [virtual] |
Implements TopologyBridge.
Definition at line 203 of file OCCLump.cpp.
{ TopoDS_Shape shape; if(mySheetSurface) shape = *(mySheetSurface->get_TopoDS_Face()); else if(myShell) shape = *(myShell->get_TopoDS_Shell()); else shape =*myTopoDSSolid; return OCCAttribSet::get_attributes(shape, csa_list ); }
CubitStatus OCCLump::get_simple_attribute | ( | const CubitString & | name, |
DLIList< CubitSimpleAttrib > & | csa_list | ||
) | [virtual] |
Implements TopologyBridge.
Definition at line 215 of file OCCLump.cpp.
{ TopoDS_Shape shape; if(mySheetSurface) shape = *(mySheetSurface->get_TopoDS_Face()); else if(myShell) shape = *(myShell->get_TopoDS_Shell()); else shape =*myTopoDSSolid; return OCCAttribSet::get_attributes( name, shape, csa_list ); }
TopoDS_Solid* OCCLump::get_TopoDS_Solid | ( | ) | [inline] |
Definition at line 62 of file OCCLump.hpp.
{if(myTopoDSSolid && !myTopoDSSolid->IsNull()) assert (myTopoDSSolid->ShapeType() == TopAbs_SOLID); return myTopoDSSolid; }
CubitStatus OCCLump::mass_properties | ( | CubitVector & | centroid, |
double & | volume | ||
) | [virtual] |
Implements Lump.
Definition at line 109 of file OCCLump.cpp.
{ if (mySheetSurface || myShell) return CUBIT_FAILURE; GProp_GProps myProps; BRepGProp::VolumeProperties(*myTopoDSSolid, myProps); volume = myProps.Mass(); gp_Pnt pt = myProps.CentreOfMass(); centroid.set(pt.X(), pt.Y(), pt.Z()); return CUBIT_SUCCESS; }
double OCCLump::measure | ( | ) | [virtual] |
Implements GeometryEntity.
Definition at line 279 of file OCCLump.cpp.
{ if(mySheetSurface) return mySheetSurface->measure(); else if(myShell) return myShell->measure(); GProp_GProps myProps; BRepGProp::VolumeProperties(*myTopoDSSolid, myProps); return myProps.Mass(); }
virtual CubitStatus OCCLump::merge | ( | GeometryEntity * | ) | [inline, virtual] |
Definition at line 116 of file OCCLump.hpp.
{ PRINT_ERROR("BUG: In OCCLump::merge\n" " This function should not be called at all\n" " This is a Bug -- please report it!\n"); return CUBIT_FAILURE; }
OCCSurface* OCCLump::my_sheet_surface | ( | ) | [inline] |
Definition at line 51 of file OCCLump.hpp.
{return mySheetSurface;}
OCCShell* OCCLump::my_shell | ( | ) | [inline] |
Definition at line 52 of file OCCLump.hpp.
{return myShell;}
CubitPointContainment OCCLump::point_containment | ( | const CubitVector & | point | ) |
Definition at line 334 of file OCCLump.cpp.
{ if (mySheetSurface || myShell) return CUBIT_PNT_UNKNOWN; TopoDS_Solid * solid = get_TopoDS_Solid(); gp_Pnt pnt(point.x(), point.y(), point.z()); BRepClass3d_SolidExplorer ex(*solid); //use face tolerance at the tolerence to see if the point is on. TopExp_Explorer Ex; Ex.Init(*solid, TopAbs_FACE); TopoDS_Face face = TopoDS::Face(Ex.Current()); double dtol = BRep_Tool::Tolerance(face); BRepClass3d_SClassifier ps(ex, pnt, dtol); TopAbs_State state = ps.State(); if (state == TopAbs_IN) return CUBIT_PNT_INSIDE; else if (state == TopAbs_OUT) return CUBIT_PNT_OUTSIDE; else if (state == TopAbs_ON) return CUBIT_PNT_BOUNDARY; return CUBIT_PNT_UNKNOWN; }
void OCCLump::remove_all_simple_attribute_virt | ( | ) | [virtual] |
Implements TopologyBridge.
Definition at line 183 of file OCCLump.cpp.
{ TopoDS_Shape shape; if(mySheetSurface) shape = *(mySheetSurface->get_TopoDS_Face()); else if(myShell) shape = *(myShell->get_TopoDS_Shell()); else shape =*myTopoDSSolid; OCCAttribSet::remove_attribute(CubitSimpleAttrib(), shape); }
void OCCLump::remove_body | ( | ) | [inline] |
Definition at line 145 of file OCCLump.hpp.
{myBodyPtr = 0;}
void OCCLump::remove_simple_attribute_virt | ( | const CubitSimpleAttrib & | csa | ) | [virtual] |
Implements TopologyBridge.
Definition at line 159 of file OCCLump.cpp.
{ TopoDS_Shape shape; if(mySheetSurface) shape = *(mySheetSurface->get_TopoDS_Face()); else if(myShell) shape = *(myShell->get_TopoDS_Shell()); else shape =*myTopoDSSolid; OCCAttribSet::remove_attribute(csa, shape); }
void OCCLump::set_shell | ( | OCCShell * | shell | ) | [inline] |
Definition at line 54 of file OCCLump.hpp.
{myShell = shell;}
void OCCLump::set_surface | ( | OCCSurface * | surface | ) | [inline] |
Definition at line 53 of file OCCLump.hpp.
{mySheetSurface = surface;}
void OCCLump::set_TopoDS_Solid | ( | TopoDS_Solid | solid | ) |
Definition at line 90 of file OCCLump.cpp.
{ if(myTopoDSSolid && solid.IsEqual(*myTopoDSSolid) ) return; if(myTopoDSSolid) myTopoDSSolid->Nullify() ; *myTopoDSSolid = solid; }
virtual TopologyEntity* OCCLump::unmerge | ( | DLIList< RefVolume * > | ) | [inline, virtual] |
Definition at line 124 of file OCCLump.hpp.
{ PRINT_ERROR( "BUG: In OCCLump::unmerge\n" " This function should not be called\n" " This is a Bug -- please report it!\n" ); return (TopologyEntity*)NULL; }
CubitStatus OCCLump::update_OCC_entity | ( | BRepBuilderAPI_ModifyShape * | aBRepTrsf, |
BRepAlgoAPI_BooleanOperation * | op = NULL |
||
) |
Definition at line 368 of file OCCLump.cpp.
{ if(mySheetSurface || myShell) return CUBIT_FAILURE; assert(aBRepTrsf != NULL || op != NULL); TopoDS_Shape shape; if(aBRepTrsf) shape = aBRepTrsf->ModifiedShape(*get_TopoDS_Solid()); else { TopTools_ListOfShape shapes; shapes.Assign(op->Modified(*get_TopoDS_Solid())); if(shapes.Extent() == 0) shapes.Assign(op->Generated(*get_TopoDS_Solid())); if(shapes.Extent() > 1) { //update all attributes first. TopTools_ListIteratorOfListOfShape it; it.Initialize(shapes); for(; it.More(); it.Next()) { shape = it.Value(); OCCQueryEngine::instance()->copy_attributes(*get_TopoDS_Solid(), shape); } shape = shapes.First(); } else if (shapes.Extent() == 1) shape = shapes.First(); else if(op->IsDeleted(*get_TopoDS_Solid())) ; else return CUBIT_SUCCESS; } TopoDS_Solid solid; if(aBRepTrsf || !op->IsDeleted(*get_TopoDS_Solid())) solid = TopoDS::Solid(shape); //set the lumps DLIList<TopologyBridge *> shells; this->get_children_virt(shells); for (int i = 1; i <= shells.size(); i++) { OCCShell *shell = CAST_TO(shells.get_and_step(), OCCShell); shell->update_OCC_entity(aBRepTrsf, op); } OCCQueryEngine::instance()->update_OCC_map(*myTopoDSSolid, solid); return CUBIT_SUCCESS; }
CubitStatus OCCLump::update_OCC_entity | ( | TopoDS_Solid & | old_shape, |
TopoDS_Shape & | new_shape, | ||
BRepBuilderAPI_MakeShape * | op, | ||
LocOpe_SplitShape * | sp = NULL |
||
) | [static] |
Definition at line 429 of file OCCLump.cpp.
{ //set the Shells TopTools_IndexedMapOfShape M; TopoDS_Shape shape, shape2; TopExp::MapShapes(new_shape, TopAbs_SOLID,M); TopoDS_Solid new_solid; CubitBoolean isCompound = CUBIT_FALSE; if(M.Extent() > 1 ) isCompound = CUBIT_TRUE; if(M.Extent() == 1 ) new_solid = TopoDS::Solid(M(1)); M.Clear(); TopExp::MapShapes(old_solid, TopAbs_SHELL, M); TopTools_ListOfShape shapes; for(int ii=1; ii<=M.Extent(); ii++) { TopoDS_Shell shell = TopoDS::Shell(M(ii)); TopTools_ListOfShape shapes; TopTools_IndexedMapOfShape M2; if (op) { shapes.Assign(op->Modified(shell)); if(shapes.Extent() == 0) shapes.Assign(op->Generated(shell)); // bug fix for hollow operation, in which a new shell is genearted // but the shapes we get from old_shell->Generated() is still old_shell // not the new one. if(!new_solid.IsNull()) TopExp::MapShapes(new_solid, TopAbs_SHELL, M2); } else if(sp) shapes.Assign(sp->DescendantShapes(shell)); if (shapes.Extent() == 1) { shape = shapes.First(); if(M2.Extent() > 0) shape2 = TopoDS::Shell(M2(1)); if(M2.Extent() == 1 && !shape.IsSame(shape2)) shape = shape2; else if(M2.Extent() > 1) { shapes.Clear(); for(int jj = 1; jj <= M2.Extent(); jj++) shapes.Append(M2(jj)); } } else if(shapes.Extent() > 1) { //update all attributes first. TopTools_ListIteratorOfListOfShape it; it.Initialize(shapes); for(; it.More(); it.Next()) { shape = it.Value(); OCCQueryEngine::instance()->copy_attributes(shell, shape); } shape = shapes.First(); } else if(op->IsDeleted(shell)) { TopTools_IndexedMapOfShape M_new; TopExp::MapShapes(new_shape, TopAbs_SHELL, M_new); if (M_new.Extent()== 1) shape = M_new(1); else shape.Nullify(); } else { shape = shell; continue; } if(shapes.Extent() > 0 || (op && op->IsDeleted(shell))) OCCShell::update_OCC_entity(shell, shape, op, sp); } if(!new_solid.IsNull() && !old_solid.IsSame(new_solid)) OCCQueryEngine::instance()->update_OCC_map(old_solid, new_solid); else if(isCompound) OCCQueryEngine::instance()->update_OCC_map(old_solid, new_shape); return CUBIT_SUCCESS; }
BodySM* OCCLump::myBodyPtr [private] |
Definition at line 160 of file OCCLump.hpp.
OCCSurface* OCCLump::mySheetSurface [private] |
Definition at line 164 of file OCCLump.hpp.
OCCShell* OCCLump::myShell [private] |
Definition at line 165 of file OCCLump.hpp.
TopoDS_Solid* OCCLump::myTopoDSSolid [private] |
Definition at line 162 of file OCCLump.hpp.