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