[cgma-dev] r2496 - cgm/trunk/geom/OCC
janehu at mcs.anl.gov
janehu at mcs.anl.gov
Tue Dec 23 13:14:20 CST 2008
Author: janehu
Date: 2008-12-23 13:14:20 -0600 (Tue, 23 Dec 2008)
New Revision: 2496
Modified:
cgm/trunk/geom/OCC/OCCModifyEngine.cpp
Log:
Added split_body function.
Modified: cgm/trunk/geom/OCC/OCCModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2008-12-23 18:40:29 UTC (rev 2495)
+++ cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2008-12-23 19:14:20 UTC (rev 2496)
@@ -4656,12 +4656,58 @@
// Function : split_body
// Member Type: PUBLIC
// Description: Splits multiple lumps in one body into separate bodies
-// Author : Corey Ernst
-// Date : 08/04
+// Author : Jane Hu
+// Date : 12/08
//===============================================================================
CubitStatus OCCModifyEngine::split_body( BodySM *body_ptr,
- DLIList<BodySM*> &new_bodies )
+ DLIList<BodySM*> &new_bodies )
{
+ OCCBody* occ_body = CAST_TO(body_ptr, OCCBody);
+ if(!occ_body)
+ {
+ PRINT_ERROR("This is not an OCC body to be split.\n");
+ return CUBIT_FAILURE;
+ }
+ DLIList<Lump*> lumps = occ_body->lumps();
+ if(lumps.size() == 1)
+ {
+ new_bodies.append(body_ptr);
+ return CUBIT_SUCCESS;
+ }
+ for(int i = 0; i < lumps.size(); i++)
+ {
+ Lump* lump = lumps.get_and_step();
+ OCCLump* occ_lump = CAST_TO(lump, OCCLump);
+ OCCSurface* occ_surface = occ_lump->my_sheet_surface();
+ if(occ_surface)
+ {
+ TopoDS_Face* face = occ_surface->get_TopoDS_Face();
+ Surface* surface =
+ OCCQueryEngine::instance()->populate_topology_bridge(*face,
+ CUBIT_TRUE);
+ new_bodies.append(CAST_TO(surface, OCCSurface)->my_body());
+ continue;
+ }
+ OCCShell* occ_shell = occ_lump->my_shell();
+ if(occ_shell)
+ {
+ TopoDS_Shell* shell = occ_shell->get_TopoDS_Shell();
+ OCCShell* ashell =
+ OCCQueryEngine::instance()->populate_topology_bridge(*shell,
+ CUBIT_TRUE);
+ new_bodies.append(ashell->my_body());
+ continue;
+ }
+ else
+ {
+ TopoDS_Solid* solid = occ_lump->get_TopoDS_Solid();
+ Lump* alump =
+ OCCQueryEngine::instance()->populate_topology_bridge(*solid,
+ CUBIT_TRUE);
+ new_bodies.append(CAST_TO(alump,OCCLump)->get_body());
+ continue;
+ }
+ }
return CUBIT_SUCCESS;
}
More information about the cgma-dev
mailing list