[cgma-dev] r1545 - in cgm/trunk: . geom geom/OCC test

janehu at mcs.anl.gov janehu at mcs.anl.gov
Fri Jan 18 15:46:34 CST 2008


Author: janehu
Date: 2008-01-18 15:46:33 -0600 (Fri, 18 Jan 2008)
New Revision: 1545

Modified:
   cgm/trunk/CMakeLists.txt
   cgm/trunk/Makefile.am
   cgm/trunk/geom/OCC/OCCCurve.cpp
   cgm/trunk/geom/OCC/OCCQueryEngine.cpp
   cgm/trunk/geom/OCC/OCCSurface.cpp
   cgm/trunk/geom/RefFace.cpp
   cgm/trunk/test/Makefile.am
   cgm/trunk/test/makept.cpp
Log:
Updated using RefFace and RefEdge for reference of testing, fixed some bug, updated some comments. Added test directory in the Makefile for future reference.

Modified: cgm/trunk/CMakeLists.txt
===================================================================
--- cgm/trunk/CMakeLists.txt	2008-01-18 20:09:56 UTC (rev 1544)
+++ cgm/trunk/CMakeLists.txt	2008-01-18 21:46:33 UTC (rev 1545)
@@ -1,5 +1,5 @@
 
-# do util and geom subdirs
-SUBDIRS( util geom init )
+# do util and geom and test subdirs
+SUBDIRS( util geom test init )
 
 

Modified: cgm/trunk/Makefile.am
===================================================================
--- cgm/trunk/Makefile.am	2008-01-18 20:09:56 UTC (rev 1544)
+++ cgm/trunk/Makefile.am	2008-01-18 21:46:33 UTC (rev 1545)
@@ -1,5 +1,5 @@
 AUTOMAKE_OPTIONS = foreign
-SUBDIRS = util geom init itaps
+SUBDIRS = util geom init itaps test
 
 if build_ACIS
   ACIS_EXAMPLE_TEST=cd cgm_apps/examples/driverc++; make check-TESTS

Modified: cgm/trunk/geom/OCC/OCCCurve.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCCurve.cpp	2008-01-18 20:09:56 UTC (rev 1544)
+++ cgm/trunk/geom/OCC/OCCCurve.cpp	2008-01-18 21:46:33 UTC (rev 1545)
@@ -436,10 +436,9 @@
 		  *tangent_ptr = CubitVector(tangent.X(), tangent.Y(), tangent.Z()); 
 	  }
   }
-  if (curvature_ptr != NULL) {
-	  double curvature = CLP.Curvature();
-	  // Danilov: confused here
-  }
+  if (curvature_ptr != NULL) 
+     get_curvature( location, *curvature_ptr);
+  
   if (param != NULL) {
 	  *param = newVal;
   }

Modified: cgm/trunk/geom/OCC/OCCQueryEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCQueryEngine.cpp	2008-01-18 20:09:56 UTC (rev 1544)
+++ cgm/trunk/geom/OCC/OCCQueryEngine.cpp	2008-01-18 21:46:33 UTC (rev 1545)
@@ -782,7 +782,7 @@
 //===========================================================================
 //Function Name:export_solid_model
 //Member Type:  PUBLIC
-//Description:  function called for save/restore to save temporary FACET file
+//Description:  function called for save/restore to save temporary Brep file
 //Author:       Jane Hu
 //Date:         11/16/2007
 //===========================================================================
@@ -909,6 +909,14 @@
   return CUBIT_SUCCESS;
 }
 
+//===========================================================================
+//Function Name:export_solid_model
+//Member Type:  PUBLIC
+//Description:  function called for write out temporary Brep file
+//Author:       Jane Hu
+//Date:         11/16/2007
+//===========================================================================
+
 CubitStatus
 OCCQueryEngine::write_topology( const char* file_name,
                                 DLIList<OCCBody*> &OCC_bodies,
@@ -1002,6 +1010,14 @@
     return CUBIT_FAILURE;
 }
 
+//===========================================================================
+//Function Name:import_solid_model
+//Member Type:  PUBLIC
+//Description:  function called for read in temporary Brep file
+//Author:       Jane Hu
+//Date:         11/16/2007
+//===========================================================================
+
 CubitStatus OCCQueryEngine::import_solid_model(
 					       const char* file_name ,
 					       const char* file_type,
@@ -1025,6 +1041,14 @@
   return CUBIT_SUCCESS;
 }
 
+//===========================================================================
+//Function Name:populate_topology_bridge
+//Member Type:  PUBLIC
+//Description:  function called for populating topology bridge for OCC entity 
+//Author:       Jane Hu
+//Date:         11/16/2007
+//===========================================================================
+
 DLIList<TopologyBridge*> OCCQueryEngine::populate_topology_bridge(TopoDS_Shape aShape)
 {
   DLIList<TopologyBridge*> tblist;
@@ -1707,6 +1731,16 @@
     }
 }
 
+
+//-------------------------------------------------------------------------
+// Purpose       : fire a ray at the specified body, returning the entities hit.
+//
+// Special Notes :
+//
+// Creator       : Jane Hu
+//
+// Creation Date : 12/12/07
+//-------------------------------------------------------------------------
 CubitStatus OCCQueryEngine::fire_ray(BodySM * body,
                                      const CubitVector &start,
                                      const CubitVector &unit,
@@ -2065,7 +2099,7 @@
 // Function   : bodies_overlap
 // Member Type: PUBLIC
 // Description: determine if OCC-based bodies overlap
-// Author     : 
+// Author     : Jane Hu 
 // Date       : 10/07
 //===============================================================================
 CubitBoolean OCCQueryEngine::bodies_overlap (BodySM * body_ptr_1,

Modified: cgm/trunk/geom/OCC/OCCSurface.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCSurface.cpp	2008-01-18 20:09:56 UTC (rev 1544)
+++ cgm/trunk/geom/OCC/OCCSurface.cpp	2008-01-18 21:46:33 UTC (rev 1545)
@@ -310,7 +310,7 @@
   int i;
   Extrema_ExtPS ext(p, asurface, Precision::Approximation(), Precision::Approximation());
   if (ext.IsDone() && (ext.NbExt() > 0)) {
-	  for ( i = 1 ; i < ext.NbExt() ; i++ ) {
+	  for ( i = 1 ; i <= ext.NbExt() ; i++ ) {
 		  if ( (i==1) || (p.Distance(ext.Point(i).Value()) < minDist) ) {
 			  minDist = p.Distance(ext.Point(i).Value());
 			  newP = ext.Point(i).Value();

Modified: cgm/trunk/geom/RefFace.cpp
===================================================================
--- cgm/trunk/geom/RefFace.cpp	2008-01-18 20:09:56 UTC (rev 1544)
+++ cgm/trunk/geom/RefFace.cpp	2008-01-18 21:46:33 UTC (rev 1545)
@@ -1486,8 +1486,8 @@
 
 CubitStatus RefFace::get_point_normal( CubitVector& origin, CubitVector& normal )
 {
-   if( is_planar() == CUBIT_FALSE)
-      return CUBIT_FAILURE;
+   //if( is_planar() == CUBIT_FALSE)
+   //   return CUBIT_FAILURE;
 
    Surface* surface_ptr = get_surface_ptr();
 

Modified: cgm/trunk/test/Makefile.am
===================================================================
--- cgm/trunk/test/Makefile.am	2008-01-18 20:09:56 UTC (rev 1544)
+++ cgm/trunk/test/Makefile.am	2008-01-18 21:46:33 UTC (rev 1545)
@@ -13,13 +13,8 @@
 	   -I..\$(OCC_INC_FLAG)
 
 TESTS = makept
-if build_ACIS
-  TESTS += webcut
-endif
-
 check_PROGRAMS = $(TESTS)
 
-webcut_SOURCES = webcut.cpp
 makept_SOURCES = makept.cpp
 opt_libs=
 LDADD = ../geom/virtual/libcubit_virtual.la \
@@ -30,9 +25,6 @@
         ../geom/libcubit_geom.la \
         ../util/libcubit_util.la 
 
-if build_ACIS
-  opt_libs += ../geom/ACIS/libcubit_ACIS.la 
-endif
 if WITH_OCC
   opt_libs += ../geom/OCC/libcubit_OCC.la $(OCC_LIB_FLAG) $(OCC_LIBS)
 endif

Modified: cgm/trunk/test/makept.cpp
===================================================================
--- cgm/trunk/test/makept.cpp	2008-01-18 20:09:56 UTC (rev 1544)
+++ cgm/trunk/test/makept.cpp	2008-01-18 21:46:33 UTC (rev 1545)
@@ -4,10 +4,7 @@
  * \brief makept, another simple C++ driver for CGM
  *
  * This program acts as a simple driver for CGM.  It reads in a geometry,
- * performs imprints between all the bodies, merges them, and writes information
- * on the results.  It also performs pairwise intersections between the
- * bodies to check for overlaps.  Results are written to stardard output.
- *
+ * and performs varies checks for bodies, surfaces, curves and vertices.
  */
 #include "config.h"
 #include "CpuTimer.hpp"
@@ -124,18 +121,20 @@
   CubitVector vector1(10,10,10);
   CubitVector vector2(15,15,15);
   DLIList<RefEntity*> free_entities;
+
+  // Make two vertices.
+  gmti->make_RefVertex(vector1,5);
+  gmti->make_RefVertex(vector2,5);
+
   gti->get_free_ref_entities(free_entities);
- 
+
+  //translate the two vertice by (10,10,10) and (20,20,20)
   for(int i = 1; i <= free_entities.size(); i++)
   {
      RefEntity * entity = free_entities.get_and_step();
-     gti->translate((BasicTopologyEntity*)entity, i*vector1); 
+     gti->translate((BasicTopologyEntity*)entity, i*vector1);
   }
 
-  // Read in the geometry from files specified on the command line
-  gmti->make_RefVertex(vector1,5);
-  gmti->make_RefVertex(vector2,5);
-
   CubitStatus rsl = CUBIT_SUCCESS;
   DLIList<RefEntity*> ref_entity_list;
   int num_ents_exported=0;
@@ -150,6 +149,8 @@
   //check for vertex
   DLIList<Body*> bodies;
   gti->bodies(bodies);
+  free_entities.clean_out(); //currently there's bug in that it created
+  //new entities after translating, debug next week.
   gti->get_free_ref_entities(free_entities);
  
   RefVertex* vertex1 = CAST_TO(free_entities.get_and_step(),RefVertex);
@@ -161,7 +162,9 @@
   CubitVector vi, vii;
   double d;
   gti->entity_entity_distance(vertex1,vertex2,vi, vii,d);
-  // distance (d) between vertex1,vertex2
+  // distance (d) between vertex1,vertex2. vi (20, 20, 20) is vertex1 
+  //translated by (10,10,10) and vii(35, 35, 35) is vertex2 translated
+  //by 2*(10,10,10).
  
   //check for body
   d = bodies.get()->measure(); 
@@ -174,9 +177,11 @@
   //first body's bounding box.
 
   gti->entity_entity_distance(gti->get_first_ref_volume(), vertex2,vi, vii,d);
-  //first body and vertex2 's distance(d).
+  //first body and vertex2 's minimum distance(d) and locations for the minimum.
 
   BodySM* body = bodies.get()->get_body_sm_ptr();
+  OCCBody* occ_body = CAST_TO(body, OCCBody);
+
   CubitVector axis(10,0,0);
   gti->reflect(bodies, axis);
   vi = bodies.get()->center_point();
@@ -194,7 +199,6 @@
   vi = bodies.get()->center_point();
   // After rotation, center point changed in y and z value.
 
-  OCCBody* occ_body = CAST_TO(body, OCCBody);
   occ_body->mass_properties(vi, d);
   //true center and volume, volume should be 8 times of the original one.
 
@@ -203,7 +207,6 @@
 
   //check for surface
   DLIList<OCCSurface*> surfaces;
-
   CAST_TO(body, OCCBody)->get_all_surfaces(surfaces);
   OCCSurface* surface = surfaces.step_and_get();
   GeometryType type = surface->geometry_type();
@@ -212,11 +215,15 @@
   box = surface->bounding_box();
   // bounding box
 
-  vi = surface->center_point();
+  DLIList<RefFace*> ref_faces;
+  gti->ref_faces(ref_faces);
+  RefFace* ref_face = ref_faces.step_and_get();
+
+  vi = ref_face->center_point();
   // center point
 
   CubitVector normal;
-  surface->get_point_normal(vi, normal);
+  ref_face->get_point_normal(vi, normal);
   // surface normal at center point.
 
   CubitVector closest_location ;
@@ -224,35 +231,41 @@
   CubitVector curvature1_ptr ;
   CubitVector curvature2_ptr ; 
 
-  surface->closest_point(vi, &closest_location, &unit_normal_ptr, 
-                         &curvature1_ptr, &curvature2_ptr);
-  // another way to get normal at center point, and found surface
-  // projection location for vi.
+  ref_face->find_closest_point_trimmed(vi, closest_location);  
+  // Found surface projection location for vi.
 
   double curvature1, curvature2;
-  surface->principal_curvatures(closest_location, curvature1, curvature2);
+  ref_face->get_principal_curvatures(closest_location, curvature1, curvature2);
   // get principal curvatures at center point.
 
-  double u = 0.5;      
+  double area = ref_face->area();
+  // area of the face
+
+  double u = 2.5;      
   double v = -20000;
-  vi = surface->position_from_u_v(u,v);
+  vi = ref_face->position_from_u_v(u,v);
   // get location on surface for it's u,v
 
-  CubitBoolean periodic = surface->is_periodic();
+  ref_face->u_v_from_position(vi, u, v);
+  // get (u,v) from this vi.
+
+  CubitBoolean periodic = ref_face->is_periodic();
   // found if surface is periodic.
 
   double p = 0; //period
-  periodic = surface->is_periodic_in_U(p); 
+  periodic = ref_face->is_periodic_in_U(p); 
   // found if surface is periodic in U and its period.
 
-  periodic = surface->is_periodic_in_V(p);
+  periodic = ref_face->is_periodic_in_V(p);
   // found if surface is periodic in V and its period.
 
+  //All OCC entities are parametric.
+
   double lower, upper;
-  surface->get_param_range_U(lower, upper);
+  ref_face->get_param_range_U(lower, upper);
   // get surface U direction boundaries. here it's (2.48, 3.91)
 
-  surface->get_param_range_V(lower, upper);
+  ref_face->get_param_range_V(lower, upper);
   // get surface V direction boundaries. here it's (-20010,-19998)
 
   CubitBoolean closed = surface->is_closed_in_U();
@@ -261,13 +274,17 @@
   closed = surface->is_closed_in_V();
   // check if surface is closed in V direction.
 
-  CubitPointContainment pc = surface->point_containment(1,-20000);
+  CubitPointContainment pc = ref_face->point_containment(1,-20000);
   // this (u,v) location should be outside of the surface.
 
-  CubitPointContainment pc2 = surface->point_containment(3,-20000);
+  CubitPointContainment pc2 = ref_face->point_containment(3,-20000);
   // this (u,v) location should be inside of the surface.
 
   //test for curve
+  DLIList<RefEdge *> ref_edges;
+  gti->ref_edges(ref_edges);
+  RefEdge* ref_edge = ref_edges.step_and_get();
+
   DLIList<OCCCurve*> curves;
   CAST_TO(body, OCCBody)->get_all_curves(curves);
 
@@ -278,42 +295,42 @@
   box = curve-> bounding_box();
   // bounding box
 
-  d = curve->measure();
+  d = ref_edge->measure();
   // length of the curve.  
 
-  curve->get_param_range(lower,upper);
+  ref_edge->get_param_range(lower,upper);
   // paremeter range.
 
-  d = curve->length_from_u(lower,upper);
+  d = ref_edge->length_from_u(lower,upper);
   // double check whole curve length.
 
-  d = curve->length_from_u(lower/2+upper/2, upper);
+  d = ref_edge->length_from_u(lower/2+upper/2, upper);
   // half curve length.
 
-  periodic = curve->is_periodic(p);
+  periodic = ref_edge->is_periodic(p);
   // if curve is periodic and its period (p). here it's not.
 
-  curve->position_from_u(lower/2+upper/2, vi);
+  ref_edge->position_from_u(lower/2+upper/2, vi);
   // middle point.
 
+  u = ref_edge->u_from_position(vi); 
+  // middle point's u value.
+
   CubitVector c_point, tangent, center;
   double radius;
-  curve->closest_point(vi, c_point);
+  ref_edge->closest_point(vi, c_point, &tangent, & curvature1_ptr);
   // Closed point on middle point.
 
-  curve->get_tangent(vi, tangent);
+  ref_edge->tangent(vi, tangent);
   // tangent at middle point.
 
-  curve->get_point_direction(c_point, tangent);
+  ref_edge->get_point_direction(c_point, tangent);
   // double check tangent
 
-  curve->get_curvature(c_point, curvature1_ptr);
-  // get mid-point curvature.
- 
-  curve->get_center_radius(center, radius);
+  ref_edge->get_center_radius(center, radius);
   // center and radius for arc curves
 
-  pc = curve->point_containment(c_point);
+  pc = ref_edge->point_containment(c_point);
   // middle point should be on the curve.
 
   //delete all entities




More information about the cgma-dev mailing list