[cgma-dev] r1632 - cgm/trunk/geom/OCC

janehu at mcs.anl.gov janehu at mcs.anl.gov
Mon Mar 3 13:17:06 CST 2008


Author: janehu
Date: 2008-03-03 13:17:06 -0600 (Mon, 03 Mar 2008)
New Revision: 1632

Modified:
   cgm/trunk/geom/OCC/OCCModifyEngine.cpp
   cgm/trunk/geom/OCC/OCCQueryEngine.cpp
Log:
fixed 2 places where the made combo-body can't be deleted; added make primitive of sphere and box.

Modified: cgm/trunk/geom/OCC/OCCModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCModifyEngine.cpp	2008-03-03 18:10:57 UTC (rev 1631)
+++ cgm/trunk/geom/OCC/OCCModifyEngine.cpp	2008-03-03 19:17:06 UTC (rev 1632)
@@ -49,6 +49,8 @@
 #include "TopoDS.hxx"
 #include "TopologyBridge.hpp"
 #include "BRepAlgoAPI_Fuse.hxx"
+#include "BRepPrimAPI_MakeSphere.hxx"
+#include "BRepPrimAPI_MakeBox.hxx"
 #include "Handle_Geom_TrimmedCurve.hxx"
 #include "Handle_Geom_RectangularTrimmedSurface.hxx"
 #include "TopExp_Explorer.hxx"
@@ -1068,41 +1070,73 @@
 // Function   : sphere
 // Member Type: PUBLIC
 // Description: build an OCC sphere
-// Author     : John Fowler
-// Date       : 10/02
+// Author     : Jane Hu
+// Date       : 03/08
 //===============================================================================
 BodySM* OCCModifyEngine::sphere(double radius) const
 {
-  return (BodySM*) NULL;
+  if (radius <= 0)
+    return (BodySM*) NULL; 
+
+  TopoDS_Solid S = BRepPrimAPI_MakeSphere(radius);
+  
+  Lump* lump = OCCQueryEngine::instance()->populate_topology_bridge(S, 
+								CUBIT_TRUE);
+  if (lump == NULL)
+    return (BodySM*)NULL;
+
+  return CAST_TO(lump, OCCLump)->body();
 }
 
 
 //===============================================================================
 // Function   : brick
 // Member Type: PUBLIC
-// Description: build a brick with facets
-// Author     : John Fowler
-// Date       : 10/02
+// Description: build an OCC brick 
+// Author     : Jane Hu
+// Date       : 03/08
 //===============================================================================
 BodySM* OCCModifyEngine::brick( double wid, double dep, double hi ) const
 {
-  return (BodySM*)NULL;
+  if (wid <= 0 || dep <=0 || hi <= 0)
+    return (BodySM*)NULL;
+  
+  TopoDS_Solid S = BRepPrimAPI_MakeBox(wid, dep, hi);
+
+  Lump* lump = OCCQueryEngine::instance()->populate_topology_bridge(S,
+								CUBIT_TRUE);
+
+  if (lump == NULL)
+    return (BodySM*)NULL;
+
+  return CAST_TO(lump, OCCLump)->body();
 }
 
 
 //===============================================================================
 // Function   : brick
 // Member Type: PUBLIC
-// Description: create a brick with facets given center axes and extension
-// Author     : John Fowler
-// Date       : 10/02
+// Description: create an OCC brick given center axes and extension
+// Author     : Jane Hu
+// Date       : 03/08
 //===============================================================================
-BodySM* OCCModifyEngine::brick( const CubitVector &/*center*/, 
-                                  const CubitVector* /*axes[3]*/,
-                                  const CubitVector &/*extension*/) const
+BodySM* OCCModifyEngine::brick( const CubitVector& center, 
+                                const CubitVector axes[3],
+                                const CubitVector &extension) const
 {
-  PRINT_ERROR("Option not supported for mesh based geometry.\n");
-  return (BodySM*) NULL;
+  CubitVector left_corner =  center - 0.5 * extension;
+  gp_Pnt left_point(left_corner.x(), left_corner.y(), left_corner.z());
+  gp_Dir main_dir(axes[2].x(), axes[2].y(), axes[2].z());
+  gp_Ax2 Axis(left_point, main_dir);
+  TopoDS_Solid S = BRepPrimAPI_MakeBox( Axis, extension.x(), extension.y(),
+					extension.z());
+
+  Lump* lump =  OCCQueryEngine::instance()->populate_topology_bridge(S,
+								CUBIT_TRUE);
+  if (lump == NULL)
+    return (BodySM*)NULL;
+
+  return CAST_TO(lump, OCCLump)->body(); 
 }
 
 //===============================================================================

Modified: cgm/trunk/geom/OCC/OCCQueryEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCQueryEngine.cpp	2008-03-03 18:10:57 UTC (rev 1631)
+++ cgm/trunk/geom/OCC/OCCQueryEngine.cpp	2008-03-03 19:17:06 UTC (rev 1632)
@@ -1423,9 +1423,10 @@
     return delete_solid_model_entities(occ_surface);
   }
 
-  for(int i =0; i < occ_body->lumps().size(); i++)
+  DLIList<Lump*> lumps = occ_body->lumps();
+  for(int i =0; i < lumps.size(); i++)
   {
-     Lump* lump = occ_body->lumps().get_and_step();
+     Lump* lump = lumps.get_and_step();
      OCCLump* occ_lump = CAST_TO(lump, OCCLump);
      if (occ_lump)
        occ_lump->remove_body();
@@ -1462,7 +1463,8 @@
       if(!OccToCGM->erase(k))
         PRINT_ERROR("The OccBody and TopoDS_Shape pair is not in the map!");
   }
-  occ_body->lumps().clean_out();
+  DLIList<Lump*> lumps;
+  occ_body->lumps(lumps);
   if (occ_body_find)
      BodyList->remove(occ_body_find);
   else




More information about the cgma-dev mailing list