[cgma-dev] r1778 - cgm/trunk/geom/OCC
janehu at mcs.anl.gov
janehu at mcs.anl.gov
Fri Apr 25 14:24:47 CDT 2008
Author: janehu
Date: 2008-04-25 14:24:47 -0500 (Fri, 25 Apr 2008)
New Revision: 1778
Modified:
cgm/trunk/geom/OCC/Makefile.am
cgm/trunk/geom/OCC/OCCBody.cpp
cgm/trunk/geom/OCC/OCCCurve.cpp
cgm/trunk/geom/OCC/OCCCurve.hpp
cgm/trunk/geom/OCC/OCCLoop.cpp
cgm/trunk/geom/OCC/OCCLump.cpp
cgm/trunk/geom/OCC/OCCModifyEngine.cpp
cgm/trunk/geom/OCC/OCCPoint.cpp
cgm/trunk/geom/OCC/OCCQueryEngine.cpp
cgm/trunk/geom/OCC/OCCQueryEngine.hpp
cgm/trunk/geom/OCC/OCCShell.cpp
cgm/trunk/geom/OCC/OCCShell.hpp
cgm/trunk/geom/OCC/OCCSurface.cpp
Log:
Modified to delete free curves after a unite operation.
Modified: cgm/trunk/geom/OCC/Makefile.am
===================================================================
--- cgm/trunk/geom/OCC/Makefile.am 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/Makefile.am 2008-04-25 19:24:47 UTC (rev 1778)
@@ -33,6 +33,7 @@
OCCAttribSet.cpp \
OCCBody.cpp \
OCCCoEdge.cpp \
+ OCCCoFace.cpp \
OCCCurve.cpp \
OCCLoop.cpp \
OCCLump.cpp \
Modified: cgm/trunk/geom/OCC/OCCBody.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCBody.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCBody.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -102,6 +102,7 @@
OCCBody::~OCCBody()
{
+ delete myTopoDSShape;
}
GeometryQueryEngine* OCCBody::get_geometry_query_engine() const
Modified: cgm/trunk/geom/OCC/OCCCurve.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCCurve.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCCurve.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -111,7 +111,7 @@
//-------------------------------------------------------------------------
OCCCurve::~OCCCurve()
{
- assert(myLoopList.size() == 0);
+ delete myTopoDSEdge;
}
//-------------------------------------------------------------------------
Modified: cgm/trunk/geom/OCC/OCCCurve.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCCurve.hpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCCurve.hpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -45,7 +45,7 @@
{
public :
- OCCCurve( TopoDS_Edge *theEdge );
+ OCCCurve( TopoDS_Edge* theEdge );
virtual ~OCCCurve() ;
//- The destructor
Modified: cgm/trunk/geom/OCC/OCCLoop.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLoop.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCLoop.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -62,6 +62,7 @@
OCCLoop::~OCCLoop()
{
disconnect_all_curves();
+ delete myTopoDSWire;
}
//-------------------------------------------------------------------------
Modified: cgm/trunk/geom/OCC/OCCLump.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLump.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCLump.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -73,7 +73,7 @@
}
OCCLump::~OCCLump()
-{}
+{ delete myTopoDSSolid;}
//-------------------------------------------------------------------------
// Purpose : Find centroid
Modified: cgm/trunk/geom/OCC/OCCModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -119,7 +119,6 @@
#include "AppUtil.hpp"
#include "SphereEvaluator.hpp"
#include "CylinderEvaluator.hpp"
-
OCCModifyEngine* OCCModifyEngine::instance_ = 0;
//===============================================================================
@@ -1595,6 +1594,7 @@
delete shell->my_lump();
shell->set_body(NULL);
shell->set_lump(NULL);
+
TopoDS_Shell* topods_shell = shell->get_TopoDS_Shell();
if(topods_shell)
faces_to_stitch.append(topods_shell);
@@ -1629,8 +1629,20 @@
new_shape = shapes.First();
OCCSurface::update_OCC_entity(face, TopoDS::Face(new_shape), &fuser);
}
- //else
- // OCCSurface::update_OCC_entity(face, face, &fuser);
+ else if(fuser.IsDeleted(face))
+ {
+ TopoDS_Face null_face;
+ int k = OCCSurface::update_OCC_entity(face, null_face, &fuser);
+ std::map<int, TopologyBridge*>::iterator it =
+ OCCQueryEngine::instance()->OccToCGM->find(k);
+ TopologyBridge* tb = NULL;
+ if (it != OCCQueryEngine::instance()->OccToCGM->end())
+ {
+ OCCQueryEngine::instance()->OccToCGM->erase(k);
+ tb = (*it).second;
+ delete tb;
+ }
+ }
}
}
Modified: cgm/trunk/geom/OCC/OCCPoint.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCPoint.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCPoint.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -82,6 +82,7 @@
//-------------------------------------------------------------------------
OCCPoint::~OCCPoint()
{
+ delete myTopoDSVertex;
}
//-------------------------------------------------------------------------
Modified: cgm/trunk/geom/OCC/OCCQueryEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCQueryEngine.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCQueryEngine.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -53,6 +53,7 @@
#include "OCCPoint.hpp"
#include "OCCCurve.hpp"
#include "OCCCoEdge.hpp"
+#include "OCCCoFace.hpp"
#include "OCCLoop.hpp"
#include "OCCSurface.hpp"
#include "OCCShell.hpp"
@@ -1212,14 +1213,22 @@
}
TopExp_Explorer Ex;
+ DLIList<OCCCoFace*> cofaces;
for (Ex.Init(aShape, TopAbs_FACE); Ex.More(); Ex.Next())
{
+ TopoDS_Face topo_face = TopoDS::Face(Ex.Current());
Surface* face =
- populate_topology_bridge(TopoDS::Face(Ex.Current()), build_body);
+ populate_topology_bridge(topo_face, build_body);
+
+ OCCSurface *occ_surface = CAST_TO(face, OCCSurface);
+ OCCCoFace * coface = new OCCCoFace( occ_surface, shell,
+ ( topo_face.Orientation()== TopAbs_FORWARD ? CUBIT_FORWARD : CUBIT_REVERSED));
+ cofaces.append(coface);
+
if(standalone)
- CAST_TO(face,OCCSurface)->set_shell(shell);
+ occ_surface->set_shell(shell);
}
-
+ shell->cofaces(cofaces);
return shell;
}
@@ -2429,14 +2438,33 @@
return CUBIT_FALSE;
}
-void OCCQueryEngine::update_OCC_map(TopoDS_Shape old_shape,
+int OCCQueryEngine::update_OCC_map(TopoDS_Shape old_shape,
TopoDS_Shape new_shape)
{
if (!OCCMap->IsBound(old_shape))
- return;
+ return -1;
+
int k = OCCMap->Find(old_shape);
assert (k > 0 && k <= iTotalTBCreated);
+
+ if (!new_shape.IsNull() && !old_shape.IsSame(new_shape)&&
+ OCCMap->IsBound(new_shape))
+ //already has a TB built on new_shape
+ {
+ //delete the second TB corresponding to old_shape
+ std::map<int, TopologyBridge*>::iterator it = OccToCGM->find(k);
+ TopologyBridge* tb = NULL;
+ if (it != OccToCGM->end())
+ {
+ OccToCGM->erase(k);
+ tb = (*it).second;
+ delete tb;
+ }
+ }
+
OCCMap->UnBind(old_shape);
- OCCMap->Bind(new_shape, k);
+ if(!new_shape.IsNull())
+ OCCMap->Bind(new_shape, k);
+ return k;
}
//EOF
Modified: cgm/trunk/geom/OCC/OCCQueryEngine.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCQueryEngine.hpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCQueryEngine.hpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -110,7 +110,7 @@
//- Singleton pattern
//- Controlled access and creation of the sole instance of this class.
- void update_OCC_map(TopoDS_Shape old_shape, TopoDS_Shape new_shape);
+ int update_OCC_map(TopoDS_Shape old_shape, TopoDS_Shape new_shape);
virtual ~OCCQueryEngine();
Modified: cgm/trunk/geom/OCC/OCCShell.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCShell.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCShell.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -70,8 +70,14 @@
//-------------------------------------------------------------------------
OCCShell::~OCCShell()
{
+ delete myTopoDSShell;
}
+OCCCoFace* OCCShell::remove_coface(OCCCoFace *coface)
+{
+ return myCoFaceList.remove(coface);
+}
+
void OCCShell::set_TopoDS_Shell(TopoDS_Shell shell)
{
if (!myTopoDSShell)
Modified: cgm/trunk/geom/OCC/OCCShell.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCShell.hpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCShell.hpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -31,7 +31,7 @@
class OCCLump;
class OCCSurface;
class OCCLoop;
-class OCCCoEdge;
+class OCCCoFace;
class OCCCurve;
class OCCPoint;
class BRepBuilderAPI_Transform;
@@ -48,6 +48,11 @@
virtual ~OCCShell() ;
//- Destructor.
+ void cofaces(DLIList<OCCCoFace *> cofaces) {myCoFaceList = cofaces;}
+
+ DLIList<OCCCoFace*> cofaces() {return myCoFaceList;}
+
+ OCCCoFace* remove_coface(OCCCoFace *coface);
TopoDS_Shell* get_TopoDS_Shell() {return myTopoDSShell;}
void set_TopoDS_Shell(TopoDS_Shell shell);
@@ -120,6 +125,7 @@
OCCSurface* mySheetSurface;
OCCLump* myLump;
OCCBody* myBody;
+ DLIList<OCCCoFace *> myCoFaceList;
};
Modified: cgm/trunk/geom/OCC/OCCSurface.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCSurface.cpp 2008-04-24 19:55:06 UTC (rev 1777)
+++ cgm/trunk/geom/OCC/OCCSurface.cpp 2008-04-25 19:24:47 UTC (rev 1778)
@@ -94,6 +94,7 @@
OCCSurface::~OCCSurface()
{
+ delete myTopoDSFace;
}
@@ -774,7 +775,6 @@
assert(aBRepTrsf != NULL || op != NULL);
TopoDS_Shape shape;
- CubitBoolean need_update = CUBIT_TRUE;
if (aBRepTrsf)
shape = aBRepTrsf->ModifiedShape(*get_TopoDS_Face());
else
@@ -828,47 +828,82 @@
TopExp::MapShapes(old_surface, TopAbs_WIRE, M);
double tol = OCCQueryEngine::instance()->get_sme_resabs_tolerance();
int ii;
+ TopTools_ListOfShape shapes;
+
for (ii=1; ii<=M.Extent(); ii++) {
- TopoDS_Wire wire = TopoDS::Wire(M(ii));
- TopTools_ListOfShape shapes;
- shapes.Assign(op->Modified(wire));
- if (shapes.Extent() > 0)
- shape = shapes.First();
- else
+ TopoDS_Wire wire = TopoDS::Wire(M(ii));
+
+ if(!new_surface.IsNull())
{
- TopTools_IndexedMapOfShape M_new;
- TopExp::MapShapes(new_surface, TopAbs_WIRE, M_new);
- shape = M_new(ii);
- }
+ TopTools_ListOfShape shapes;
+ shapes.Assign(op->Modified(wire));
+ if (shapes.Extent() > 0)
+ shape = shapes.First();
+ else
+ {
+ TopTools_IndexedMapOfShape M_new;
+ TopExp::MapShapes(new_surface, TopAbs_WIRE, M_new);
+ shape = M_new(ii);
+ }
- OCCQueryEngine::instance()->update_OCC_map(wire, shape);
-
+ OCCQueryEngine::instance()->update_OCC_map(wire, shape);
+ }
//set curves
- CubitBoolean need_update = CUBIT_TRUE;
BRepTools_WireExplorer Ex;
for(Ex.Init(wire); Ex.More();Ex.Next())
{
TopoDS_Edge edge = Ex.Current();
+ shape.Nullify();
shapes.Assign(op->Modified(edge));
+ shape.Nullify();
if (shapes.Extent() > 0)
shape = shapes.First();
- else
+ else if (op->IsDeleted(edge))
+ {
+ int k = OCCQueryEngine::instance()->update_OCC_map(edge, shape);
+ std::map<int, TopologyBridge*>::iterator it =
+ OCCQueryEngine::instance()->OccToCGM->find(k);
+ TopologyBridge* tb = NULL;
+ if (it != OCCQueryEngine::instance()->OccToCGM->end())
+ {
+ OCCQueryEngine::instance()->OccToCGM->erase(k);
+ tb = (*it).second;
+ delete tb;
+ }
+ }
+
+ else
continue;
- if(wire.Orientation() == TopAbs_REVERSED)
+ if(wire.Orientation() == TopAbs_REVERSED && !shape.IsNull())
+ {
shape.Orientation(
shape.Orientation()==TopAbs_FORWARD? TopAbs_REVERSED:TopAbs_FORWARD);
- OCCQueryEngine::instance()->update_OCC_map(edge, shape);
+ OCCQueryEngine::instance()->update_OCC_map(edge, shape);
+ }
//update vertex
TopoDS_Vertex vertex = Ex.CurrentVertex();
shapes.Assign(op->Modified(vertex));
- need_update = CUBIT_TRUE;
+ shape.Nullify();
if (shapes.Extent() > 0)
{
shape = shapes.First();
OCCQueryEngine::instance()->update_OCC_map(vertex, shape);
}
+ else if(op->IsDeleted(vertex))
+ {
+ int k = OCCQueryEngine::instance()->update_OCC_map(vertex, shape);
+ std::map<int, TopologyBridge*>::iterator it =
+ OCCQueryEngine::instance()->OccToCGM->find(k);
+ TopologyBridge* tb = NULL;
+ if (it != OCCQueryEngine::instance()->OccToCGM->end())
+ {
+ OCCQueryEngine::instance()->OccToCGM->erase(k);
+ tb = (*it).second;
+ delete tb;
+ }
+ }
}
}
return CUBIT_SUCCESS;
More information about the cgma-dev
mailing list