Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : RefVertex.cpp
3 : : //
4 : : // Purpose : This file contains the implementation of the class
5 : : // RefVertex. A RefVertex is a TopologyEntity and represents
6 : : // a point or vertex in the topology of the Model.
7 : : //
8 : : // Special Notes :
9 : : //
10 : : // Creator : Xuechen Liu
11 : : //
12 : : // Creation Date : 07/11/96
13 : : //
14 : : // Owner : Malcolm J. Panthaki
15 : : //-------------------------------------------------------------------------
16 : :
17 : :
18 : : #include <assert.h>
19 : :
20 : : #include "CubitDefines.h"
21 : : #include "GeometryDefines.h"
22 : :
23 : : #include "RefEntityFactory.hpp"
24 : : #include "GeometryQueryTool.hpp"
25 : : #include "GeometryQueryEngine.hpp"
26 : : #include "ModelQueryEngine.hpp"
27 : :
28 : : #include "RefVolume.hpp"
29 : : #include "RefFace.hpp"
30 : : #include "RefEdge.hpp"
31 : : #include "RefVertex.hpp"
32 : : #include "Point.hpp"
33 : : #include "DLIList.hpp"
34 : : #include "CastTo.hpp"
35 : : #include "ToolData.hpp"
36 : : #include "CoVertex.hpp"
37 : :
38 : : //-------------------------------------------------------------------------
39 : : // Purpose : Constructor with a pointer to a Point
40 : : //
41 : : // Special Notes :
42 : : //
43 : : // Creator : Xuechen Liu
44 : : //
45 : : // Creation Date : 07/11/96
46 : : //-------------------------------------------------------------------------
47 : 48966 : RefVertex::RefVertex(TBPoint* pointPtr)
48 : : {
49 : : // Set the GeometryEntity pointer
50 [ + - ]: 24483 : if (pointPtr != NULL)
51 : : {
52 [ + - ]: 24483 : set_geometry_entity_ptr(pointPtr) ;
53 : : }
54 : : else
55 : : {
56 [ # # ][ # # ]: 0 : PRINT_ERROR("In the RefVertex(TBPoint*) constructor\n");
[ # # ][ # # ]
57 [ # # ][ # # ]: 0 : PRINT_ERROR(" Input TBPoint pointer is NULL\n");
[ # # ][ # # ]
58 : 0 : assert(CUBIT_FALSE);
59 : : }
60 : :
61 : : // Initialize the member data
62 [ + - ]: 24483 : initialize();
63 : 24483 : }
64 : :
65 : : //-------------------------------------------------------------------------
66 : : // Purpose : The destructor.
67 : : //
68 : : // Special Notes :
69 : : //
70 : : // Creator : Malcolm J. Panthaki
71 : : //
72 : : // Creation Date : 11/06/96
73 : : //-------------------------------------------------------------------------
74 : 45669 : RefVertex::~RefVertex()
75 : : {
76 [ - + ]: 30446 : }
77 : :
78 : : //-------------------------------------------------------------------------
79 : : // Purpose : Return a pointer to the point associated with a vertex.
80 : : //
81 : : // Special Notes :
82 : : //
83 : : // Creator : Xuechen Liu
84 : : //
85 : : // Creation Date : 08/02/96
86 : : //-------------------------------------------------------------------------
87 : 550 : TBPoint* RefVertex::get_point_ptr()
88 : : {
89 [ - + ]: 550 : return CAST_TO(get_geometry_entity_ptr(), TBPoint) ;
90 : : }
91 : :
92 : 189030 : const TBPoint* RefVertex::get_point_ptr() const
93 : : {
94 [ + - ]: 189030 : return CAST_TO(get_geometry_entity_ptr(), TBPoint) ;
95 : : }
96 : :
97 : :
98 : : //-------------------------------------------------------------------------
99 : : // Purpose : Returns the global coordinates of this RefVertex.
100 : : //
101 : : // Special Notes :
102 : : //
103 : : // Creator : Malcolm J. Panthaki
104 : : //
105 : : // Creation Date : 09/25/96
106 : : //-------------------------------------------------------------------------
107 : 189030 : CubitVector RefVertex::coordinates() const
108 : : {
109 : 189030 : const TBPoint* point_ptr = get_point_ptr();
110 : :
111 [ + - ]: 189030 : if (point_ptr != NULL)
112 : : {
113 : 189030 : return point_ptr->coordinates();
114 : : }
115 : : else
116 : : {
117 [ # # ]: 0 : PRINT_ERROR("In RefVertex::coordinates\n"
118 : : " RefVertex %d has no GeometryEntity attached to it.\n"
119 [ # # ]: 0 : " THIS IS A BUG - PLEASE REPORT IT.\n", id());
120 [ # # ]: 0 : assert( point_ptr != NULL );
121 : 189030 : return CubitVector();
122 : : }
123 : : }
124 : :
125 : : //-------------------------------------------------------------------------
126 : : // Purpose : Return the "center point" of the RefVertex -- its
127 : : // coordinates.
128 : : //
129 : : // Special Notes :
130 : : //
131 : : // Creator : Raikanta Sahu
132 : : //
133 : : // Creation Date : 10/30/96
134 : : //-------------------------------------------------------------------------
135 : 0 : CubitVector RefVertex::center_point()
136 : : {
137 : 0 : return this->coordinates();
138 : : }
139 : 0 : void RefVertex::common_ref_edges(RefVertex *other_vertex,
140 : : DLIList <RefEdge*> &common_ref_edges,
141 : : RefFace *owning_face)
142 : : {
143 : : //- returns an edge sharing the other vertex and owned by owning_face
144 : : //- (if non-NULL)
145 : : //- The edge must have this vertex and other_vertex as its
146 : : //- start and end vertices.
147 [ # # ]: 0 : DLIList<RefEntity*> temp_list;
148 [ # # ][ # # ]: 0 : join(other_vertex, temp_list);
149 : :
150 : : int i;
151 [ # # ][ # # ]: 0 : for (i = temp_list.size(); i > 0; i--)
152 : : {
153 [ # # ][ # # ]: 0 : RefEdge *common_edge = CAST_TO(temp_list.get(), RefEdge);
154 : : //This extra 'if' block is needed in case other_vertex == this
155 [ # # ][ # # ]: 0 : if (common_edge &&
[ # # ]
156 [ # # ][ # # ]: 0 : ((common_edge->start_vertex() == other_vertex &&
157 [ # # ][ # # ]: 0 : common_edge->end_vertex() == this) ||
158 [ # # ][ # # ]: 0 : ( common_edge->start_vertex() == this &&
159 [ # # ]: 0 : common_edge->end_vertex() == other_vertex )))
160 : : {
161 [ # # ][ # # ]: 0 : if (common_edge && (!owning_face || common_edge->is_child(owning_face)))
[ # # ][ # # ]
[ # # ][ # # ]
162 [ # # ]: 0 : common_ref_edges.append(common_edge);
163 : : }
164 [ # # ]: 0 : temp_list.step();
165 : : }
166 [ # # ]: 0 : return;
167 : : }
168 : :
169 : 0 : RefEdge *RefVertex::common_ref_edge(RefVertex *other_vertex,
170 : : RefFace *owning_face)
171 : : {
172 : : //- returns an edge sharing the other vertex and owned by owning_face
173 : : //- (if non-NULL)
174 : : //- The edge must have this vertex and other_vertex as its
175 : : //- start and end vertices.
176 [ # # ]: 0 : DLIList<RefEntity*> temp_list;
177 [ # # ][ # # ]: 0 : join(other_vertex, temp_list);
178 : :
179 : : int i;
180 [ # # ][ # # ]: 0 : for (i = temp_list.size(); i > 0; i--) {
181 [ # # ][ # # ]: 0 : RefEdge *common_edge = CAST_TO(temp_list.get(), RefEdge);
182 : :
183 [ # # ]: 0 : if( NULL == common_edge )
184 : 0 : continue;
185 : :
186 : : //This extra 'if' block is needed in case other_vertex == this
187 [ # # ][ # # ]: 0 : if ( ( common_edge->start_vertex() == other_vertex &&
[ # # ]
188 [ # # ][ # # ]: 0 : common_edge->end_vertex() == this) ||
[ # # ]
189 [ # # ][ # # ]: 0 : ( common_edge->start_vertex() == this &&
190 [ # # ]: 0 : common_edge->end_vertex() == other_vertex ) )
191 : : {
192 [ # # ][ # # ]: 0 : if (common_edge && (!owning_face || common_edge->is_child(owning_face)))
[ # # ][ # # ]
[ # # ][ # # ]
193 : 0 : return common_edge;
194 : : else
195 [ # # ]: 0 : temp_list.step();
196 : : }
197 : : else
198 [ # # ]: 0 : temp_list.step();
199 : : }
200 : :
201 [ # # ]: 0 : return NULL;
202 : : }
203 : :
204 : : //-------------------------------------------------------------------------
205 : : // Purpose : Spatially compare two RefVertexes, notification is made if
206 : : // the flag notify_ref_entity is set.
207 : : //
208 : : // Special Notes :
209 : : //
210 : : // Creator : David White
211 : : //
212 : : // Creation Date : 04/08/97
213 : : //-------------------------------------------------------------------------
214 : 3614 : CubitBoolean RefVertex::about_spatially_equal(
215 : : RefVertex* ref_vertex_ptr_2,
216 : : double tolerance_factor,
217 : : CubitBoolean notify_ref_entity )
218 : : {
219 [ + + ]: 3614 : if( this == ref_vertex_ptr_2 )
220 : : {
221 [ - + ]: 80 : if (notify_ref_entity)
222 [ # # ]: 0 : remove_compare_data();
223 : 80 : return CUBIT_TRUE;
224 : : }
225 : :
226 [ + - ]: 3534 : const CubitVector vertex_1_position = this->coordinates();
227 [ + - ]: 3534 : const CubitVector vertex_2_position = ref_vertex_ptr_2->coordinates();
228 [ + + ]: 3534 : if (!GeometryQueryTool::instance()-> about_spatially_equal(
229 [ + - ][ + - ]: 3534 : vertex_1_position, vertex_2_position, tolerance_factor))
230 : 2612 : return CUBIT_FALSE;
231 : :
232 [ - + ]: 922 : if ( notify_ref_entity == CUBIT_TRUE )
233 [ # # ][ # # ]: 0 : this->comparison_found(ref_vertex_ptr_2);
234 : :
235 : 3614 : return CUBIT_TRUE;
236 : : }
237 : :
238 : : // ********** END PUBLIC FUNCTIONS **********
239 : :
240 : : // ********** BEGIN PROTECTED FUNCTIONS **********
241 : : // ********** END PROTECTED FUNCTIONS **********
242 : :
243 : : // ********** BEGIN PRIVATE FUNCTIONS **********
244 : :
245 : : //-------------------------------------------------------------------------
246 : : // Purpose : Initializes member data
247 : : //
248 : : // Special Notes :
249 : : //
250 : : // Creator : Malcolm J. Panthaki
251 : : //
252 : : // Creation Date : 10/07/96
253 : : //-------------------------------------------------------------------------
254 : 24483 : void RefVertex::initialize()
255 : : {
256 : 24483 : GeometryEntity* geom_ptr = get_geometry_entity_ptr();
257 : 24483 : int saved_id = geom_ptr->get_saved_id();
258 [ - + ][ # # ]: 24483 : if ( !saved_id || RefEntityFactory::instance()->get_ref_vertex(saved_id) )
[ + - ]
259 : : {
260 : 24483 : saved_id = RefEntityFactory::instance()->next_ref_vertex_id();
261 : 24483 : geom_ptr->set_saved_id(saved_id);
262 : : }
263 : 24483 : entityId = saved_id;
264 : :
265 : : // Initialize some attributes
266 : :
267 : : // read and initialize attributes
268 : 24483 : auto_read_cubit_attrib();
269 : 24483 : auto_actuate_cubit_attrib();
270 : :
271 : : // Assign a default entity name
272 : 24483 : assign_default_name();
273 : :
274 : 24483 : }
275 : :
276 : 864 : void RefVertex::get_parent_ref_entities(DLIList<RefEntity*>& entity_list)
277 : : {
278 : :
279 : : // First get the type of RefEntity that is a child of "this" one
280 [ + - ]: 864 : DagType parent_type = get_parent_ref_entity_type();;
281 : :
282 [ + - ]: 864 : DLIList<TopologyEntity*> tempList ;
283 : :
284 : : CubitStatus result = ModelQueryEngine::instance()->
285 [ + - ][ + - ]: 864 : query_model( *this, parent_type, tempList );
286 [ - + ]: 864 : if (result == CUBIT_FAILURE)
287 : : {
288 [ # # ][ # # ]: 0 : PRINT_ERROR("In RefEntity::get_parent_ref_entities\n");
[ # # ][ # # ]
289 [ # # ][ # # ]: 0 : PRINT_ERROR(" Query failed for unknown reason.\n");
[ # # ][ # # ]
290 : 864 : return;
291 : : }
292 : :
293 [ + - ]: 864 : entity_list.clean_out();
294 [ + - ][ + + ]: 3416 : for(int i=0; i<tempList.size(); i++)
[ + - ][ + - ]
295 : : {
296 [ + - ][ + - ]: 2552 : entity_list.append(static_cast<ParentType*>(tempList[i]));
[ + - ]
297 : 864 : }
298 [ + - ][ + - ]: 6540 : }
|