[cgma-dev] r2506 - in cgm/trunk/geom: . ACIS_SRC OCC facet
janehu at mcs.anl.gov
janehu at mcs.anl.gov
Tue Jan 6 14:27:07 CST 2009
Author: janehu
Date: 2009-01-06 14:27:06 -0600 (Tue, 06 Jan 2009)
New Revision: 2506
Modified:
cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.cpp
cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.hpp
cgm/trunk/geom/GeometryModifyEngine.hpp
cgm/trunk/geom/GeometryModifyTool.cpp
cgm/trunk/geom/OCC/OCCModifyEngine.cpp
cgm/trunk/geom/OCC/OCCModifyEngine.hpp
cgm/trunk/geom/facet/FacetModifyEngine.cpp
cgm/trunk/geom/facet/FacetModifyEngine.hpp
Log:
Updated for get_mid_plane as well as get_mid_surface to return a list of BodySM's instead of returning a single compound BodySM,because although OCC supports a compound body with only shells or surfaces, those shells and surfaces don't have correponding lumps, which will make make_Body call to fail in geom level.
Modified: cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.cpp 2009-01-05 20:16:58 UTC (rev 2505)
+++ cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.cpp 2009-01-06 20:27:06 UTC (rev 2506)
@@ -844,7 +844,7 @@
const CubitVector &point_2,
const CubitVector &point_3,
BodySM *body_to_trim_to,
- BodySM *&midplane_body ) const
+ DLIList<BodySM*>& midplane_bodies ) const
{
DLIList<BodySM*> body_list;
@@ -878,9 +878,10 @@
}
//Create a new cubit body for the imprinted body.
- midplane_body = AcisQueryEngine::instance()->
+ BodySM* midplane_body = AcisQueryEngine::instance()->
populate_topology_bridges(sheet_BODY);
+ midplane_bodies.append(midplane_body);
return CUBIT_SUCCESS;
}
@@ -894,7 +895,7 @@
CubitStatus AcisModifyEngine::get_spheric_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const
+ DLIList<BodySM*> &midsurface_bodies) const
{
SurfaceACIS *surf_ACIS1 = CAST_TO(surface_ptr1, SurfaceACIS );
FACE* FACE1_ptr = make_FACE( surf_ACIS1->get_FACE_ptr() );
@@ -1004,8 +1005,9 @@
return CUBIT_FAILURE;
}
- midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
+ BodySM* midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
+ midsurface_bodies.append(midsurface_body);
return CUBIT_SUCCESS;
}
@@ -1019,7 +1021,7 @@
CubitStatus AcisModifyEngine::get_conic_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const
+ DLIList<BodySM*> &midsurface_bodies ) const
{
SurfaceACIS *surf_ACIS1 = CAST_TO(surface_ptr1, SurfaceACIS );
FACE* FACE1_ptr = make_FACE( surf_ACIS1->get_FACE_ptr() );
@@ -1101,7 +1103,7 @@
CubitVector const point_2 = point_1 + comm_dir;
CubitVector const point_3 = point_1 + ( comm_dir * c1_to_c2 );
CubitStatus ret = this->get_mid_plane( point_1, point_2, point_3,
- body_to_trim_to, midsurface_body );
+ body_to_trim_to, midsurface_bodies );
return ret;
}
@@ -1217,7 +1219,8 @@
return CUBIT_FAILURE;
}
- midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
+ BodySM* midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
+ midsurface_bodies.append(midsurface_body);
return CUBIT_SUCCESS;
}
@@ -1232,7 +1235,7 @@
CubitStatus AcisModifyEngine::get_toric_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const
+ DLIList<BodySM*> &midsurface_bodies ) const
{
SurfaceACIS *surf_ACIS1 = CAST_TO(surface_ptr1, SurfaceACIS );
FACE* FACE1_ptr = make_FACE( surf_ACIS1->get_FACE_ptr() );
@@ -1358,7 +1361,8 @@
return CUBIT_FAILURE;
}
- midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
+ BodySM* midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
+ midsurface_bodies.append(midsurface_body);
return CUBIT_SUCCESS;
}
Modified: cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.hpp
===================================================================
--- cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.hpp 2009-01-05 20:16:58 UTC (rev 2505)
+++ cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.hpp 2009-01-06 20:27:06 UTC (rev 2506)
@@ -969,10 +969,10 @@
//- intersection graph.
virtual CubitStatus get_mid_plane( const CubitVector &point_1,
- const CubitVector &point_2,
+ const CubitVector &point_2,
const CubitVector &point_3,
- BodySM *body_to_trim_to,
- BodySM *&midplane_body ) const;
+ BodySM *body_to_trim_to,
+ DLIList<BodySM*>& midplane_bodies ) const;
//- Given 3 points that describe the mid_plane, return a body that
//- contains the trimmed surfaces defining the mid plane.
//- These surfaces will be part of the midplane_body and will
@@ -981,17 +981,17 @@
virtual CubitStatus get_spheric_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
+ DLIList<BodySM*> &midsurface_bodies ) const;
virtual CubitStatus get_conic_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
+ DLIList<BodySM*> &midsurface_bodies ) const;
virtual CubitStatus get_toric_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
+ DLIList<BodySM*> &midsurface_bodies ) const;
virtual CubitStatus tweak_chamfer( DLIList<Curve*> &curve_list,
double left_offset,
Modified: cgm/trunk/geom/GeometryModifyEngine.hpp
===================================================================
--- cgm/trunk/geom/GeometryModifyEngine.hpp 2009-01-05 20:16:58 UTC (rev 2505)
+++ cgm/trunk/geom/GeometryModifyEngine.hpp 2009-01-06 20:27:06 UTC (rev 2506)
@@ -718,10 +718,10 @@
//- intersection graph.
virtual CubitStatus get_mid_plane( const CubitVector &point_1,
- const CubitVector &point_2,
+ const CubitVector &point_2,
const CubitVector &point_3,
- BodySM *body_to_trim_to,
- BodySM *&midplane_body ) const = 0;
+ BodySM *body_to_trim_to,
+ DLIList<BodySM*>& midplane_bodies ) const = 0;
//- Finds the mid plane described by the 3 points and trims
//- it to the body. It returns the mid planes as part of the
//- midplane_body
@@ -729,17 +729,17 @@
virtual CubitStatus get_spheric_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const = 0;
+ DLIList<BodySM*>& midsurface_bodies ) const = 0;
virtual CubitStatus get_conic_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const = 0;
+ DLIList<BodySM*>& midsurface_bodies ) const = 0;
virtual CubitStatus get_toric_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const = 0;
+ DLIList<BodySM*>& midsurface_bodies ) const = 0;
virtual CubitStatus tweak_chamfer( DLIList<Curve*> &curve_list,
double left_offset,
Modified: cgm/trunk/geom/GeometryModifyTool.cpp
===================================================================
--- cgm/trunk/geom/GeometryModifyTool.cpp 2009-01-05 20:16:58 UTC (rev 2505)
+++ cgm/trunk/geom/GeometryModifyTool.cpp 2009-01-06 20:27:06 UTC (rev 2506)
@@ -7348,11 +7348,11 @@
CubitVector direction2 = direction1*n_mid;
point_3 = point_1 + direction2;
- BodySM* midplane_body_sm = NULL;
+ DLIList<BodySM*> midplane_bodysm_list ;
CubitStatus ret = gme1_ptr->get_mid_plane(point_1, point_2, point_3,
- body_sm_to_trim_to, midplane_body_sm );
+ body_sm_to_trim_to, midplane_bodysm_list );
- if (midplane_body_sm)
+ if (midplane_bodysm_list.size() > 0)
{
#ifdef BOYD17
DLIList<Body*> bodies;
@@ -7361,21 +7361,25 @@
Body *midplane_body;
- midplane_body = GeometryQueryTool::instance()->make_Body(midplane_body_sm);
+ for (int j = 0; j < midplane_bodysm_list.size(); j++)
+ {
+ BodySM* midplane_body_sm = midplane_bodysm_list.get_and_step();
+ midplane_body = GeometryQueryTool::instance()->make_Body(midplane_body_sm);
- DLIList<RefFace*> ref_faces;
- midplane_body->ref_faces( ref_faces );
+ DLIList<RefFace*> ref_faces;
+ midplane_body->ref_faces( ref_faces );
- //make each surface of the body into its own body
- int i;
- for( i=0; i<ref_faces.size(); i++ )
- {
- RefEntity *new_entity_ptr;
- new_entity_ptr = GeometryModifyTool::instance()->copy_refentity(ref_faces.get_and_step());
- RefFace *ref_face_ptr = CAST_TO(new_entity_ptr, RefFace);
- mid_plane_surfs.append( ref_face_ptr );
+ //make each surface of the body into its own body
+ int i;
+ for( i=0; i<ref_faces.size(); i++ )
+ {
+ RefEntity *new_entity_ptr;
+ new_entity_ptr = GeometryModifyTool::instance()->copy_refentity(ref_faces.get_and_step());
+ RefFace *ref_face_ptr = CAST_TO(new_entity_ptr, RefFace);
+ mid_plane_surfs.append( ref_face_ptr );
+ }
+ GeometryQueryTool::instance()->delete_Body( midplane_body );
}
- GeometryQueryTool::instance()->delete_Body( midplane_body );
}
else
return CUBIT_FAILURE;
@@ -7393,7 +7397,7 @@
CubitStatus get_planar_mid_surface( RefFace* ref_face1,
RefFace* ref_face2,
BodySM* body_sm_to_trim_to,
- BodySM*& midsurface_body_sm,
+ DLIList<BodySM*>& midsurface_bodysm_list,
GeometryModifyEngine *gme_ptr )
{
CubitVector normal_1, normal_2, point_1, point_2, point_3;
@@ -7492,7 +7496,7 @@
point_3 = point_1 + direction2;
CubitStatus ret = gme_ptr->get_mid_plane(point_1, point_2, point_3,
- body_sm_to_trim_to, midsurface_body_sm );
+ body_sm_to_trim_to, midsurface_bodysm_list );
return ret;
}
@@ -7527,13 +7531,12 @@
bool found_case = false;
CubitStatus ret;
- BodySM* midsurface_body_sm = NULL;
-
+ DLIList<BodySM*> midsurfaces;
// Plane to plane case
if ( ( ref_face1->geometry_type() == PLANE_SURFACE_TYPE ) && ( ref_face2->geometry_type() == PLANE_SURFACE_TYPE ) )
{
found_case = true;
- ret = get_planar_mid_surface( ref_face1, ref_face2, body_sm_to_trim_to, midsurface_body_sm, gme1_ptr );
+ ret = get_planar_mid_surface( ref_face1, ref_face2, body_sm_to_trim_to, midsurfaces, gme1_ptr );
}
// Quadric to quadric cases
@@ -7575,19 +7578,19 @@
// Sphere to sphere case
if ( ( ref_face1->geometry_type() == SPHERE_SURFACE_TYPE ) && ( ref_face2->geometry_type() == SPHERE_SURFACE_TYPE ) )
{
- ret = gme2_ptr->get_spheric_mid_surface( surface1_ptr, surface2_ptr, body_sm_to_trim_to, midsurface_body_sm );
+ ret = gme2_ptr->get_spheric_mid_surface( surface1_ptr, surface2_ptr, body_sm_to_trim_to, midsurfaces );
}
// Cone to cone case
if ( ( ref_face1->geometry_type() == CONE_SURFACE_TYPE ) && ( ref_face2->geometry_type() == CONE_SURFACE_TYPE ) )
{
- ret = gme2_ptr->get_conic_mid_surface( surface1_ptr, surface2_ptr, body_sm_to_trim_to, midsurface_body_sm );
+ ret = gme2_ptr->get_conic_mid_surface( surface1_ptr, surface2_ptr, body_sm_to_trim_to, midsurfaces );
}
// Torus to torus case
if ( ( ref_face1->geometry_type() == TORUS_SURFACE_TYPE ) && ( ref_face2->geometry_type() == TORUS_SURFACE_TYPE ) )
{
- ret = gme2_ptr->get_toric_mid_surface( surface1_ptr, surface2_ptr, body_sm_to_trim_to, midsurface_body_sm );
+ ret = gme2_ptr->get_toric_mid_surface( surface1_ptr, surface2_ptr, body_sm_to_trim_to, midsurfaces );
}
}
@@ -7599,25 +7602,28 @@
return CUBIT_FAILURE;
}
- if ( midsurface_body_sm )
+ if ( midsurfaces.size() > 0)
{
Body *midsurface_body;
+ for(int j = 0; j < midsurfaces.size() ;j++)
+ {
+ BodySM* midsurface_body_sm = midsurfaces.get_and_step();
+ midsurface_body = GeometryQueryTool::instance()->make_Body(midsurface_body_sm);
- midsurface_body = GeometryQueryTool::instance()->make_Body(midsurface_body_sm);
+ DLIList<RefFace*> ref_faces;
+ midsurface_body->ref_faces( ref_faces );
- DLIList<RefFace*> ref_faces;
- midsurface_body->ref_faces( ref_faces );
-
- //make each surface of the body into its own body
- int i;
- for( i=0; i<ref_faces.size(); i++ )
- {
- RefEntity *new_entity_ptr;
- new_entity_ptr = GeometryModifyTool::instance()->copy_refentity(ref_faces.get_and_step());
- RefFace *ref_face_ptr = CAST_TO(new_entity_ptr, RefFace);
- mid_surface_surfs.append( ref_face_ptr );
+ //make each surface of the body into its own body
+ int i;
+ for( i=0; i<ref_faces.size(); i++ )
+ {
+ RefEntity *new_entity_ptr;
+ new_entity_ptr = GeometryModifyTool::instance()->copy_refentity(ref_faces.get_and_step());
+ RefFace *ref_face_ptr = CAST_TO(new_entity_ptr, RefFace);
+ mid_surface_surfs.append( ref_face_ptr );
+ }
+ GeometryQueryTool::instance()->delete_Body( midsurface_body );
}
- GeometryQueryTool::instance()->delete_Body( midsurface_body );
return ret;
}
else
Modified: cgm/trunk/geom/OCC/OCCModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2009-01-05 20:16:58 UTC (rev 2505)
+++ cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2009-01-06 20:27:06 UTC (rev 2506)
@@ -5317,14 +5317,15 @@
const CubitVector & point_2,
const CubitVector & point_3,
BodySM * body_to_trim_to,
- BodySM *& midplane_body ) const
+ DLIList<BodySM*>& midplane_bodies ) const
{
//Calculate normal of the mid plane
CubitVector v1, v2, normal;
v1 = point_2 - point_1;
v2 = point_3 - point_1;
normal = ~(v1 * v2);
- if(normal.length() != 1)
+ double tol = OCCQueryEngine::instance()->get_sme_resabs_tolerance();
+ if(fabs(normal.length() - 1) > tol)
{
PRINT_ERROR("The three points are co-linear, and can't be used as a cutting plane.\n");
return CUBIT_FAILURE;
@@ -5347,37 +5348,35 @@
DLIList<BodySM*> from_bodies, new_bodies;
from_bodies.append(body_to_trim_to);
- CubitStatus stat = intersect(tool, from_bodies, new_bodies,
+ CubitStatus stat = intersect(tool, from_bodies, midplane_bodies,
CUBIT_TRUE);
OCCQueryEngine::instance()->delete_solid_model_entities(tool);
- if(stat)
- midplane_body = new_bodies.get();
return stat;
}
CubitStatus OCCModifyEngine::get_spheric_mid_surface( Surface* surface_ptr1,
- Surface* surface_ptr2,
- BodySM* body_to_trim_to,
- BodySM*& midsurface_body ) const
+ Surface* surface_ptr2,
+ BodySM* body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
CubitStatus OCCModifyEngine::get_conic_mid_surface( Surface* surface_ptr1,
- Surface* surface_ptr2,
- BodySM* body_to_trim_to,
- BodySM*& midsurface_body ) const
+ Surface* surface_ptr2,
+ BodySM* body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
CubitStatus OCCModifyEngine::get_toric_mid_surface( Surface* surface_ptr1,
- Surface* surface_ptr2,
- BodySM* body_to_trim_to,
- BodySM*& midsurface_body ) const
+ Surface* surface_ptr2,
+ BodySM* body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
Modified: cgm/trunk/geom/OCC/OCCModifyEngine.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCModifyEngine.hpp 2009-01-05 20:16:58 UTC (rev 2505)
+++ cgm/trunk/geom/OCC/OCCModifyEngine.hpp 2009-01-06 20:27:06 UTC (rev 2506)
@@ -454,22 +454,24 @@
const CubitVector &point_2,
const CubitVector &point_3,
BodySM *body_to_trim_to,
- BodySM *&midplane_body ) const;
+ DLIList<BodySM*>& midplane_bodies ) const;
virtual CubitStatus get_spheric_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
+ DLIList<BodySM *>&midsurface_bodies ) const;
virtual CubitStatus get_conic_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
+ DLIList<BodySM *>&midsurface_bodies ) const;
+
virtual CubitStatus get_toric_mid_surface( Surface *surface_ptr1,
Surface *surface_ptr2,
BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
+ DLIList<BodySM *>&midsurface_bodies ) const;
+
virtual CubitStatus tweak_chamfer( DLIList<Curve*> &curve_list,
double left_offset,
DLIList<BodySM*> &new_bodysm_list,
Modified: cgm/trunk/geom/facet/FacetModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/facet/FacetModifyEngine.cpp 2009-01-05 20:16:58 UTC (rev 2505)
+++ cgm/trunk/geom/facet/FacetModifyEngine.cpp 2009-01-06 20:27:06 UTC (rev 2506)
@@ -2641,7 +2641,7 @@
const CubitVector & /*point_2*/,
const CubitVector & /*point_3*/,
BodySM * /*body_to_trim_to*/,
- BodySM *& /*midplane_body*/ ) const
+ DLIList<BodySM*>& /*midplane_body*/ ) const
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
@@ -2655,9 +2655,9 @@
// Date : 03/06
//===============================================================================
CubitStatus FacetModifyEngine::get_spheric_mid_surface( Surface* surface_ptr1,
- Surface* surface_ptr2,
- BodySM* body_to_trim_to,
- BodySM*& midsurface_body ) const
+ Surface* surface_ptr2,
+ BodySM* body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
@@ -2671,9 +2671,9 @@
// Date : 03/06
//===============================================================================
CubitStatus FacetModifyEngine::get_conic_mid_surface( Surface* surface_ptr1,
- Surface* surface_ptr2,
- BodySM* body_to_trim_to,
- BodySM*& midsurface_body ) const
+ Surface* surface_ptr2,
+ BodySM* body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
@@ -2687,9 +2687,9 @@
// Date : 03/06
//===============================================================================
CubitStatus FacetModifyEngine::get_toric_mid_surface( Surface* surface_ptr1,
- Surface* surface_ptr2,
- BodySM* body_to_trim_to,
- BodySM*& midsurface_body ) const
+ Surface* surface_ptr2,
+ BodySM* body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
Modified: cgm/trunk/geom/facet/FacetModifyEngine.hpp
===================================================================
--- cgm/trunk/geom/facet/FacetModifyEngine.hpp 2009-01-05 20:16:58 UTC (rev 2505)
+++ cgm/trunk/geom/facet/FacetModifyEngine.hpp 2009-01-06 20:27:06 UTC (rev 2506)
@@ -469,23 +469,20 @@
const CubitVector &point_2,
const CubitVector &point_3,
BodySM *body_to_trim_to,
- BodySM *&midplane_body ) const;
+ DLIList<BodySM *>& midplane_bodies ) const;
virtual CubitStatus get_spheric_mid_surface( Surface *surface_ptr1,
- Surface *surface_ptr2,
- BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
-
+ Surface *surface_ptr2,
+ BodySM *body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const;
virtual CubitStatus get_conic_mid_surface( Surface *surface_ptr1,
- Surface *surface_ptr2,
- BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
-
+ Surface *surface_ptr2,
+ BodySM *body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const;
virtual CubitStatus get_toric_mid_surface( Surface *surface_ptr1,
- Surface *surface_ptr2,
- BodySM *body_to_trim_to,
- BodySM *&midsurface_body ) const;
-
+ Surface *surface_ptr2,
+ BodySM *body_to_trim_to,
+ DLIList<BodySM *>&midsurface_bodies ) const;
virtual CubitStatus tweak_chamfer( DLIList<Curve*> &curve_list,
double left_offset,
DLIList<BodySM*> &new_bodysm_list,
More information about the cgma-dev
mailing list