Branch data Line data Source code
1 : : #include "CompositeLoop.hpp"
2 : : #include "DLIList.hpp"
3 : :
4 : : #include "CompositeSurface.hpp"
5 : : #include "CompositeCoEdge.hpp"
6 : : #include "VirtualQueryEngine.hpp"
7 : :
8 : : //-------------------------------------------------------------------------
9 : : // Purpose : Constructor
10 : : //
11 : : // Special Notes :
12 : : //
13 : : // Creator : Jason Kraftcheck
14 : : //
15 : : // Creation Date : 01/11/02
16 : : //-------------------------------------------------------------------------
17 : 0 : CompositeLoop::CompositeLoop()
18 : 0 : : mySurface(0), myCoedge(0), loopNext(0), numCoedges(0)
19 : : {
20 : 0 : }
21 : :
22 : : //-------------------------------------------------------------------------
23 : : // Purpose : Destructor
24 : : //
25 : : // Special Notes :
26 : : //
27 : : // Creator : Jason Kraftcheck
28 : : //
29 : : // Creation Date : 01/11/02
30 : : //-------------------------------------------------------------------------
31 : 0 : CompositeLoop::~CompositeLoop()
32 : : {
33 [ # # ]: 0 : if( mySurface )
34 : : {
35 [ # # ]: 0 : mySurface->remove( this );
36 : 0 : mySurface = 0;
37 : : }
38 : :
39 [ # # ]: 0 : CubitStatus s = remove_all_coedges();
40 [ # # ]: 0 : assert( s );
41 [ # # ]: 0 : if (CUBIT_SUCCESS != s) {
42 [ # # ][ # # ]: 0 : PRINT_ERROR("Failed to remove all coedges.\n");
[ # # ][ # # ]
43 : : }
44 [ # # ]: 0 : }
45 : :
46 : : //-------------------------------------------------------------------------
47 : : // Purpose : insert a child coedge
48 : : //
49 : : // Special Notes :
50 : : //
51 : : // Creator : Jason Kraftcheck
52 : : //
53 : : // Creation Date : 03/23/02
54 : : //-------------------------------------------------------------------------
55 : 0 : CubitStatus CompositeLoop::insert_after( CompositeCoEdge* insert,
56 : : CompositeCoEdge* after )
57 : : {
58 [ # # ]: 0 : if( insert->myLoop != 0 )
59 : 0 : return CUBIT_FAILURE;
60 : :
61 [ # # ]: 0 : if( numCoedges == 0 )
62 : : {
63 [ # # ]: 0 : if( after )
64 : 0 : return CUBIT_FAILURE;
65 : :
66 : 0 : insert->nextCoedge = insert;
67 : 0 : insert->prevCoedge = insert;
68 : 0 : myCoedge = insert;
69 : : }
70 : : else
71 : : {
72 [ # # ][ # # ]: 0 : if( !after || after->myLoop != this )
73 : 0 : return CUBIT_FAILURE;
74 : :
75 : 0 : insert->prevCoedge = after;
76 : 0 : insert->nextCoedge = after->nextCoedge;
77 : 0 : insert->nextCoedge->prevCoedge = insert;
78 : 0 : insert->prevCoedge->nextCoedge = insert;
79 : : }
80 : :
81 : 0 : insert->myLoop = this;
82 : 0 : numCoedges++;
83 : 0 : return CUBIT_SUCCESS;
84 : : }
85 : 0 : CubitStatus CompositeLoop::insert_before( CompositeCoEdge* insert,
86 : : CompositeCoEdge* before )
87 : : {
88 [ # # ]: 0 : if( insert->myLoop != 0 )
89 : 0 : return CUBIT_FAILURE;
90 : :
91 [ # # ]: 0 : if( numCoedges == 0 )
92 : : {
93 [ # # ]: 0 : if( before )
94 : 0 : return CUBIT_FAILURE;
95 : :
96 : 0 : insert->nextCoedge = insert;
97 : 0 : insert->prevCoedge = insert;
98 : 0 : myCoedge = insert;
99 : : }
100 : : else
101 : : {
102 [ # # ][ # # ]: 0 : if( !before || before->myLoop != this )
103 : 0 : return CUBIT_FAILURE;
104 : :
105 : 0 : insert->nextCoedge = before;
106 : 0 : insert->prevCoedge = before->prevCoedge;
107 : 0 : insert->nextCoedge->prevCoedge = insert;
108 : 0 : insert->prevCoedge->nextCoedge = insert;
109 : : }
110 : :
111 : 0 : insert->myLoop = this;
112 : 0 : numCoedges++;
113 : 0 : return CUBIT_SUCCESS;
114 : : }
115 : :
116 : : //-------------------------------------------------------------------------
117 : : // Purpose : remove a child coedge
118 : : //
119 : : // Special Notes :
120 : : //
121 : : // Creator : Jason Kraftcheck
122 : : //
123 : : // Creation Date : 03/23/02
124 : : //-------------------------------------------------------------------------
125 : 0 : CubitStatus CompositeLoop::remove( CompositeCoEdge* coedge )
126 : : {
127 [ # # ]: 0 : if( coedge->myLoop != this )
128 : 0 : return CUBIT_FAILURE;
129 : :
130 [ # # ]: 0 : if( numCoedges == 1 )
131 : : {
132 [ # # ]: 0 : assert( coedge->nextCoedge == coedge &&
133 [ # # ]: 0 : coedge->prevCoedge == coedge );
134 : 0 : myCoedge = 0;
135 : : }
136 : : else
137 : : {
138 : 0 : coedge->nextCoedge->prevCoedge = coedge->prevCoedge;
139 : 0 : coedge->prevCoedge->nextCoedge = coedge->nextCoedge;
140 [ # # ]: 0 : if( myCoedge == coedge )
141 : 0 : myCoedge = coedge->nextCoedge;
142 : : }
143 : :
144 : 0 : numCoedges--;
145 : 0 : coedge->myLoop = 0;
146 : 0 : coedge->nextCoedge = 0;
147 : 0 : coedge->prevCoedge = 0;
148 : :
149 : 0 : return CUBIT_SUCCESS;
150 : : }
151 : :
152 : :
153 : :
154 : :
155 : : //-------------------------------------------------------------------------
156 : : // Purpose : remove (and return) all coedges
157 : : //
158 : : // Special Notes :
159 : : //
160 : : // Creator : Jason Kraftcheck
161 : : //
162 : : // Creation Date : 03/24/02
163 : : //-------------------------------------------------------------------------
164 : 0 : CubitStatus CompositeLoop::remove_all_coedges( DLIList<CompositeCoEdge*>* list )
165 : : {
166 [ # # ]: 0 : while( myCoedge )
167 : : {
168 [ # # ]: 0 : if( list )
169 : 0 : list->append( myCoedge );
170 : 0 : remove( myCoedge );
171 : : }
172 : :
173 : 0 : return CUBIT_SUCCESS;
174 : : }
175 : :
176 : : //-------------------------------------------------------------------------
177 : : // Purpose : The purpose of this function is to see if a loop is an external
178 : : // or internal loop of a surface.
179 : : //
180 : : // Special Notes :
181 : : //
182 : : // Creator : Jonathan Bugman
183 : : //
184 : : // Creation Date : 9/9/2008
185 : : //-------------------------------------------------------------------------
186 : 0 : CubitBoolean CompositeLoop::is_external()
187 : : {
188 [ # # ][ # # ]: 0 : PRINT_ERROR( "This command is not supported with this engine.\n");
189 : 0 : return CUBIT_FAILURE;
190 : : }
191 : :
192 : 0 : LoopType CompositeLoop::loop_type()
193 : : {
194 : 0 : return LOOP_TYPE_UNKNOWN;
195 : : }
196 : :
197 : : //-------------------------------------------------------------------------
198 : : // Purpose : get parent bridges
199 : : //
200 : : // Special Notes : pure virtual in TopologyBridge
201 : : //
202 : : // Creator : Jason Kraftcheck
203 : : //
204 : : // Creation Date : 01/11/02
205 : : //-------------------------------------------------------------------------
206 : 0 : void CompositeLoop::get_parents_virt( DLIList<TopologyBridge*>& parents )
207 [ # # ][ # # ]: 0 : { if( mySurface ) parents.append( mySurface ); }
208 : :
209 : :
210 : : //-------------------------------------------------------------------------
211 : : // Purpose : get child bridges
212 : : //
213 : : // Special Notes : pure virtual in TopologyBridge
214 : : //
215 : : // Creator : Jason Kraftcheck
216 : : //
217 : : // Creation Date : 01/11/02
218 : : //-------------------------------------------------------------------------
219 : 0 : void CompositeLoop::get_children_virt( DLIList<TopologyBridge*>& children )
220 : : {
221 : 0 : CompositeCoEdge* coedge = myCoedge;
222 : :
223 [ # # # # ]: 0 : if( coedge ) do
224 : : {
225 [ # # ]: 0 : children.append( coedge );
226 : 0 : coedge = next_coedge( coedge );
227 : 0 : } while( coedge != myCoedge );
228 : 0 : }
229 : :
230 : :
231 : : //-------------------------------------------------------------------------
232 : : // Purpose : Get CompositeEngine
233 : : //
234 : : // Special Notes :
235 : : //
236 : : // Creator : Jason Kraftcheck
237 : : //
238 : : // Creation Date : 01/11/02
239 : : //-------------------------------------------------------------------------
240 : 0 : GeometryQueryEngine* CompositeLoop::get_geometry_query_engine() const
241 : 0 : { return VirtualQueryEngine::instance(); }
242 : :
243 : : //-------------------------------------------------------------------------
244 : : // Purpose : Attribute functions
245 : : //
246 : : // Special Notes :
247 : : //
248 : : // Creator : Jason Kraftcheck
249 : : //
250 : : // Creation Date : 01/11/02
251 : : //-------------------------------------------------------------------------
252 : 0 : void CompositeLoop::append_simple_attribute_virt( const CubitSimpleAttrib& )
253 : 0 : { }
254 : 0 : void CompositeLoop::remove_simple_attribute_virt( const CubitSimpleAttrib& )
255 : 0 : { }
256 : 0 : void CompositeLoop::remove_all_simple_attribute_virt()
257 : 0 : { }
258 : 0 : CubitStatus CompositeLoop::get_simple_attribute( DLIList<CubitSimpleAttrib>& )
259 : 0 : { return CUBIT_FAILURE; }
260 : 0 : CubitStatus CompositeLoop::get_simple_attribute(
261 : : const CubitString& , DLIList<CubitSimpleAttrib>& )
262 : 0 : { return CUBIT_FAILURE; }
263 : :
264 : :
265 : :
266 : : //-------------------------------------------------------------------------
267 : : // Purpose : Reverse order and sense of coedges
268 : : //
269 : : // Special Notes :
270 : : //
271 : : // Creator : Jason Kraftcheck
272 : : //
273 : : // Creation Date : 03/17/02
274 : : //-------------------------------------------------------------------------
275 : 0 : void CompositeLoop::reverse(bool b_reverse_coedges)
276 : : {
277 : 0 : CompositeCoEdge* coedge = myCoedge;
278 [ # # ][ # # ]: 0 : if( coedge ) do
279 : : {
280 : 0 : CompositeCoEdge* temp = coedge->nextCoedge;
281 : 0 : coedge->nextCoedge = coedge->prevCoedge;
282 : 0 : coedge->prevCoedge = temp;
283 [ # # ]: 0 : if (b_reverse_coedges) coedge->reverse();
284 : 0 : coedge = temp;
285 : 0 : } while( coedge != myCoedge );
286 : 0 : }
287 : :
288 : :
289 : 0 : void CompositeLoop::print_debug_info( const char* line_prefix )
290 : : {
291 [ # # ]: 0 : if( line_prefix == 0 )
292 : 0 : line_prefix = "";
293 : :
294 : 0 : char* new_prefix = new char[strlen(line_prefix)+3];
295 : 0 : strcpy( new_prefix, line_prefix );
296 : 0 : strcat( new_prefix, " " );
297 : :
298 [ # # ][ # # ]: 0 : PRINT_INFO("%sCompositeLoop @ %p : \n", line_prefix, (void*)this );
299 : 0 : CompositeCoEdge* coedge = first_coedge();
300 [ # # ]: 0 : if( !coedge )
301 [ # # ][ # # ]: 0 : PRINT_INFO("%s No CoEdges!!\n", line_prefix);
302 [ # # ]: 0 : else do
303 : : {
304 : 0 : coedge->print_debug_info( new_prefix );
305 : 0 : coedge = next_coedge( coedge );
306 : 0 : } while( coedge != first_coedge() );
307 : :
308 [ # # ]: 0 : delete [] new_prefix;
309 : 0 : }
310 : :
|