//---------------------------------------------------------------- // Function: private function to update the core compound and // for any movement of the body. // Note: input shape must have the same number of Compound // as the body's lumps number. // Author: Jane Hu //---------------------------------------------------------------- CubitStatus OCCBody::update_OCC_entity( BRepBuilderAPI_ModifyShape *aBRepTrsf, BRepAlgoAPI_BooleanOperation *op) { assert(aBRepTrsf != NULL || op != NULL); TopoDS_Compound compsolid; TopoDS_Shape shape; shape = aBRepTrsf->Shape(); if(aBRepTrsf && myTopoDSShape) { compsolid = TopoDS::Compound(shape); if(OCCQueryEngine::instance()->OCCMap->IsBound(*myTopoDSShape) ) OCCQueryEngine::instance()->update_OCC_map(*myTopoDSShape, shape); else if (!shape.IsEqual(*myTopoDSShape)) set_TopoDS_Shape(compsolid); } //Boolean operation works only on one lump body //set the lumps DLIList<Lump *> lumps; lumps = this->lumps(); for (int i = 1; i <= lumps.size(); i++) { OCCLump *lump = CAST_TO(lumps.get_and_step(), OCCLump); lump->update_OCC_entity(aBRepTrsf, op); } for(int i = 0; i < mySheetSurfaces.size(); i++) { OCCSurface* surface = mySheetSurfaces.get_and_step(); surface->update_OCC_entity(aBRepTrsf, op); } for(int i = 0; i <myShells.size() ; i++) { OCCShell* occ_shell = myShells.get_and_step(); occ_shell->update_OCC_entity(aBRepTrsf,op); } if (aBRepTrsf && !compsolid.IsNull()) set_TopoDS_Shape(compsolid); update_bounding_box(); //unset marks. DLIList<OCCCurve*> curves; DLIList<OCCPoint*> points; get_all_curves(curves); get_all_points(points); for(int i = 0; i < curves.size(); i++) curves.get_and_step()->set_myMarked(CUBIT_FALSE); for(int i = 0; i < points.size(); i++) points.get_and_step()->set_myMarked(CUBIT_FALSE); return CUBIT_SUCCESS; }