[cgma-dev] r2139 - cgm/trunk/itaps

bmsmith at mcs.anl.gov bmsmith at mcs.anl.gov
Mon Oct 13 09:22:40 CDT 2008


Author: bmsmith
Date: 2008-10-13 09:22:40 -0500 (Mon, 13 Oct 2008)
New Revision: 2139

Modified:
   cgm/trunk/itaps/iGeom.h
   cgm/trunk/itaps/iGeom_CGMA.cc
Log:
Added iGeom calls for prism and intersect.


Modified: cgm/trunk/itaps/iGeom.h
===================================================================
--- cgm/trunk/itaps/iGeom.h	2008-10-10 22:09:37 UTC (rev 2138)
+++ cgm/trunk/itaps/iGeom.h	2008-10-13 14:22:40 UTC (rev 2139)
@@ -2066,6 +2066,15 @@
                            iBase_EntityHandle* sphere_handle_out,
                            int* err );
 
+/**\brief Create a prism centered on the origin
+ */
+void iGeom_createPrism( iGeom_Instance,
+                   double height,
+		   int n_sides,
+		   double major_rad,
+	           double minor_rad,
+	           iBase_EntityHandle* prism_handle_out,									          int* err );
+
 /**\brief 
  *
  */
@@ -2154,6 +2163,14 @@
                            iBase_EntityHandle* geom_entity,
                            int* err );
 
+/**\brief
+ */
+  void iGeom_intersectEnts( iGeom_Instance,
+                            iBase_EntityHandle entity2,
+			    iBase_EntityHandle entity1,
+			    iBase_EntityHandle* geom_entity,
+			    int* err );
+
 /**\brief 
  *
  */

Modified: cgm/trunk/itaps/iGeom_CGMA.cc
===================================================================
--- cgm/trunk/itaps/iGeom_CGMA.cc	2008-10-10 22:09:37 UTC (rev 2138)
+++ cgm/trunk/itaps/iGeom_CGMA.cc	2008-10-13 14:22:40 UTC (rev 2139)
@@ -5148,8 +5148,29 @@
   *geom_entity = tmp_body;
   RETURN ((tmp_body ? iBase_SUCCESS : iBase_FAILURE));
 }
+
+
+void
+iGeom_createPrism( iGeom_Instance instance,
+                   /*in*/ double height,
+		   /*in*/ int n_sides,
+		   /*in*/ double major_rad,
+		   /*in*/ double minor_rad,
+		   /*out*/ iBase_EntityHandle *geom_entity,
+		   int* err )
+{
+  if ( 0.0>=height ) {
+    ERROR(iBase_INVALID_ARGUMENT, "Prism height must be positive.");
+  } else if ( 3>n_sides ) {
+    ERROR(iBase_INVALID_ARGUMENT, "Prism must have at least three sides.");
+  }
   
+  RefEntity* tmp_body = gmt->prism( height, n_sides, major_rad, minor_rad );
+  *geom_entity = tmp_body;
+  RETURN ((tmp_body ? iBase_SUCCESS :iBase_FAILURE));
+}
 
+
 void
 iGeom_createBrick (iGeom_Instance instance,
                    /*in*/ double x,
@@ -5488,6 +5509,44 @@
 }
 
 void
+iGeom_intersectEnt ( iGeom_Instance instance,
+                     /*in*/ iBase_EntityHandle ent1,
+		     /*in*/ iBase_EntityHandle ent2,
+		     /*out*/ iBase_EntityHandle *geom_entity,
+		     int* err )
+{
+  Body *this_ent1 = dynamic_cast<Body*>(ENTITY_HANDLE(ent1));
+  Body *ent1_copy = gmt->copy_body(this_ent1);
+  if (NULL == ent1_copy) {
+    ERROR(iBase_FAILURE, "Trouble copying blank.");
+  }
+  Body *this_ent2 = dynamic_cast<Body*>(ENTITY_HANDLE(ent2));
+  Body *ent2_copy = gmt->copy_body(this_ent2);
+  if (NULL == ent2_copy) {
+    ERROR(iBase_FAILURE, "Trouble copying tool.");
+    gqt->delete_RefEntity(ent1_copy);
+    RETURN(iBase_FAILURE);
+  }
+
+  DLIList<Body*> ent1_list, new_body_list;
+  ent1_list.append(ent1_copy);
+  
+  RefEntity *new_body = NULL;
+  CubitStatus result = gmt->intersect(ent2_copy, ent1_list, new_body_list);
+  if (CUBIT_SUCCESS != result || 0 == new_body_list.size()) {
+    ERROR(iBase_FAILURE, "Intersect failed.");
+  }
+  else {
+    new_body = new_body_list.get();
+    *geom_entity = new_body;
+    gqt->delete_RefEntity(this_ent2);
+    gqt->delete_RefEntity(this_ent1);
+  }
+
+  RETURN(iBase_SUCCESS);
+}
+
+void
 iGeom_sectionEnt (iGeom_Instance instance,
                   /*inout*/ iBase_EntityHandle *geom_entity,
                   /*in*/ double plane_normal_x,




More information about the cgma-dev mailing list