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

janehu at mcs.anl.gov janehu at mcs.anl.gov
Mon Nov 26 12:17:56 CST 2007


Author: janehu
Date: 2007-11-26 12:17:56 -0600 (Mon, 26 Nov 2007)
New Revision: 1420

Modified:
   cgm/trunk/geom/OCC/OCCBody.cpp
   cgm/trunk/geom/OCC/OCCCoEdge.cpp
   cgm/trunk/geom/OCC/OCCCoEdge.hpp
   cgm/trunk/geom/OCC/OCCLoop.cpp
   cgm/trunk/geom/OCC/OCCLoop.hpp
   cgm/trunk/geom/OCC/OCCLump.cpp
   cgm/trunk/geom/OCC/OCCLump.hpp
   cgm/trunk/geom/OCC/OCCModifyEngine.hpp
   cgm/trunk/geom/OCC/OCCQueryEngine.cpp
   cgm/trunk/geom/OCC/OCCShell.cpp
   cgm/trunk/geom/OCC/OCCShell.hpp
   cgm/trunk/geom/OCC/OCCSurface.cpp
   cgm/trunk/geom/OCC/OCCSurface.hpp
Log:
Added or Removed several functions.

Modified: cgm/trunk/geom/OCC/OCCBody.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCBody.cpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCBody.cpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -48,7 +48,9 @@
 #include "gp_Ax2.hxx"
 #include "Bnd_Box.hxx"
 #include "BRepBndLib.hxx"
-
+#include "TopExp_Explorer.hxx"
+#include "BRep_Builder.hxx"
+#include "TopoDS.hxx"
 //-------------------------------------------------------------------------
 // Purpose       : A constructor with a list of lumps that are attached.
 //
@@ -58,12 +60,31 @@
 OCCBody::OCCBody(TopoDS_CompSolid *theShape)
 {
   myTopoDSShape = theShape;
+  TopExp_Explorer Ex;
+  for (Ex.Init(*theShape, TopAbs_SOLID); Ex.More(); Ex.Next())
+  {
+     TopoDS_Solid *posolid = new TopoDS_Solid;
+     *posolid = TopoDS::Solid(Ex.Current());
+     OCCLump *lump = new OCCLump(posolid);
+     myLumps.append(lump);
+  }
+  
   update_bounding_box();
 }
 
 OCCBody::OCCBody(DLIList<Lump*>& my_lumps)
 {
   myLumps += my_lumps;
+  BRep_Builder B;
+  TopoDS_CompSolid Co;
+  B.MakeCompSolid(Co);
+  for(int i = 0; i < myLumps.size(); i ++)
+  {
+     TopoDS_Solid * solid = CAST_TO(myLumps.get_and_step(), OCCLump)->get_TopoDS_Solid();
+     B.Add(Co, *solid);
+  }
+  myTopoDSShape = new TopoDS_CompSolid(Co);
+  update_bounding_box();
 }
 
 OCCBody::~OCCBody() 
@@ -235,26 +256,10 @@
 //----------------------------------------------------------------
 void OCCBody::update_bounding_box() 
 {
-  Bnd_Box box;
-  if (myTopoDSShape)
-  {
-    const TopoDS_Shape shape=*myTopoDSShape;
-    //calculate the bounding box
-    BRepBndLib::Add(shape, box);
-    double min[3], max[3];
-  
-    //get values
-    box.Get(min[0], min[1], min[2], max[0], max[1], max[2]);
-
-    //update boundingbox.
-    CubitBox cBox(min, max);
-    boundingbox = cBox;
-    return;
-  }
-  CubitBox cBox;
-  for(int i = myLumps.size();i > 0; i--)
-    cBox |= myLumps.get_and_step()->bounding_box();  
-  boundingbox = cBox;
+  CubitVector v(0, 0, 0);
+  boundingbox.reset(v,v);
+  for (int i = 0; i < myLumps.size(); i++)
+    boundingbox |= myLumps.get_and_step()->bounding_box();
 }
 
 //----------------------------------------------------------------

Modified: cgm/trunk/geom/OCC/OCCCoEdge.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCCoEdge.cpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCCoEdge.cpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -151,13 +151,14 @@
                                               DLIList<CubitSimpleAttrib*>&)
   { return CUBIT_FAILURE; }
 
+void OCCCoEdge::get_parents_virt( DLIList<TopologyBridge*>& parents )
+  { parents.append( myLoop ); }
 
-void OCCCoEdge::reverse_sense()
-{
-  edgeSense = CubitUtil::opposite_sense( edgeSense );
-}
+void OCCCoEdge::get_children_virt( DLIList<TopologyBridge*>& children )
+  { children.append( myCurve ); }
 
 
+
 // ********** END PUBLIC FUNCTIONS         **********
 
 // ********** BEGIN PROTECTED FUNCTIONS    **********

Modified: cgm/trunk/geom/OCC/OCCCoEdge.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCCoEdge.hpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCCoEdge.hpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -98,6 +98,9 @@
     //- such operations on its entities. If it cannot, then "names"
     //- of VGI entities will not propagate.
   
+  virtual void get_parents_virt(DLIList<TopologyBridge*>&);
+  virtual void get_children_virt(DLIList<TopologyBridge*>&);
+
   inline CubitSense sense(){return edgeSense;}
     //- returns the sense of the underlying coedge wrt the underlying edge
 

Modified: cgm/trunk/geom/OCC/OCCLoop.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLoop.cpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCLoop.cpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -134,6 +134,20 @@
                                               DLIList<CubitSimpleAttrib*>&)
   { return CUBIT_FAILURE; }
 
+void OCCLoop::get_parents_virt( DLIList<TopologyBridge*>& parents )
+  { /*parents.append( mySurface )*/; }
+
+void OCCLoop::get_children_virt( DLIList<TopologyBridge*>& children )
+{
+  TopTools_IndexedMapOfShape M;
+  TopExp::MapShapes(*myTopoDSWire, TopAbs_EDGE, M);
+  int ii;
+  for (ii=1; ii<=M.Extent(); ii++) {
+          TopologyBridge *curve = OCCQueryEngine::occ_to_cgm(M(ii));
+          children.append_unique(curve);
+  }
+}
+
 //-------------------------------------------------------------------------
 // Purpose       : compute bounding box of loop
 //

Modified: cgm/trunk/geom/OCC/OCCLoop.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLoop.hpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCLoop.hpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -101,6 +101,8 @@
     //- such operations on its entities. If it cannot, then "names"
     //- of VGI entities will not propagate.
  
+    virtual void get_parents_virt(DLIList<TopologyBridge*>&);
+    virtual void get_children_virt(DLIList<TopologyBridge*>&);
 protected: 
 
 private:

Modified: cgm/trunk/geom/OCC/OCCLump.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLump.cpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCLump.cpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -37,7 +37,8 @@
 
 #include <TopExp.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
-
+#include "Bnd_Box.hxx"
+#include "BRepBndLib.hxx"
 // ********** END CUBIT INCLUDES           **********
 
 // ********** BEGIN FORWARD DECLARATIONS   **********
@@ -147,23 +148,18 @@
 //-------------------------------------------------------------------------
 CubitBox OCCLump::bounding_box() const 
 {
-  CubitBox my_box, temp_box;
-  DLIList<OCCSurface*> surfaces;
-  int ii;
-  const_cast<OCCLump*>(this)->get_surfaces(surfaces);
-  if (surfaces.size() > 0)
-  {
-    Surface* surface = surfaces.get_and_step();
-    my_box = surface->bounding_box();
-    for ( ii = surfaces.size(); ii > 1; ii-- )
-    {
-      surface = surfaces.get_and_step();
-      temp_box = surface->bounding_box();
-        //unite the boxes..
-      my_box |= temp_box;
-    }
-  }
-  return my_box;
+  Bnd_Box box;
+  const TopoDS_Shape shape=*myTopoDSSolid;
+  //calculate the bounding box
+  BRepBndLib::Add(shape, box);
+  double min[3], max[3];
+
+  //get values
+  box.Get(min[0], min[1], min[2], max[0], max[1], max[2]);
+
+  //update boundingbox.
+  CubitBox cBox(min, max);
+  return cBox;
 }
 
 //-------------------------------------------------------------------------
@@ -194,12 +190,7 @@
   DLIList<OCCSurface*> surfaces;
   Surface *curr_surface;
   OCCSurface *facet_surface;
-    //if this is a sheet body... return 0.0
   
-    //Body *tmp_body = CAST_TO(myBodyPtr->topology_entity(), Body);
-  if( is_sheet() ) 
-    return 0.0;
-  
   int ii;
   get_surfaces(surfaces);
   if (surfaces.size() > 0)

Modified: cgm/trunk/geom/OCC/OCCLump.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLump.hpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCLump.hpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -137,21 +137,6 @@
   CubitStatus restore_attribs( FILE* file_ptr, unsigned int endian );
     // Read FactAttribs from file
   
-  void get_bodies  ( DLIList<OCCBody   *>& bodies   );
-#ifdef BOYD14
-  void get_lumps   ( DLIList<OCCLump   *>& lumps    );
-#endif
-  void get_shells  ( DLIList<OCCShell  *>& shells   );
-  void get_surfaces( DLIList<OCCSurface*>& surfaces );
-#ifdef BOYD14
-  void get_loops   ( DLIList<OCCLoop   *>& loops    );
-#endif
-  void get_coedges ( DLIList<OCCCoEdge *>& coedges  );
-  void get_curves  ( DLIList<OCCCurve  *>& curves   );
-#ifdef BOYD14
-  void get_points  ( DLIList<OCCPoint  *>& points   );
-#endif
-
   void get_parents_virt( DLIList<TopologyBridge*>& parents );
   void get_children_virt( DLIList<TopologyBridge*>& children );
 
@@ -159,18 +144,10 @@
     
   inline void remove_body() {myBodyPtr = 0;}
  
-  void add_shell( OCCShell *shell ); 
-  void remove_shell( OCCShell *shell ); 
-
-  void disconnect_all_shells();
-  
   CubitStatus mass_properties( CubitVector& centroid, double& volume );
 
   CubitPointContainment point_containment( const CubitVector &point );
 
-    //is this lump a sheet
-  CubitBoolean is_sheet( );
-
 protected: 
   
 private:

Modified: cgm/trunk/geom/OCC/OCCModifyEngine.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCModifyEngine.hpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCModifyEngine.hpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -21,16 +21,6 @@
 class Point;
 class TopologyBridge;
 class TopologyEntity;
-class ChollaSurface;
-class ChollaCurve;
-class ChollaPoint;
-class ChollaEngine;
-class CurveFacetEvalTool;
-class FacetEvalTool;
-class CubitPoint;
-class CubitFacet;
-class CubitFacetEdge;
-class CubitQuadFacet;
 class Point;
 class CoEdgeSM;
 class ShellSM;
@@ -38,9 +28,6 @@
 class Body;
 class RefFace;
 class OCCSurface;
-class CubitEvaluatorData;
-class SphereEvaluatorData;
-class CylinderEvaluatorData;
 
 class OCCModifyEngine : public GeometryModifyEngine
 {

Modified: cgm/trunk/geom/OCC/OCCQueryEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCQueryEngine.cpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCQueryEngine.cpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -21,6 +21,7 @@
 #include "Geom_Surface.hxx"
 #include "Geom_Curve.hxx"
 #include "BRepBuilderAPI_Transform.hxx"
+#include "BRepTools_WireExplorer.hxx"
 #include "TColgp_Array1OfPnt.hxx"
 #include "Poly_Array1OfTriangle.hxx"
 #include "Poly_Triangle.hxx"
@@ -626,9 +627,9 @@
 //================================================================================
 CubitStatus
 OCCQueryEngine::entity_entity_distance( GeometryEntity *entity1,
-                                          GeometryEntity *entity2,
-                                          CubitVector &pos1, CubitVector &pos2,
-                                          double &distance )
+                                        GeometryEntity *entity2,
+                                        CubitVector &pos1, CubitVector &pos2,
+                                        double &distance )
 {
   TopoDS_Shape * shape1;
   TopoDS_Shape * shape2;
@@ -1023,7 +1024,9 @@
 			PRINT_INFO("Adding solids.\n");
                 iTotalTBCreated++;
 		lump = new OCCLump(posolid);
-		body = new OCCBody(posolid);
+                DLIList<Lump*> lumps;
+		lumps.append(lump);
+		body = new OCCBody(lumps);
 		OCCMap->Bind(*posolid, iTotalTBCreated);
                 OccToCGM->insert(valType(iTotalTBCreated,
 				(TopologyBridge*)body));
@@ -1049,7 +1052,7 @@
                 if(PRINT_RESULT)
                         PRINT_INFO("Adding shells.\n");
                 iTotalTBCreated++;
-		shell = = new OCCShell(poshell)
+		shell = new OCCShell(poshell);
                 OCCMap->Bind(*poshell, iTotalTBCreated);
                 OccToCGM->insert(valType(iTotalTBCreated,
                                 (TopologyBridge*)shell));
@@ -1057,12 +1060,17 @@
         else
         {
                 int k = OCCMap->Find(*poshell);
-                shell = (OCCBody*)(OccToCGM->find(k))->second;
+                shell = (OCCShell*)(OccToCGM->find(k))->second;
         }
 
 	TopExp_Explorer Ex;
+        DLIList<Surface *> surfaces;
         for (Ex.Init(aShape, TopAbs_FACE); Ex.More(); Ex.Next())
-           populate_topology_bridge(TopoDS::Face(Ex.Current()));
+	{
+           Surface* face = populate_topology_bridge(TopoDS::Face(Ex.Current()));
+	   surfaces.append(face);
+	}
+	shell->add_surfaces(surfaces); 
 	return shell;
 }
 
@@ -1119,9 +1127,10 @@
 	for (Ex.Init(aShape); Ex.More(); Ex.Next())
  	{
 	   Curve* curve = populate_topology_bridge(Ex.Current()) ;
-           TopoDS_Edge *edge = curve->get_TopoDS_Edge( );
-  	   OCCCoEdge * coedge = new OCCCoEdge(edge, curve, powire, 
- 	   (Ex.Orientation()== TopAbs_FORWARD ? CUBIT_FORWARD : CUBIT_REVERSE));
+           OCCCurve *occ_curve = CAST_TO(curve, OCCCurve);
+           TopoDS_Edge *edge = occ_curve->get_TopoDS_Edge( );
+  	   OCCCoEdge * coedge = new OCCCoEdge(edge, curve, loop, 
+ 	   (Ex.Orientation()== TopAbs_FORWARD ? CUBIT_FORWARD : CUBIT_REVERSED));
 	   coedges.append(coedge);
 	}
 	loop->add_coedges(coedges);

Modified: cgm/trunk/geom/OCC/OCCShell.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCShell.cpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCShell.cpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -54,28 +54,14 @@
 //-------------------------------------------------------------------------
 OCCShell::OCCShell(TopoDS_Shell *theShell)
 {
-  myLump = NULL;
   myTopoDSShell = theShell;
 }
-OCCShell::OCCShell(Lump* my_lump,
-                       DLIList<Surface*> &my_surfs )
+OCCShell::OCCShell( DLIList<Surface*> my_surfs )
 {
-  myLump = my_lump;
   mySurfs += my_surfs;
 }
 
 //-------------------------------------------------------------------------
-// Purpose       : A constructor with list of surfaces.
-//
-// Special Notes : For use with save/restore
-//
-//-------------------------------------------------------------------------
-OCCShell::OCCShell( DLIList<Surface*> &my_surfs )
-{
-  myLump = NULL; 
-  mySurfs += my_surfs;
-}
-//-------------------------------------------------------------------------
 // Purpose       : The destructor.
 //
 // Special Notes :
@@ -114,76 +100,23 @@
                                               DLIList<CubitSimpleAttrib*>&)
   { return CUBIT_FAILURE; }
 
-/*
-void OCCShell::bodysms(DLIList<BodySM*> &bodies) 
-{
-  if (myLump)
-    myLump->bodysms(bodies);
-}
 
-void OCCShell::lumps(DLIList<Lump*> &lumps)
+void OCCShell::add_surfaces(DLIList<Surface*> surfaces)
 {
-    lumps.append_unique(myLump);
+    mySurfs = surfaces;
 }
 
-void OCCShell::shellsms(DLIList<ShellSM*> &shellsms)
+void OCCShell::add_surface(Surface* surface)
 {
-  shellsms.append_unique(this);
+  mySurfs.append(surface); 
 }
 
-void OCCShell::surfaces(DLIList<Surface*> &surfaces)
+DLIList<Surface*> OCCShell::surfaces()
 {
-  int ii;
-  for ( ii = mySurfs.size(); ii > 0; ii-- )
-  {
-    surfaces.append_unique(mySurfs.get_and_step());
-  }
+  return mySurfs;
 }
 
-void OCCShell::loopsms(DLIList<LoopSM*> &loopsms)
-{
-  int ii;
-  for ( ii = mySurfs.size(); ii > 0; ii-- )
-  {
-    mySurfs.get_and_step()->loopsms(loopsms);
-  }
-}
 
-void OCCShell::curves(DLIList<Curve*> &curves)
-{
-  int ii;
-  for ( ii = mySurfs.size(); ii > 0; ii-- )
-  {
-    mySurfs.get_and_step()->curves(curves);
-  }
-}
-
-void OCCShell::coedgesms(DLIList<CoEdgeSM*> &coedgesms)
-{
-  int ii;
-  for ( ii = mySurfs.size(); ii > 0; ii-- )
-  {
-    mySurfs.get_and_step()->coedgesms(coedgesms);
-  }
-}
-
-void OCCShell::points(DLIList<Point*> &points)
-{
-  int ii;
-  for ( ii = mySurfs.size(); ii > 0; ii-- )
-  {
-    mySurfs.get_and_step()->points(points);
-  }
-}
-*/
-
-void OCCShell::add_lump(Lump* lump_ptr)
-{
-  assert(NULL == myLump);
-  myLump = lump_ptr;
-}
-
-
 //-------------------------------------------------------------------------
 // Purpose       : Query solid modeler topology
 //
@@ -194,7 +127,8 @@
 // Creation Date : 
 //-------------------------------------------------------------------------
 void OCCShell::get_parents_virt( DLIList<TopologyBridge*>& parents ) 
-  { parents.append(myLump); }
+  { /*parents.append(myLump);*/ }
+
 void OCCShell::get_children_virt( DLIList<TopologyBridge*>& children )
 {
   TopTools_IndexedMapOfShape M;
@@ -206,14 +140,6 @@
   }
 }
 
-
-void OCCShell::get_lumps( DLIList<OCCLump*>& result_list )
-{
-  OCCLump* lump = dynamic_cast<OCCLump*>(myLump);
-  if (lump)
-    result_list.append(lump);
-}
-
 void OCCShell::get_surfaces( DLIList<OCCSurface*>& result_list )
 {
   TopTools_IndexedMapOfShape M;
@@ -225,30 +151,6 @@
   }
 }
 
-
-void OCCShell::get_coedges( DLIList<OCCCoEdge*>& result_list )
-{
-  DLIList<OCCSurface*> surface_list;
-  get_surfaces( surface_list );
-  surface_list.reset();
-  for ( int i = 0; i < surface_list.size(); i++ )
-    surface_list.next(i)->get_coedges( result_list );
-}
-
-void OCCShell::get_curves( DLIList<OCCCurve*>& result_list )
-{
-  DLIList<OCCCoEdge*> coedge_list;
-  get_coedges( coedge_list );
-  coedge_list.reset();
-  for ( int i = coedge_list.size(); i--; )
-  {
-    OCCCoEdge* coedge = coedge_list.get_and_step();
-    OCCCurve* curve = dynamic_cast<OCCCurve*>(coedge->curve());
-    if (curve)
-      result_list.append_unique(curve);
-  }
-}
-
 //-------------------------------------------------------------------------
 // Purpose       : Disconnect input surfaces from "this" shell 
 //
@@ -265,9 +167,6 @@
     OCCSurface* surface = surfs_to_disconnect.get_and_step();
     if( mySurfs.move_to( dynamic_cast<Surface*>(surface) ) )
       mySurfs.change_to(NULL);
-
-    //if (surface)
-     // surface->remove_shell(this);
   }
   mySurfs.remove_all_with_value( NULL );
 }
@@ -284,55 +183,10 @@
 //-------------------------------------------------------------------------
 void OCCShell::disconnect_all_surfaces()
 {
-  mySurfs.reset();
-  for (int i = mySurfs.size(); i--; )
-  {
-    Surface* sm_ptr = mySurfs.get_and_step();
-    OCCSurface* surface = dynamic_cast<OCCSurface*>(sm_ptr);
-    //if (surface)
-     // surface->remove_shell(this);
-  }
   mySurfs.clean_out();
 }
 
 //-------------------------------------------------------------------------
-// Purpose       : Flip surface-use sense
-//
-// Special Notes : 
-//
-// Creator       : Jason Kraftcheck
-//
-// Creation Date : 05/26/04
-//-------------------------------------------------------------------------
-void OCCShell::reverse()
-{
-  for (int i = mySurfs.size(); i--; )
-  {
-    OCCSurface* surf = dynamic_cast<OCCSurface*>(mySurfs.next(i));
-    CubitSense sense = surf->get_shell_sense( this );
-    assert( CUBIT_UNKNOWN != sense );
-    surf->set_shell_sense( this, CubitUtil::opposite_sense( sense ) );
-  }
-}
-
-//-------------------------------------------------------------------------
-// Purpose       : Actually flip the underlying surfaces
-//
-// Special Notes : 
-//
-// Creator       : Michael Brewer
-//
-// Creation Date : 03/22/05
-//-------------------------------------------------------------------------
-void OCCShell::reverse_surfaces()
-{
-  for (int i = mySurfs.size(); i--; )
-  {
-    OCCSurface* surf = dynamic_cast<OCCSurface*>(mySurfs.next(i));
-    surf->reverse_sense();
-  }
-}
-//-------------------------------------------------------------------------
 // Purpose       : Determines if point is contained within shell 
 //
 // Special Notes : If the shell is a void, it contains all points it doesn't enclose 
@@ -455,45 +309,6 @@
     return CUBIT_PNT_INSIDE;
 }
 
-//Determine whether this shell is a sheet (ie, closed or not)
-CubitBoolean OCCShell::is_sheet()
-{
-    //get a list of all the facets in the sheet
-  DLIList<CubitFacet*> facet_list;
-  int i;
-  for (i = mySurfs.size(); i--; )
-  {
-    OCCSurface* surf = dynamic_cast<OCCSurface*>(mySurfs.next(i));
-    //surf->tris(facet_list);
-  }
-    //should be unique... doesn't hurt anything if it isn't
-  //facet_list.uniquify_ordered();
-  CubitFacet* this_facet;
-  CubitPoint* node_1;
-  CubitPoint* node_2;
-  CubitPoint* node_3;
-    //if any of the facets don't have another facet across a given
-    // edge... this is a sheet shell because it isn't closed.
-  for (i = facet_list.size(); i--; ){
-    this_facet=facet_list.get_and_step();
-    if(!this_facet){
-      PRINT_ERROR("Unexpected NULL pointer.");
-      return CUBIT_TRUE;
-    }
-    this_facet->tri_nodes(node_1,node_2,node_3);
-    if(!this_facet->shared_facet( node_1, node_2 ) ||
-       !this_facet->shared_facet( node_1, node_3 ) ||
-       !this_facet->shared_facet( node_2, node_3 ) ){
-      return CUBIT_TRUE;
-    }
-  }
-    //otherwise we made it through without finding a gap so it is close...
-    // thus not a sheet.
-  return CUBIT_FALSE;
-}
-
-       
-
 // ********** END PUBLIC FUNCTIONS         **********
 
 // ********** BEGIN PROTECTED FUNCTIONS    **********

Modified: cgm/trunk/geom/OCC/OCCShell.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCShell.hpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCShell.hpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -42,7 +42,7 @@
 public:
   
   OCCShell(TopoDS_Shell *theShell);
-  OCCShell(DLIList<OCCSurface *> surfaces);  
+  OCCShell(DLIList<Surface *> surfaces);  
 
   virtual ~OCCShell() ;
     //- Destructor.
@@ -99,11 +99,23 @@
 
   CubitPointContainment point_containment( const CubitVector &point );
   
+  virtual void get_parents_virt( DLIList<TopologyBridge*>& parents );
+  virtual void get_children_virt( DLIList<TopologyBridge*>& children );
+
+  void add_surfaces(DLIList <Surface *> surfaces);
+  DLIList <Surface *> surfaces();
+  void add_surface(Surface * surface);
+
+  void get_surfaces( DLIList<OCCSurface*>& surfaces );
+
+  void disconnect_surfaces( DLIList<OCCSurface*> &surfs_to_disconnect );
+  void disconnect_all_surfaces();
+
 protected: 
   
 private:
   TopoDS_Shell *myTopoDSShell;
-  DLIList <OCCSurface *> occ_surfaces;
+  DLIList <Surface *> mySurfs;
 };
 
 

Modified: cgm/trunk/geom/OCC/OCCSurface.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCSurface.cpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCSurface.cpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -34,7 +34,6 @@
 #include "CubitSimpleAttrib.hpp"
 #include "CubitVector.hpp"
 #include "GeometryDefines.h"
-#include "CubitEvaluator.hpp"
 #include "CubitUtil.hpp"
 #include "CastTo.hpp"
 #include "RefVolume.hpp"
@@ -45,15 +44,9 @@
 #include "LoopSM.hpp"
 #include "CubitPointData.hpp"
 
-////// #include "FacetEvalTool.hpp"
-////// #include "CubitFacetData.hpp"
-////// #include "CubitFacetEdge.hpp"
 
 // ********** END CUBIT INCLUDES           **********
 
-//// #include "CubitEvaluator.hpp"
-//// #include "SphereEvaluator.hpp"
-//// #include "CylinderEvaluator.hpp"
 
 // ********** BEGIN OpenCascade INCLUDES   **********
 
@@ -408,8 +401,6 @@
 CubitBoolean OCCSurface::is_singular_in_U( double )
 {
   assert(0);
-  if ( myEvaluator )
-      return myEvaluator->is_singular_in_U();
 
   //PRINT_ERROR("OCCSurface::is_singular_in_U not implemented yet\n");
   return CUBIT_FALSE;
@@ -422,8 +413,6 @@
 CubitBoolean OCCSurface::is_singular_in_V( double )
 {
   assert(0);
-  if ( myEvaluator )
-      return myEvaluator->is_singular_in_V();
 
   //PRINT_ERROR("OCCSurface::is_singular_in_V not implemented yet\n");
   return CUBIT_FALSE;
@@ -512,31 +501,6 @@
 }
 
 //-------------------------------------------------------------------------
-// Purpose       : Returns a surface type ID
-//
-//-------------------------------------------------------------------------
-GeometryType OCCSurface::geometry_type()
-{
-  return UNDEFINED_SURFACE_TYPE;
-/*    if ( is_flat() )
-    {
-        return PLANE_SURFACE_TYPE;
-    }
-    else if ( is_spherical() )
-    {
-        return SPHERE_SURFACE_TYPE;
-    }
-    else if ( is_conical() )
-    {
-        return CONE_SURFACE_TYPE;
-    }
-    else
-    {
-        return UNDEFINED_SURFACE_TYPE;
-    }*/
-}
-
-//-------------------------------------------------------------------------
 // Purpose       : Returns the area of the Surface
 //
 //-------------------------------------------------------------------------
@@ -547,48 +511,6 @@
   return myProps.Mass();
 }
 
-//// //-------------------------------------------------------------------------
-//// // Purpose       : Returns whether the facet surface is completely flat
-//// //
-//// //-------------------------------------------------------------------------
-//// CubitBoolean OCCSurface::is_flat() 
-//// {
-////   assert(0);
-////   // Danilov: try to use BRepAdaptor_Surface::GetType
-////   return (facetEvalTool->is_flat() == 1) ? CUBIT_TRUE : CUBIT_FALSE; 
-//// }
-
-//// //-------------------------------------------------------------------------
-//// // Purpose       : Returns whether the facet surface is spherical
-//// //
-//// //-------------------------------------------------------------------------
-//// CubitBoolean OCCSurface::is_spherical()
-//// {
-////   assert(0);
-////   // Danilov: try to use BRepAdaptor_Surface::GetType
-////     if ( myEvaluator && myEvaluator->ask_type() == SPHERE_SURFACE_TYPE )
-////     {
-////         return CUBIT_TRUE;
-////     }
-////     return CUBIT_FALSE;
-//// }
-//// 
-
-//// //-------------------------------------------------------------------------
-//// // Purpose       : Returns whether the facet surface is spherical
-//// //
-//// //-------------------------------------------------------------------------
-//// CubitBoolean OCCSurface::is_conical()
-//// {
-////   assert(0);
-////   // Danilov: try to use BRepAdaptor_Surface::GetType
-////     if ( myEvaluator && myEvaluator->ask_type() == CONE_SURFACE_TYPE )
-////     {
-////         return CUBIT_TRUE;
-////     }
-////     return CUBIT_FALSE;
-//// }
-
 //-------------------------------------------------------------------------
 // Purpose       : This function tests the passed in position to see if
 //                 is on the underlying surface.
@@ -628,89 +550,17 @@
 
 CubitSense OCCSurface::get_geometry_sense()
 {
-  assert(0);
-  CubitSense sense = CUBIT_FORWARD; //get_relative_surface_sense();
-  return sense;
-}
-
-// CubitSense OCCSurface::get_relative_surface_sense()
-// {
-//     //not sure if this is right for the facet surface...
-//   return sense_;
-// }
-
-/*
-
-void OCCSurface::bodysms(DLIList<BodySM*> &bodies) 
-{
-  int ii;
-  for ( ii = myShells.size(); ii > 0; ii-- )
-  {
-    myShells.get_and_step()->bodysms(bodies);
+  TopAbs_Orientation d = myTopoDSFace->Orientation();
+  if (d == TopAbs_FORWARD) return CUBIT_FORWARD;
+  else if (d == TopAbs_REVERSED) return CUBIT_REVERSED;
+  else {
+          printf("Check Orientation (surface)");
+          return CUBIT_UNKNOWN;
   }
 }
 
-void OCCSurface::lumps(DLIList<Lump*> &lumps)
-{
-  int ii;
-  for ( ii = myShells.size(); ii > 0; ii-- )
-  {
-    myShells.get_and_step()->lumps(lumps);
-  }
-}
-
-void OCCSurface::shellsms(DLIList<ShellSM*> &shellsms)
-{
-  int ii;
-  for ( ii = myShells.size(); ii > 0; ii-- )
-  {
-    shellsms.append_unique(myShells.get_and_step());
-  }
-}
-
-void OCCSurface::surfaces(DLIList<Surface*> &surfaces)
-{
-  surfaces.append_unique(this);
-}
-
-void OCCSurface::loopsms(DLIList<LoopSM*> &loopsms)
-{
-  int ii;
-  for ( ii = myLoops.size(); ii > 0; ii-- )
-  {
-    loopsms.append_unique(myLoops.get_and_step());
-  }
-}
-void OCCSurface::coedgesms(DLIList<CoEdgeSM*> &coedgesms)
-{
-  int ii;
-  for ( ii = myLoops.size(); ii > 0; ii-- )
-  {
-    myLoops.get_and_step()->coedgesms(coedgesms);
-  }
-}
-
-void OCCSurface::curves(DLIList<Curve*> &curves)
-{
-  int ii;
-  for ( ii = myLoops.size(); ii > 0; ii-- )
-  {
-    myLoops.get_and_step()->curves(curves);
-  }
-}
-void OCCSurface::points(DLIList<Point*> &points)
-{
-  int ii;
-  for ( ii = myLoops.size(); ii > 0; ii-- )
-  {
-    myLoops.get_and_step()->points(points);
-  }
-}
-*/
-
-
 void OCCSurface::get_parents_virt( DLIList<TopologyBridge*>& parents )
-  { CAST_LIST_TO_PARENT( myShells, parents ); }
+  { /*CAST_LIST_TO_PARENT( myShells, parents );*/ }
 
 void OCCSurface::get_children_virt( DLIList<TopologyBridge*>& children )
 {
@@ -723,180 +573,13 @@
   }
 }
 
-
-//// CubitStatus OCCSurface::get_my_facets(DLIList<CubitFacet*> &facet_list,
-////                                         DLIList<CubitPoint*>& point_list)
-//// {
-////   facetEvalTool->get_facets(facet_list);
-////   facetEvalTool->get_points(point_list);
-////   return CUBIT_SUCCESS;
-//// }
-
-//// void OCCSurface::tris(DLIList<CubitFacet *> &facet_list)
-//// {
-//// 	facetEvalTool->get_facets(facet_list);
-//// }
-
-//// void OCCSurface::get_my_points(DLIList<CubitPoint*> &point_list)
-//// {
-////   facetEvalTool->get_points(point_list);
-//// }
-
-//// void OCCSurface::get_my_facetedges(DLIList<CubitFacetEdge*> &edge_list)
-//// {
-////  facetEvalTool->get_edges(edge_list);
-//// }
-
-void OCCSurface::get_shell_sense( CubitSense &sense0)
-{
-  TopAbs_Orientation d = myTopoDSFace->Orientation();
-  if (d == TopAbs_FORWARD) sense0 = CUBIT_FORWARD;
-  else if (d == TopAbs_REVERSED) sense0 = CUBIT_REVERSED;
-  else {
-	  printf("Check Orientation (surface)");
-	  sense0 = CUBIT_UNKNOWN;
-  }
-}
-
-
 // return the sense with respect to the given shell
 CubitSense OCCSurface::get_shell_sense( ShellSM* shell_ptr ) const
 {
-  TopAbs_Orientation d = myTopoDSFace->Orientation();
-  if (d == TopAbs_FORWARD) return CUBIT_FORWARD;
-  else if (d == TopAbs_REVERSED) return CUBIT_REVERSED;
-  else {
-	  printf("Check Orientation (surface)");
-	  return CUBIT_UNKNOWN;
-  }
+  return CUBIT_FORWARD;
 }
 
-// set the sense of the surface with respect to the shell
-void OCCSurface::set_shell_sense( OCCShell *facet_shell, 
-                                    CubitSense thesense )
-{
-  assert(0);
-//    if(thesense == CUBIT_REVERSED){
-//        PRINT_INFO("should not do this.");
-//    }
-  int idx = myShells.get_index();
-  if(idx > 0){
-    PRINT_ERROR("Multiple shells attached to a single surface.\n");
-    return;
-  }
-  ShellSM *shell_ptr = (ShellSM *)facet_shell;
-  ShellSM *ashell = myShells.get();
-  if (ashell == shell_ptr)
-  {
-    myShellSense = thesense;
-  }
-//   else
-//   {
-//     myShells.step();
-//     idx = myShells.get_index();
-//     ashell = myShells.get();
-//     if (ashell == shell_ptr)
-//     {
-//       myShellSense[idx] = thesense;
-//     }
-//   }
-}
 
-//// //----------------------------------------------------------------
-//// // Function: copy_facets
-//// // Description: copy the points and facets
-//// //
-//// // Author: sjowen
-//// //----------------------------------------------------------------
-//// CubitStatus OCCSurface::copy_facets(DLIList<CubitFacet*>&copy_facet_list,
-////                                       DLIList<CubitPoint*>&copy_point_list)
-//// {
-////   assert(0);
-////   if (!facetEvalTool)
-////   {
-////     PRINT_ERROR("Couldn't copy facets.");
-////     return CUBIT_FAILURE;
-////   }
-////   int ii;
-////   DLIList<CubitFacet*>facet_list;
-////   DLIList<CubitPoint*>point_list;
-////   facetEvalTool->get_facets( facet_list );
-////   facetEvalTool->get_points( point_list );
-////   CubitPoint **point_array = new CubitPoint* [point_list.size()];
-//// 
-////   //- copy the points
-//// 
-////   point_list.reset();
-////   CubitPoint *new_point, *the_point;
-////   for(ii=0; ii<point_list.size(); ii++)
-////   {
-////     the_point = point_list.get_and_step();
-////     new_point = new CubitPointData( the_point->coordinates() );
-////     the_point->marked( ii );
-////     copy_point_list.append( new_point );
-////     point_array[ii] = new_point;
-////   }
-//// 
-////   //- copy the facets
-//// 
-////   int jj, idx;
-////   CubitFacet *new_facet, *the_facet;
-////   CubitPoint *points[3];
-////   for (ii=0; ii<facet_list.size(); ii++)
-////   {
-////     the_facet = facet_list.get_and_step();
-////     for (jj=0; jj<3; jj++)
-////     {
-////       idx = the_facet->point(jj)->marked();
-////       points[jj] = point_array[idx];
-////     }
-////     new_facet = new CubitFacetData( points[0], points[1], points[2] );
-////     copy_facet_list.append( new_facet );
-////   }
-//// 
-////   delete [] point_array;
-//// 
-////   return CUBIT_SUCCESS;
-//// }
-
-void OCCSurface::get_bodies( DLIList<OCCBody*>& result_list )
-{
-  DLIList<OCCLump*> lump_list;
-  get_lumps( lump_list );
-  lump_list.reset();
-  for ( int i = lump_list.size(); i--; )
-  {
-    OCCLump* lump = lump_list.get_and_step();
-    OCCBody* body = dynamic_cast<OCCBody*>(lump->get_body());
-    if (body)
-      result_list.append_unique(body);
-  }
-}
-
-void OCCSurface::get_lumps( DLIList<OCCLump*>& result_list )
-{
-  DLIList<OCCShell*> shell_list;
-  get_shells( shell_list );
-  shell_list.reset();
-  for ( int i = shell_list.size(); i--; )
-  {
-    OCCShell* shell = shell_list.get_and_step();
-    shell->get_lumps( result_list );
-    OCCLump* lump = dynamic_cast<OCCLump*>(shell->get_lump());
-    if (lump)
-      result_list.append_unique(lump);
-  }
-}
-
-void OCCSurface::get_shells( DLIList<OCCShell*>& result_list )
-{
-  myShells.reset();
-  for ( int i = 0; i < myShells.size(); i++ )
-    if ( OCCShell* shell = dynamic_cast<OCCShell*>(myShells.next(i)) )
-      result_list.append(shell);
-}
-
-
 void OCCSurface::get_loops( DLIList<OCCLoop*>& result_list )
 {
   TopTools_IndexedMapOfShape M;
@@ -914,7 +597,7 @@
   get_loops( loop_list );
   loop_list.reset();
   for ( int i = 0; i < loop_list.size(); i++ )
-    loop_list.next(i)->get_coedges( result_list );
+    result_list += loop_list.next(i)->coedges( );
 }
 
 void OCCSurface::get_curves( DLIList<OCCCurve*>& result_list )
@@ -938,34 +621,6 @@
 
 // ********** BEGIN PRIVATE FUNCTIONS      **********
 
-void  OCCSurface::reverse_sense()
-{
-////   assert(0);
-////   facetEvalTool->reverse_facets();
-////   myLoops.reset();
-////   int i,j;
-////   OCCLoop* this_loop;
-////   LoopSM* this_loop_sm;
-////   DLIList<OCCCoEdge *> this_coedge_list;
-////   for(i=0;i<myLoops.size();i++){
-////     this_loop_sm= myLoops.get_and_step();
-////     this_loop = dynamic_cast<OCCLoop*>(this_loop_sm);
-////     if(!this_loop){
-////       PRINT_ERROR("Unexpected null pointer for loop.\n");
-////       return;
-////     }
-////    this_loop->reverse();
-////    this_coedge_list.clean_out();
-////    this_loop->get_coedges(this_coedge_list);
-////    for(j=0; j<this_coedge_list.size(); j++){
-////      this_coedge_list.get_and_step()->reverse_sense();
-////    }
-////   }
-////   
-////   //sense_ = CubitUtil::opposite_sense( sense_ );
-////   myShellSense = CubitUtil::opposite_sense( myShellSense );
-////   //myShellSense[1] = CubitUtil::opposite_sense( myShellSense[1] );
-}
 
 // ********** END PRIVATE FUNCTIONS        **********
 

Modified: cgm/trunk/geom/OCC/OCCSurface.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCSurface.hpp	2007-11-21 18:42:17 UTC (rev 1419)
+++ cgm/trunk/geom/OCC/OCCSurface.hpp	2007-11-26 18:17:56 UTC (rev 1420)
@@ -134,6 +134,7 @@
       CubitVector* closest_location = NULL,
       CubitVector* unit_normal = NULL );
 
+  virtual CubitSense get_shell_sense(ShellSM*) const;
 
   virtual CubitStatus closest_point(  
     CubitVector const& location, 
@@ -290,6 +291,12 @@
   
   TopoDS_Face *get_TopoDS_Face(){return myTopoDSFace;}
 
+  void get_loops(DLIList<OCCLoop*>&);
+
+  void get_coedges(DLIList<OCCCoEdge*>&);
+
+  void get_curves(DLIList<OCCCurve*>&); 
+
   virtual CubitBoolean is_parametric();
     //R CubitBoolean
     //R- CUBIT_TRUE/CUBIT_FALSE




More information about the cgma-dev mailing list