Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : OCCPoint.cpp
3 : : //
4 : : // Purpose :
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Steven J. Owen
9 : : //
10 : : // Creation Date : 07/15/00
11 : : //
12 : : // Owner : Steven J. Owen
13 : : //-------------------------------------------------------------------------
14 : :
15 : : // ********** BEGIN STANDARD INCLUDES **********
16 : : #include <assert.h>
17 : : // ********** END STANDARD INCLUDES **********
18 : :
19 : : // ********** BEGIN CUBIT INCLUDES **********
20 : : #include "OCCPoint.hpp"
21 : : #include "OCCCurve.hpp"
22 : : #include "OCCQueryEngine.hpp"
23 : : #include "CastTo.hpp"
24 : : #include "OCCAttribSet.hpp"
25 : : #include "BRep_Tool.hxx"
26 : : #include "TopExp.hxx"
27 : : #include "TopoDS_Edge.hxx"
28 : : #include "TopoDS.hxx"
29 : : #include "TopTools_ListIteratorOfListOfShape.hxx"
30 : : #include "TopTools_DataMapOfShapeInteger.hxx"
31 : : #include "TopTools_IndexedDataMapOfShapeListOfShape.hxx"
32 : : #include "BRepBuilderAPI_ModifyShape.hxx"
33 : : #include "BRepBuilderAPI_Transform.hxx"
34 : : #include "BRepBuilderAPI_GTransform.hxx"
35 : : #include "BRepAlgoAPI_BooleanOperation.hxx"
36 : : // ********** END CUBIT INCLUDES **********
37 : :
38 : : // ********** BEGIN STATIC DECLARATIONS **********
39 : : // ********** END STATIC DECLARATIONS **********
40 : :
41 : : // ********** BEGIN PUBLIC FUNCTIONS **********
42 : :
43 : : //-------------------------------------------------------------------------
44 : : // Purpose : The constructor with a pointer to the location
45 : : //
46 : : // Special Notes :
47 : : //
48 : : // Creator : Jane Hu
49 : : //
50 : : // Creation Date : 10/08/07
51 : : //-------------------------------------------------------------------------
52 [ # # ]: 0 : OCCPoint::OCCPoint( const CubitVector &location )
53 : : {
54 [ # # ][ # # ]: 0 : gp_Pnt pt = gp_Pnt( location.x(), location.y(), location.z());
[ # # ][ # # ]
55 [ # # ][ # # ]: 0 : TopoDS_Vertex theVertex = BRepBuilderAPI_MakeVertex(pt);
[ # # ]
56 [ # # ][ # # ]: 0 : myTopoDSVertex = new TopoDS_Vertex(theVertex);
[ # # ]
57 : 0 : }
58 : :
59 : : //-------------------------------------------------------------------------
60 : : // Purpose : The constructor with a gp_Pnt point
61 : : //
62 : : // Special Notes :
63 : : //
64 : : // Creator : Jane Hu
65 : : //
66 : : // Creation Date : 10/19/07
67 : : //-------------------------------------------------------------------------
68 [ # # ]: 0 : OCCPoint::OCCPoint( gp_Pnt& thePoint )
69 : : {
70 [ # # ][ # # ]: 0 : TopoDS_Vertex theVertex = BRepBuilderAPI_MakeVertex(thePoint);
[ # # ]
71 [ # # ][ # # ]: 0 : myTopoDSVertex = new TopoDS_Vertex(theVertex);
[ # # ]
72 : 0 : }
73 : :
74 : : //-------------------------------------------------------------------------
75 : : // Purpose : The destructor.
76 : : //
77 : : // Special Notes :
78 : : //
79 : : // Creator : Jane Hu
80 : : //
81 : : // Creation Date : 10/08/07
82 : : //-------------------------------------------------------------------------
83 [ + - ]: 46047 : OCCPoint::~OCCPoint()
84 : : {
85 [ + - ]: 15349 : if (myTopoDSVertex)
86 : : {
87 [ + - ][ + - ]: 15349 : delete (TopoDS_Vertex*)myTopoDSVertex;
[ + - ]
88 : 15349 : myTopoDSVertex = NULL;
89 : : }
90 [ - + ]: 30698 : }
91 : :
92 : 151004 : void OCCPoint::add_curve(OCCCurve* curve)
93 : : {
94 [ - + ]: 151004 : assert(curve != NULL);
95 : 151004 : myCurveList.append_unique(curve);
96 : 151004 : }
97 : :
98 : 73712 : void OCCPoint::remove_curve(OCCCurve* curve)
99 : : {
100 [ - + ]: 73712 : assert(curve != NULL);
101 : 73712 : myCurveList.remove(curve);
102 : 73712 : }
103 : :
104 : 133138 : void OCCPoint::set_TopoDS_Vertex(TopoDS_Vertex vertex)
105 : : {
106 [ + - ][ + + ]: 133138 : if(myTopoDSVertex && vertex.IsEqual(*myTopoDSVertex))
[ + + ]
107 : 26236 : return;
108 [ + - ]: 106902 : if(myTopoDSVertex)
109 : 106902 : myTopoDSVertex->Nullify();
110 : 106902 : *myTopoDSVertex = vertex;
111 : : }
112 : : //-------------------------------------------------------------------------
113 : : // Purpose : The purpose of this function is to append a
114 : : // attribute to the GE. The name is attached to the
115 : : // underlying solid model entity this one points to.
116 : : //
117 : : //
118 : : // Special Notes :
119 : : //
120 : : // Creator : Steve Owen
121 : : //
122 : : // Creation Date : 07/16/00
123 : : //-------------------------------------------------------------------------
124 : 6549 : void OCCPoint::append_simple_attribute_virt(const CubitSimpleAttrib &csa)
125 : 6549 : { OCCAttribSet::append_attribute(csa, *myTopoDSVertex); }
126 : :
127 : : //-------------------------------------------------------------------------
128 : : // Purpose : The purpose of this function is to remove a simple
129 : : // attribute attached to this geometry entity. The name is
130 : : // removed from the underlying BODY this points to.
131 : : //
132 : : // Special Notes :
133 : : //
134 : : // Creator : Steve Owen
135 : : //
136 : : // Creation Date : 07/16/00
137 : : //-------------------------------------------------------------------------
138 : 66536 : void OCCPoint::remove_simple_attribute_virt(const CubitSimpleAttrib &csa)
139 : 66536 : { OCCAttribSet::remove_attribute(csa, *myTopoDSVertex); }
140 : :
141 : : //-------------------------------------------------------------------------
142 : : // Purpose : The purpose of this function is to remove all simple
143 : : // attributes attached to this geometry entity. Also
144 : : // removes lingering GTC attributes.
145 : : //
146 : : //
147 : : // Special Notes :
148 : : //
149 : : // Creator : Steve Owen
150 : : //
151 : : // Creation Date : 07/16/00
152 : : //-------------------------------------------------------------------------
153 : 52786 : void OCCPoint::remove_all_simple_attribute_virt()
154 : : {
155 [ + - ]: 52786 : OCCAttribSet::remove_attribute(CubitSimpleAttrib(), *myTopoDSVertex);
156 : 52786 : }
157 : :
158 : : //-------------------------------------------------------------------------
159 : : // Purpose : The purpose of this function is to get the
160 : : // attributes attached to this geometry entity. The name is
161 : : // attached to the underlying BODY this points to.
162 : : //
163 : : // Special Notes :
164 : : //
165 : : // Creator : Steve Owen
166 : : //
167 : : // Creation Date : 07/16/00
168 : : //-------------------------------------------------------------------------
169 : 32496 : CubitStatus OCCPoint::get_simple_attribute(DLIList<CubitSimpleAttrib>&
170 : : csa_list)
171 : 32496 : { return OCCAttribSet::get_attributes(*myTopoDSVertex,csa_list);
172 : : }
173 : :
174 : 198423 : CubitStatus OCCPoint::get_simple_attribute(const CubitString& name,
175 : : DLIList<CubitSimpleAttrib>& csa_list )
176 : 198423 : { return OCCAttribSet::get_attributes( name, *myTopoDSVertex, csa_list );
177 : : }
178 : :
179 : : //-------------------------------------------------------------------------
180 : : // Purpose : Returns the coordinates of this Point.
181 : : //
182 : : // Special Notes :
183 : : //
184 : : // Creator : Jane Hu
185 : : //
186 : : // Creation Date : 10/08/07
187 : : //-------------------------------------------------------------------------
188 : 420755 : CubitVector OCCPoint::coordinates() const
189 : : {
190 [ + - ]: 420755 : gp_Pnt pt = BRep_Tool::Pnt(*myTopoDSVertex);
191 [ + - ][ + - ]: 420755 : CubitVector p(pt.X(), pt.Y(), pt.Z());
[ + - ][ + - ]
192 : 420755 : return p;
193 : : }
194 : :
195 : 4318 : CubitBoolean OCCPoint::is_equal(OCCPoint & other, double Tol)
196 : : {
197 [ + - ]: 4318 : gp_Pnt pt = BRep_Tool::Pnt(*myTopoDSVertex);
198 [ + - ][ + - ]: 4318 : TopoDS_Vertex otherVertex = *(other.get_TopoDS_Vertex());
199 [ + - ]: 4318 : const gp_Pnt otherPnt = BRep_Tool::Pnt(otherVertex);
200 [ + - ][ + - ]: 4318 : return pt.IsEqual(otherPnt, Tol);
201 : : }
202 : :
203 : 0 : double OCCPoint::distance(OCCPoint & other)
204 : : {
205 [ # # ]: 0 : gp_Pnt pt = BRep_Tool::Pnt(*myTopoDSVertex);
206 [ # # ][ # # ]: 0 : return pt.Distance(BRep_Tool::Pnt(*(other.get_TopoDS_Vertex())));
[ # # ]
207 : : }
208 : :
209 : 0 : double OCCPoint::SquareDistance (OCCPoint & other)
210 : : {
211 [ # # ]: 0 : gp_Pnt pt = BRep_Tool::Pnt(*myTopoDSVertex);
212 [ # # ][ # # ]: 0 : return pt.SquareDistance(BRep_Tool::Pnt(*(other.get_TopoDS_Vertex())));
[ # # ]
213 : : }
214 : : //-------------------------------------------------------------------------
215 : : // Purpose : Get geometry modeling engine: OCCGeometryEngine
216 : : //
217 : : // Special Notes :
218 : : //
219 : : // Creator : Steve Owen
220 : : //
221 : : // Creation Date : 07/16/00
222 : : //-------------------------------------------------------------------------
223 : 6119 : GeometryQueryEngine* OCCPoint::get_geometry_query_engine() const
224 : : {
225 : 6119 : return OCCQueryEngine::instance();
226 : : }
227 : :
228 : : //-------------------------------------------------------------------------
229 : : // Purpose : Get the bounding box of the object.
230 : : //
231 : : // Special Notes :
232 : : //
233 : : // Creator : Steve Owen
234 : : //
235 : : // Creation Date : 07/16/00
236 : : //-------------------------------------------------------------------------
237 : 1453 : CubitBox OCCPoint::bounding_box() const
238 : : {
239 [ + - ]: 1453 : CubitVector temp_vector = this->coordinates();
240 [ + - ]: 1453 : CubitBox temp_box(temp_vector);
241 : 1453 : return temp_box;
242 : : }
243 : :
244 : :
245 : 8766 : void OCCPoint::get_parents_virt( DLIList<TopologyBridge*>& parents )
246 : : {
247 [ + - ][ + + ]: 28975 : CAST_LIST_TO_PARENT(myCurveList, parents);
248 : 8766 : }
249 : 41872 : void OCCPoint::get_children_virt( DLIList<TopologyBridge*>& )
250 : 41872 : { }
251 : :
252 : : //----------------------------------------------------------------
253 : : // Function: to update the core vertex
254 : : // for any movement of the body/surface/curve/vertex.
255 : : // Author: Jane Hu
256 : : //----------------------------------------------------------------
257 : 4596 : void OCCPoint::update_OCC_entity( BRepBuilderAPI_ModifyShape *aBRepTrsf,
258 : : BRepAlgoAPI_BooleanOperation *op)
259 : : {
260 [ - + ]: 4596 : if (this->myMarked == CUBIT_TRUE)
261 : 4596 : return;
262 : :
263 [ - + ][ # # ]: 4596 : assert(aBRepTrsf != NULL || op != NULL);
264 : :
265 [ + - ]: 4596 : TopoDS_Shape shape;
266 [ + - ]: 4596 : if(aBRepTrsf)
267 [ + - ][ + - ]: 4596 : shape = aBRepTrsf->ModifiedShape(*get_TopoDS_Vertex());
[ + - ]
268 : :
269 : : else
270 : : {
271 [ # # ]: 0 : TopTools_ListOfShape shapes;
272 [ # # ][ # # ]: 0 : shapes.Assign(op->Modified(*get_TopoDS_Vertex()));
[ # # ]
273 [ # # ][ # # ]: 0 : if(shapes.Extent() == 0)
274 [ # # ][ # # ]: 0 : shapes.Assign(op->Generated(*get_TopoDS_Vertex()));
[ # # ]
275 [ # # ][ # # ]: 0 : if(shapes.Extent() == 1)
276 [ # # ][ # # ]: 0 : shape = shapes.First();
277 [ # # ][ # # ]: 0 : else if(shapes.Extent() > 1)
278 : : {
279 : : //update all attributes first.
280 [ # # ]: 0 : TopTools_ListIteratorOfListOfShape it;
281 [ # # ]: 0 : it.Initialize(shapes);
282 [ # # ][ # # ]: 0 : shape = shapes.First();
283 : : }
284 [ # # ][ # # ]: 0 : else if(op->IsDeleted(*get_TopoDS_Vertex()))
[ # # ]
285 : : ;
286 : : else
287 [ # # ][ # # ]: 0 : return ;
288 : : }
289 [ + - ][ + - ]: 9192 : TopoDS_Vertex vertex;
[ + - ][ + - ]
290 [ + - ][ + - ]: 4596 : if(!shape.IsNull())
291 [ + - ][ + - ]: 4596 : vertex = TopoDS::Vertex(shape);
292 : :
293 [ + - ][ + - ]: 4596 : OCCQueryEngine::instance()->update_OCC_map(*myTopoDSVertex, vertex);
294 : :
295 [ + - ]: 4596 : set_myMarked(CUBIT_TRUE);
296 [ + - ][ + - ]: 9192 : set_TopoDS_Vertex(vertex);
[ + - ]
297 [ + - ][ + - ]: 6364 : }
298 : :
299 : : // ********** END PUBLIC FUNCTIONS **********
300 : :
301 : : // ********** BEGIN PROTECTED FUNCTIONS **********
302 : : // ********** END PROTECTED FUNCTIONS **********
303 : :
304 : : // ********** BEGIN PRIVATE FUNCTIONS **********
305 : : // ********** END PRIVATE FUNCTIONS **********
306 : :
307 : : // ********** BEGIN HELPER CLASSES **********
308 : : // ********** END HELPER CLASSES **********
309 : :
310 : : // ********** BEGIN EXTERN FUNCTIONS **********
311 : : // ********** END EXTERN FUNCTIONS **********
312 : :
313 : : // ********** BEGIN STATIC FUNCTIONS **********
314 : : // ********** END STATIC FUNCTIONS **********
|