cgma-dev
Threads by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
January 2008
- 3 participants
- 23 discussions
Author: janehu
Date: 2008-01-09 15:10:15 -0600 (Wed, 09 Jan 2008)
New Revision: 1510
Modified:
cgm/trunk/geom/OCC/OCCBody.cpp
cgm/trunk/geom/OCC/OCCBody.hpp
cgm/trunk/geom/OCC/OCCCoEdge.hpp
cgm/trunk/geom/OCC/OCCCurve.cpp
cgm/trunk/geom/OCC/OCCCurve.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/OCCPoint.cpp
cgm/trunk/geom/OCC/OCCPoint.hpp
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
cgm/trunk/geom/OCC/OCCSurface.hpp
Log:
/Updated for new underlining TopoDS entities when bodies get translated. need to work on 'myMarked' to unset it. Now translating bodies works fine, other entities needs to update too.
Modified: cgm/trunk/geom/OCC/OCCBody.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCBody.cpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCBody.cpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -42,6 +42,7 @@
#include <TopExp.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
#include "BRepBuilderAPI_Transform.hxx"
+#include "TopTools_DataMapOfShapeInteger.hxx"
#include "gp_Ax1.hxx"
#include "gp_Ax2.hxx"
#include "Bnd_Box.hxx"
@@ -51,6 +52,7 @@
#include "TopoDS.hxx"
#include "GProp_GProps.hxx"
#include "BRepGProp.hxx"
+#include "Standard_Boolean.hxx"
//-------------------------------------------------------------------------
// Purpose : A constructor with a list of lumps that are attached.
//
@@ -145,7 +147,11 @@
aTrsf.SetTranslation(aVec);
BRepBuilderAPI_Transform aBRepTrsf(*myTopoDSShape, aTrsf);
+
+ // calculate for bounding box
+ update_OCC_entity(aBRepTrsf);
update_bounding_box();
+
return CUBIT_SUCCESS;
}
@@ -168,7 +174,11 @@
aTrsf.SetRotation(anAxis, angle);
BRepBuilderAPI_Transform aBRepTrsf(*myTopoDSShape, aTrsf);
+
+ // calculate for bounding box
+ update_OCC_entity(aBRepTrsf);
update_bounding_box();
+
return CUBIT_SUCCESS;
}
@@ -185,7 +195,11 @@
aTrsf.SetScaleFactor(scale_factor);
BRepBuilderAPI_Transform aBRepTrsf(*myTopoDSShape, aTrsf);
+
+ // calculate for bounding box
+ update_OCC_entity(aBRepTrsf);
update_bounding_box();
+
return CUBIT_SUCCESS;
}
@@ -222,10 +236,11 @@
aTrsf.SetMirror(anAx2);
BRepBuilderAPI_Transform aBRepTrsf(*myTopoDSShape, aTrsf);
- TopoDS_Shape shape = aBRepTrsf.ModifiedShape(*myTopoDSShape);
-
- update_OCC_entity(shape);
+
+ // calculate for bounding box
+ update_OCC_entity(aBRepTrsf);
update_bounding_box();
+
return CUBIT_SUCCESS;
}
@@ -236,21 +251,29 @@
// as the body's lumps number.
// Author: Jane Hu
//----------------------------------------------------------------
-CubitStatus OCCBody::update_OCC_entity( TopoDS_Shape shape)
+CubitStatus OCCBody::update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf)
{
+ TopoDS_Shape shape = aBRepTrsf.Shape();
TopoDS_CompSolid compsolid = TopoDS::CompSolid(shape);
- set_TopoDS_Shape(compsolid);
+ if(OCCQueryEngine::instance()->OCCMap->IsBound(*myTopoDSShape) )
+ {
+ int k = OCCQueryEngine::instance()->OCCMap->Find(*myTopoDSShape);
+ assert (k > 0 && k <= OCCQueryEngine::instance()->iTotalTBCreated);
+ OCCQueryEngine::instance()->OCCMap->UnBind(*myTopoDSShape);
+ OCCQueryEngine::instance()->OCCMap->Bind(shape, k);
+ }
+
//set the lumps
DLIList<Lump *> lumps;
lumps = this->lumps();
- TopTools_IndexedMapOfShape M;
- TopExp::MapShapes(*myTopoDSShape, TopAbs_SOLID, M);
- for (int i = 0; i < lumps.size(); i++)
+ for (int i = 1; i <= lumps.size(); i++)
{
OCCLump *lump = CAST_TO(lumps.get_and_step(), OCCLump);
- lump->set_TopoDS_Solid(TopoDS::Solid(M(i)));
+ lump->update_OCC_entity(aBRepTrsf);
}
+ set_TopoDS_Shape(compsolid);
+ //unset_marks();
}
//----------------------------------------------------------------
// Function: update_bounding_box
Modified: cgm/trunk/geom/OCC/OCCBody.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCBody.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCBody.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -38,6 +38,7 @@
class OCCLoop;
class OCCCurve;
class OCCPoint;
+class BRepBuilderAPI_Transform;
// ********** END FORWARD DECLARATIONS **********
@@ -175,7 +176,8 @@
TopoDS_CompSolid *myTopoDSShape;
CubitBox boundingbox;
- CubitStatus update_OCC_entity( TopoDS_Shape shape); //update the lumps
+ CubitStatus update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf);
+ //update the underlining CompSolid
};
Modified: cgm/trunk/geom/OCC/OCCCoEdge.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCCoEdge.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCCoEdge.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -52,12 +52,18 @@
inline CubitSense sense(){return edgeSense;}
//- returns the sense of the underlying coedge wrt the underlying edge
+ inline void set_sense(CubitSense sense) {edgeSense = sense;}
+
inline Curve *curve()
{return myCurve;}
//- get the curve associated with this coedge
+ inline void set_curve(Curve* curve) {myCurve = curve;}
+
inline LoopSM* loop() const { return myLoop; }
+ inline void set_loop(LoopSM * loop) {myLoop = loop;}
+
virtual GeometryQueryEngine*
get_geometry_query_engine() const;
//R GeometryQueryEngine*
Modified: cgm/trunk/geom/OCC/OCCCurve.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCCurve.cpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCCurve.cpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -57,6 +57,8 @@
#include "GC_MakeLine.hxx"
#include "gp_Circ.hxx"
#include "gp_Elips.hxx"
+#include "BRepBuilderAPI_Transform.hxx"
+#include "TopTools_DataMapOfShapeInteger.hxx"
//#include "TopOpeBRep_ShapeIntersector.hxx"
//#include "TopOpeBRep_Point2d.hxx"
//#include "TopOpeBRep_EdgesIntersector.hxx"
@@ -84,6 +86,7 @@
OCCCurve::OCCCurve( TopoDS_Edge *theEdge )
{
myTopoDSEdge = theEdge;
+ myMarked = CUBIT_FALSE;
}
//-------------------------------------------------------------------------
@@ -724,7 +727,8 @@
TopologyBridge *point1, *point2;
if (M.Extent()==1) {
point1 = OCCQueryEngine::instance()->occ_to_cgm(M(1));
- children.append_unique(point1);
+ if (point1)
+ children.append_unique(point1);
} else if (M.Extent()==2) {
if ( fabs(BRep_Tool::Parameter(TopoDS::Vertex(M(1)), *myTopoDSEdge)-start_param()) >
fabs(BRep_Tool::Parameter(TopoDS::Vertex(M(2)), *myTopoDSEdge)-start_param()) ) {
@@ -734,11 +738,13 @@
point1 = OCCQueryEngine::instance()->occ_to_cgm(M(1));
point2 = OCCQueryEngine::instance()->occ_to_cgm(M(2));
}
- if (point1 == point2) {
+ if (point1 && point1 == point2) {
children.append_unique(point1);
} else {
- children.append_unique(point1);
- children.append_unique(point2);
+ if (point1)
+ children.append_unique(point1);
+ if (point2)
+ children.append_unique(point2);
}
}
}
@@ -867,6 +873,38 @@
return CUBIT_PNT_OFF;
}
+//----------------------------------------------------------------
+// Function: to update the core Curve
+// for any movement of the body/surface/curve.
+// Author: Jane Hu
+//----------------------------------------------------------------
+void OCCCurve::update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf)
+{
+ if (myMarked == 1)
+ return;
+
+ TopoDS_Shape shape = aBRepTrsf.ModifiedShape(*get_TopoDS_Edge());
+ TopoDS_Edge curve = TopoDS::Edge(shape);
+
+ int k = OCCQueryEngine::instance()->OCCMap->Find(*myTopoDSEdge);
+ assert (k > 0 && k <= OCCQueryEngine::instance()->iTotalTBCreated);
+ OCCQueryEngine::instance()->OCCMap->UnBind(*myTopoDSEdge);
+ OCCQueryEngine::instance()->OCCMap->Bind(curve, k);
+
+ //set the vertices
+ DLIList<TopologyBridge*> vertices;
+ get_children_virt(vertices);
+ for (int i = 1; i <= vertices.size(); i++)
+ {
+ TopologyBridge* tb = vertices.get_and_step();
+ OCCPoint *point = CAST_TO(tb, OCCPoint);
+ if (point)
+ point->update_OCC_entity(aBRepTrsf);
+ }
+ myMarked = 1;
+ set_TopoDS_Edge(curve);
+}
+
// ********** END PRIVATE FUNCTIONS **********
// ********** BEGIN HELPER CLASSES **********
Modified: cgm/trunk/geom/OCC/OCCCurve.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCCurve.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCCurve.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -37,6 +37,7 @@
class OCCLoop;
class OCCCoEdge;
class OCCPoint;
+class BRepBuilderAPI_Transform;
// ********** END FORWARD DECLARATIONS **********
@@ -320,6 +321,8 @@
{ return myTopoDSEdge; }
void set_TopoDS_Edge(TopoDS_Edge edge){*myTopoDSEdge = edge;}
+ void update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf);
+
protected:
private:
@@ -332,6 +335,7 @@
TopoDS_Edge *myTopoDSEdge;
DLIList<OCCLoop*> myLoopList;
bool periodic;
+ CubitBoolean myMarked ;
};
// ********** BEGIN INLINE FUNCTIONS **********
Modified: cgm/trunk/geom/OCC/OCCLoop.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLoop.cpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCLoop.cpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -33,6 +33,8 @@
#include "TopTools_ListIteratorOfListOfShape.hxx"
#include "TopTools_DataMapOfShapeInteger.hxx"
#include "TopTools_IndexedDataMapOfShapeListOfShape.hxx"
+#include "BRepBuilderAPI_Transform.hxx"
+
// ********** END CUBIT INCLUDES **********
// ********** BEGIN STATIC DECLARATIONS **********
@@ -211,4 +213,27 @@
}
+//----------------------------------------------------------------
+// Function: to update the core Loop
+// for any movement of the body/surface.
+// Author: Jane Hu
+//----------------------------------------------------------------
+CubitStatus OCCLoop::update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf)
+{
+ TopoDS_Shape shape = aBRepTrsf.ModifiedShape(*get_TopoDS_Wire());
+ TopoDS_Wire loop = TopoDS::Wire(shape);
+ int k = OCCQueryEngine::instance()->OCCMap->Find(*myTopoDSWire);
+ assert (k > 0 && k <= OCCQueryEngine::instance()->iTotalTBCreated);
+ OCCQueryEngine::instance()->OCCMap->UnBind(*myTopoDSWire);
+ OCCQueryEngine::instance()->OCCMap->Bind(loop, k);
+
+ //set the curves
+ for (int i = 1; i <= myCoEdgeList.size(); i++)
+ {
+ OCCCurve *curve = CAST_TO(myCoEdgeList.get_and_step()->curve(), OCCCurve);
+ curve->update_OCC_entity(aBRepTrsf);
+ }
+ set_TopoDS_Wire(loop);
+}
+
Modified: cgm/trunk/geom/OCC/OCCLoop.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLoop.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCLoop.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -31,6 +31,7 @@
class OCCCoEdge;
class OCCCurve;
class OCCPoint;
+class BRepBuilderAPI_Transform;
class OCCLoop : public LoopSM
{
@@ -103,6 +104,8 @@
virtual void get_parents_virt(DLIList<TopologyBridge*>&);
virtual void get_children_virt(DLIList<TopologyBridge*>&);
+
+ CubitStatus update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf);
protected:
private:
Modified: cgm/trunk/geom/OCC/OCCLump.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLump.cpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCLump.cpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -37,6 +37,8 @@
#include <TopExp.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
+#include "BRepBuilderAPI_Transform.hxx"
+#include "TopTools_DataMapOfShapeInteger.hxx"
#include "Bnd_Box.hxx"
#include "BRepBndLib.hxx"
#include "GProp_GProps.hxx"
@@ -252,4 +254,29 @@
}
+//----------------------------------------------------------------
+// Function: to update the core Solid
+// for any movement of the lump.
+// Author: Jane Hu
+//----------------------------------------------------------------
+CubitStatus OCCLump::update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf)
+{
+ TopoDS_Shape shape = aBRepTrsf.ModifiedShape(*get_TopoDS_Solid());
+ TopoDS_Solid solid = TopoDS::Solid(shape);
+ int k = OCCQueryEngine::instance()->OCCMap->Find(*myTopoDSSolid);
+ assert (k > 0 && k <= OCCQueryEngine::instance()->iTotalTBCreated);
+ OCCQueryEngine::instance()->OCCMap->UnBind(*myTopoDSSolid);
+ OCCQueryEngine::instance()->OCCMap->Bind(solid, k);
+
+ //set the lumps
+ DLIList<TopologyBridge *> shells;
+ this->get_children_virt(shells);
+ for (int i = 1; i <= shells.size(); i++)
+ {
+ OCCShell *shell = CAST_TO(shells.get_and_step(), OCCShell);
+ shell->update_OCC_entity(aBRepTrsf);
+ }
+ set_TopoDS_Solid(solid);
+}
+
Modified: cgm/trunk/geom/OCC/OCCLump.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCLump.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCLump.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -36,6 +36,7 @@
class OCCCoEdge;
class OCCCurve;
class OCCPoint;
+class BRepBuilderAPI_Transform;
// ********** END FORWARD DECLARATIONS **********
@@ -147,6 +148,8 @@
CubitPointContainment point_containment( const CubitVector &point );
+ CubitStatus update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf);
+
protected:
private:
Modified: cgm/trunk/geom/OCC/OCCPoint.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCPoint.cpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCPoint.cpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -31,7 +31,7 @@
#include "TopTools_ListIteratorOfListOfShape.hxx"
#include "TopTools_DataMapOfShapeInteger.hxx"
#include "TopTools_IndexedDataMapOfShapeListOfShape.hxx"
-
+#include "BRepBuilderAPI_Transform.hxx"
// ********** END CUBIT INCLUDES **********
// ********** BEGIN STATIC DECLARATIONS **********
@@ -40,8 +40,8 @@
// ********** BEGIN PUBLIC FUNCTIONS **********
//-------------------------------------------------------------------------
-// Purpose : The constructor with a pointer to the location
-//
+// Purpose : The constructor with a pointer to the location
+//
// Special Notes :
//
// Creator : Jane Hu
@@ -55,7 +55,7 @@
myTopoDSVertex = new TopoDS_Vertex(theVertex);
}
-//-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
// Purpose : The constructor with a gp_Pnt point
//
// Special Notes :
@@ -253,6 +253,28 @@
void OCCPoint::get_children_virt( DLIList<TopologyBridge*>& )
{ }
+//----------------------------------------------------------------
+// Function: to update the core vertex
+// for any movement of the body/surface/curve/vertex.
+// Author: Jane Hu
+//----------------------------------------------------------------
+void OCCPoint::update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf)
+{
+ if (this->myMarked == CUBIT_TRUE)
+ return;
+
+ TopoDS_Shape shape = aBRepTrsf.ModifiedShape(*get_TopoDS_Vertex());
+ TopoDS_Vertex vertex = TopoDS::Vertex(shape);
+
+ int k = OCCQueryEngine::instance()->OCCMap->Find(*myTopoDSVertex);
+ assert (k > 0 && k <= OCCQueryEngine::instance()->iTotalTBCreated);
+ OCCQueryEngine::instance()->OCCMap->UnBind(*myTopoDSVertex);
+ OCCQueryEngine::instance()->OCCMap->Bind(vertex, k);
+
+ set_myMarked(CUBIT_TRUE);
+ set_TopoDS_Vertex(vertex);
+}
+
// ********** END PUBLIC FUNCTIONS **********
// ********** BEGIN PROTECTED FUNCTIONS **********
Modified: cgm/trunk/geom/OCC/OCCPoint.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCPoint.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCPoint.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -29,6 +29,7 @@
// ********** BEGIN FORWARD DECLARATIONS **********
class CubitSimpleAttrib;
+class BRepBuilderAPI_Transform;
// ********** END FORWARD DECLARATIONS **********
class OCCPoint : public Point
@@ -36,7 +37,7 @@
private:
TopoDS_Vertex *myTopoDSVertex;
-
+ CubitBoolean myMarked ;
OCCAttribSet attribSet;
public :
@@ -47,11 +48,11 @@
//I- DLIList<Curve*> curves
//I- curves attaced to point
- OCCPoint(TopoDS_Vertex* thePoint ):myTopoDSVertex(thePoint){};
- //I- gp_Pnt *thePoint
- //I- pointer to the TopoDS_Vertex associated with OCCPoint
- //I- DLIList<Curve*> curves
- //I- curves attaced to point
+ OCCPoint(TopoDS_Vertex* thePoint ):myTopoDSVertex(thePoint), myMarked(CUBIT_FALSE){};
+ //I- gp_Pnt *thePoint
+ //I- pointer to the TopoDS_Vertex associated with OCCPoint
+ //I- DLIList<Curve*> curves
+ //I- curves attaced to point
OCCPoint(gp_Pnt& thePoint );
//I- gp_Pnt *thePoint
@@ -62,6 +63,7 @@
virtual ~OCCPoint();
//- The destructor
+ void set_myMarked(CubitBoolean marked) {myMarked = marked;}
TopoDS_Vertex *get_TopoDS_Vertex(){return myTopoDSVertex; }
void set_TopoDS_Vertex(TopoDS_Vertex vertex){*myTopoDSVertex = vertex;}
@@ -133,6 +135,7 @@
CubitStatus restore_attribs( FILE *file_ptr, unsigned int endian );
+ void update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf);
};
Modified: cgm/trunk/geom/OCC/OCCQueryEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCQueryEngine.cpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCQueryEngine.cpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -91,6 +91,8 @@
#include <BndLib_AddSurface.hxx>
#include <Precision.hxx>
#include <BRepAdaptor_Surface.hxx>
+#include "Standard_Boolean.hxx"
+
//#include "TopOpeBRep_ShapeIntersector.hxx"
//#include "BRepAdaptor_Curve.hxx"
//#include "TopOpeBRepTool_ShapeTool.hxx"
Modified: cgm/trunk/geom/OCC/OCCQueryEngine.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCQueryEngine.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCQueryEngine.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -343,6 +343,7 @@
DLIList<OCCCurve*> *CurveList ;
TopTools_DataMapOfShapeInteger* OCCMap;
std::map<int, TopologyBridge*>* OccToCGM;
+ static int iTotalTBCreated ;
protected:
@@ -361,7 +362,6 @@
DLIList<OCCCurve*> &facet_curves,
DLIList<OCCPoint*> &facet_points );
- static int iTotalTBCreated ;
static CubitBoolean PRINT_RESULT;
static OCCQueryEngine* instance_;
Modified: cgm/trunk/geom/OCC/OCCShell.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCShell.cpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCShell.cpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -37,6 +37,7 @@
#include "TopTools_ListIteratorOfListOfShape.hxx"
#include "TopTools_DataMapOfShapeInteger.hxx"
#include "TopTools_ListOfShape.hxx"
+#include "BRepBuilderAPI_Transform.hxx"
// ********** END CUBIT INCLUDES **********
// ********** BEGIN STATIC DECLARATIONS **********
@@ -144,6 +145,32 @@
}
}
+//----------------------------------------------------------------
+// Function: to update the core Shell
+// for any movement of the body.
+// Author: Jane Hu
+//----------------------------------------------------------------
+CubitStatus OCCShell::update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf)
+{
+ TopoDS_Shape shape = aBRepTrsf.ModifiedShape(*get_TopoDS_Shell());
+ TopoDS_Shell shell = TopoDS::Shell(shape);
+
+ int k = OCCQueryEngine::instance()->OCCMap->Find(*myTopoDSShell);
+ assert (k > 0 && k <= OCCQueryEngine::instance()->iTotalTBCreated);
+ OCCQueryEngine::instance()->OCCMap->UnBind(*myTopoDSShell);
+ OCCQueryEngine::instance()->OCCMap->Bind(shell, k);
+
+ //set the lumps
+ DLIList<TopologyBridge *> surfaces;
+ this->get_children_virt(surfaces);
+ for (int i = 1; i <= surfaces.size(); i++)
+ {
+ OCCSurface *surface = CAST_TO(surfaces.get_and_step(), OCCSurface);
+ surface->update_OCC_entity(aBRepTrsf);
+ }
+ set_TopoDS_Shell(shell);
+}
+
// ********** END PUBLIC FUNCTIONS **********
// ********** BEGIN PROTECTED FUNCTIONS **********
Modified: cgm/trunk/geom/OCC/OCCShell.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCShell.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCShell.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -34,6 +34,7 @@
class OCCCoEdge;
class OCCCurve;
class OCCPoint;
+class BRepBuilderAPI_Transform;
// ********** END CUBIT INCLUDES **********
@@ -100,6 +101,7 @@
virtual void get_parents_virt( DLIList<TopologyBridge*>& parents );
virtual void get_children_virt( DLIList<TopologyBridge*>& children );
+ CubitStatus update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf);
protected:
private:
Modified: cgm/trunk/geom/OCC/OCCSurface.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCSurface.cpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCSurface.cpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -65,6 +65,7 @@
#include "TopTools_DataMapOfShapeInteger.hxx"
#include "TopTools_IndexedDataMapOfShapeListOfShape.hxx"
#include "BRepClass_FaceClassifier.hxx"
+#include "BRepBuilderAPI_Transform.hxx"
// ********** END OpenCascade INCLUDES **********
@@ -714,6 +715,32 @@
}
}
+//----------------------------------------------------------------
+// Function: to update the core Surface
+// for any movement of the body.
+// Author: Jane Hu
+//----------------------------------------------------------------
+CubitStatus OCCSurface::update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf)
+{
+ TopoDS_Shape shape = aBRepTrsf.ModifiedShape(*get_TopoDS_Face());
+ TopoDS_Face surface = TopoDS::Face(shape);
+
+ int k = OCCQueryEngine::instance()->OCCMap->Find(*myTopoDSFace);
+ assert (k > 0 && k <= OCCQueryEngine::instance()->iTotalTBCreated);
+ OCCQueryEngine::instance()->OCCMap->UnBind(*myTopoDSFace);
+ OCCQueryEngine::instance()->OCCMap->Bind(surface, k);
+
+ //set the loops
+ DLIList<OCCLoop *> loops;
+ this->get_loops(loops);
+ for (int i = 1; i <= loops.size(); i++)
+ {
+ OCCLoop *loop = loops.get_and_step();
+ loop->update_OCC_entity(aBRepTrsf);
+ }
+ set_TopoDS_Face(surface);
+}
+
// ********** END PUBLIC FUNCTIONS **********
// ********** BEGIN PROTECTED FUNCTIONS **********
Modified: cgm/trunk/geom/OCC/OCCSurface.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCSurface.hpp 2008-01-07 18:40:57 UTC (rev 1509)
+++ cgm/trunk/geom/OCC/OCCSurface.hpp 2008-01-09 21:10:15 UTC (rev 1510)
@@ -47,6 +47,8 @@
class OCCCoEdge;
class OCCCurve;
class OCCPoint;
+class BRepBuilderAPI_Transform;
+
//// class CubitTransformMatrix;
class OCCSurface : public Surface
@@ -378,6 +380,7 @@
CubitBoolean is_spherical(); //// Not in SurfaceACIS
CubitBoolean is_conical(); //// Not in SurfaceACIS
+ CubitStatus update_OCC_entity( BRepBuilderAPI_Transform &aBRepTrsf);
protected:
private:
1
0
Author: janehu
Date: 2008-01-07 12:40:57 -0600 (Mon, 07 Jan 2008)
New Revision: 1509
Modified:
cgm/trunk/geom/OCC/OCCBody.cpp
cgm/trunk/geom/OCC/OCCBody.hpp
Log:
for moving/reflecting etc. funtions, OCC operation gives a new
object, need to update for body/lump of their underling CompSolid/solid. now crashs at lump->set_TopoDS_Solid(TopoDS::Solid(M(i))); need to investigate.
Modified: cgm/trunk/geom/OCC/OCCBody.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCBody.cpp 2008-01-04 01:42:37 UTC (rev 1508)
+++ cgm/trunk/geom/OCC/OCCBody.cpp 2008-01-07 18:40:57 UTC (rev 1509)
@@ -66,6 +66,7 @@
void OCCBody::lumps(DLIList<Lump*>& my_lumps)
{
+ myLumps.clean_out();
myLumps += my_lumps;
}
@@ -204,13 +205,14 @@
//----------------------------------------------------------------
// Function: reflect
-// Description: reflect the body about a exis
+// Description: reflect the body about an plane given the normal
+// vector.
//
// Author: Jane Hu
//----------------------------------------------------------------
CubitStatus OCCBody::reflect( double reflect_axis_x,
- double reflect_axis_y,
- double reflect_axis_z )
+ double reflect_axis_y,
+ double reflect_axis_z )
{
gp_Pnt aOrigin(0,0,0);
gp_Dir aDir(reflect_axis_x, reflect_axis_y,reflect_axis_z);
@@ -220,11 +222,37 @@
aTrsf.SetMirror(anAx2);
BRepBuilderAPI_Transform aBRepTrsf(*myTopoDSShape, aTrsf);
+ TopoDS_Shape shape = aBRepTrsf.ModifiedShape(*myTopoDSShape);
+
+ update_OCC_entity(shape);
update_bounding_box();
return CUBIT_SUCCESS;
}
//----------------------------------------------------------------
+// Function: private function to update the core compsolid and
+// for any movement of the body.
+// Note: input shape must have the same number of CompSolids
+// as the body's lumps number.
+// Author: Jane Hu
+//----------------------------------------------------------------
+CubitStatus OCCBody::update_OCC_entity( TopoDS_Shape shape)
+{
+ TopoDS_CompSolid compsolid = TopoDS::CompSolid(shape);
+ set_TopoDS_Shape(compsolid);
+
+ //set the lumps
+ DLIList<Lump *> lumps;
+ lumps = this->lumps();
+ TopTools_IndexedMapOfShape M;
+ TopExp::MapShapes(*myTopoDSShape, TopAbs_SOLID, M);
+ for (int i = 0; i < lumps.size(); i++)
+ {
+ OCCLump *lump = CAST_TO(lumps.get_and_step(), OCCLump);
+ lump->set_TopoDS_Solid(TopoDS::Solid(M(i)));
+ }
+}
+//----------------------------------------------------------------
// Function: update_bounding_box
// Description: calculate for bounding box of this OCCBody
//
Modified: cgm/trunk/geom/OCC/OCCBody.hpp
===================================================================
--- cgm/trunk/geom/OCC/OCCBody.hpp 2008-01-04 01:42:37 UTC (rev 1508)
+++ cgm/trunk/geom/OCC/OCCBody.hpp 2008-01-07 18:40:57 UTC (rev 1509)
@@ -61,7 +61,7 @@
//- associated with the object.
TopoDS_CompSolid *get_TopoDS_Shape() {return myTopoDSShape; }
- void set_TopoDS_Shape( TopoDS_CompSolid shape){*myTopoDSShape = shape;}
+ void set_TopoDS_Shape( TopoDS_CompSolid theshape){*myTopoDSShape = theshape;}
virtual CubitStatus get_transforms( CubitTransformMatrix &tfm );
//R CubitStatus
@@ -175,6 +175,7 @@
TopoDS_CompSolid *myTopoDSShape;
CubitBox boundingbox;
+ CubitStatus update_OCC_entity( TopoDS_Shape shape); //update the lumps
};
1
0
Author: janehu
Date: 2008-01-02 13:53:33 -0600 (Wed, 02 Jan 2008)
New Revision: 1503
Modified:
cgm/trunk/geom/OCC/OCCQueryEngine.cpp
Log:
Tested on body's volumn, center point, bounding box, vertex's is-equal, and vertex-vertex distance, refvolumn-vertex distance. fixed a little bug.
Modified: cgm/trunk/geom/OCC/OCCQueryEngine.cpp
===================================================================
--- cgm/trunk/geom/OCC/OCCQueryEngine.cpp 2007-12-31 03:20:53 UTC (rev 1502)
+++ cgm/trunk/geom/OCC/OCCQueryEngine.cpp 2008-01-02 19:53:33 UTC (rev 1503)
@@ -152,8 +152,8 @@
{
instance_ = NULL;
delete OCCMap;
- delete[] OccToCGM;
- delete[] BodyList;
+ delete OccToCGM;
+ while( BodyList->size() ) delete BodyList->pop();
delete[] ShellList;
delete[] WireList;
delete[] SurfaceList;
@@ -669,7 +669,7 @@
distance = distShapeShape.Value();
gp_Pnt pnt1 = distShapeShape.PointOnShape1(1);
- gp_Pnt pnt2 = distShapeShape.PointOnShape2(2);
+ gp_Pnt pnt2 = distShapeShape.PointOnShape2(1);
pos1 = CubitVector(pnt1.X(), pnt1.Y(), pnt1.Z());
pos2 = CubitVector(pnt2.X(), pnt2.Y(), pnt2.Z());
return CUBIT_SUCCESS;
1
0