Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : CompositeShell.cpp
3 : : //
4 : : // Purpose : ShellSM used in composite TopologyBridge graph
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Jason Kraftcheck
9 : : //
10 : : // Creation Date : 01/11/02
11 : : //-------------------------------------------------------------------------
12 : :
13 : : #include "CompositeShell.hpp"
14 : : #include "CompositeCoSurf.hpp"
15 : : #include "CompositeSurface.hpp"
16 : : #include "VirtualQueryEngine.hpp"
17 : : #include "CompositeLump.hpp"
18 : :
19 : 0 : CompositeShell::CompositeShell()
20 : 0 : : myLump(0), lumpNext(0), firstCoSurf(0)
21 : : {
22 : 0 : }
23 : :
24 : 0 : CompositeShell::~CompositeShell()
25 : : {
26 : : // if( myLump )
27 : : // myLump->remove( this );
28 : :
29 [ # # ]: 0 : while( firstCoSurf )
30 : : {
31 : 0 : CompositeCoSurf* cosurf = firstCoSurf;
32 [ # # ]: 0 : remove( cosurf );
33 [ # # ][ # # ]: 0 : if( cosurf->get_surface() )
34 [ # # ][ # # ]: 0 : cosurf->get_surface()->remove( cosurf );
35 [ # # ][ # # ]: 0 : delete cosurf;
36 : : }
37 : :
38 [ # # ]: 0 : assert( !myLump );
39 [ # # ]: 0 : }
40 : :
41 : 0 : CompositeCoSurf* CompositeShell::next_co_surf( CompositeCoSurf* prev ) const
42 : : {
43 [ # # ]: 0 : if (0 == prev)
44 : 0 : return firstCoSurf;
45 [ # # ]: 0 : else if (this == prev->myShell)
46 : 0 : return prev->shellNext;
47 : : else
48 : 0 : return 0;
49 : : }
50 : :
51 : 0 : CubitStatus CompositeShell::add( CompositeCoSurf* cosurf )
52 : : {
53 [ # # ]: 0 : if( cosurf->myShell )
54 : 0 : return CUBIT_FAILURE;
55 : :
56 : 0 : cosurf->shellNext = firstCoSurf;
57 : 0 : firstCoSurf = cosurf;
58 : 0 : cosurf->myShell = this;
59 : :
60 : 0 : return CUBIT_SUCCESS;
61 : : }
62 : :
63 : 0 : CubitStatus CompositeShell::remove( CompositeCoSurf* cosurf )
64 : : {
65 [ # # ]: 0 : if( cosurf->myShell != this )
66 : 0 : return CUBIT_FAILURE;
67 : :
68 [ # # ]: 0 : if( firstCoSurf == cosurf )
69 : 0 : firstCoSurf = cosurf->shellNext;
70 : : else
71 : : {
72 : 0 : CompositeCoSurf* prev = firstCoSurf;
73 [ # # ][ # # ]: 0 : while( prev && prev->shellNext != cosurf )
74 : 0 : prev = prev->shellNext;
75 [ # # ]: 0 : assert( prev != 0 );
76 : 0 : prev->shellNext = cosurf->shellNext;
77 : : }
78 : :
79 : 0 : cosurf->myShell = 0;
80 : 0 : cosurf->shellNext = 0;
81 : 0 : return CUBIT_SUCCESS;
82 : : }
83 : :
84 : :
85 : 0 : CompositeCoSurf* CompositeShell::add( CompositeSurface* surface,
86 : : CubitSense sense )
87 : : {
88 [ # # ]: 0 : CompositeCoSurf* cosurf = new CompositeCoSurf( sense );
89 [ # # ][ # # ]: 0 : if( !surface->add( cosurf ) || !add( cosurf ) )
[ # # ]
90 : : {
91 [ # # ]: 0 : delete cosurf;
92 : 0 : cosurf = 0;
93 : : }
94 : 0 : return cosurf;
95 : : }
96 : :
97 : 0 : CompositeCoSurf* CompositeShell::find_first( const CompositeSurface* surf ) const
98 : : {
99 : 0 : CompositeCoSurf* cosurf = firstCoSurf;
100 [ # # ][ # # ]: 0 : while( cosurf && cosurf->get_surface() != surf )
[ # # ]
101 : 0 : cosurf = cosurf->shellNext;
102 : 0 : return cosurf;
103 : : }
104 : :
105 : 0 : CompositeCoSurf* CompositeShell::find_next( const CompositeCoSurf* prev ) const
106 : : {
107 : 0 : CompositeCoSurf* cosurf = prev->shellNext;
108 [ # # ][ # # ]: 0 : while( cosurf && cosurf->get_surface() != prev->get_surface() )
[ # # ]
109 : 0 : cosurf = cosurf->shellNext;
110 : 0 : return cosurf;
111 : : }
112 : :
113 : 0 : CubitSense CompositeShell::find_sense( const CompositeSurface* surf ) const
114 : : {
115 : 0 : CompositeCoSurf* first = find_first( surf );
116 [ # # ]: 0 : if( !first )
117 : 0 : return CUBIT_UNKNOWN;
118 : :
119 : 0 : CompositeCoSurf* next = first;
120 [ # # ]: 0 : while( (next = find_next( next )) )
121 [ # # ]: 0 : if( next->sense() != first->sense() )
122 : 0 : return CUBIT_UNKNOWN;
123 : :
124 : 0 : return first->sense();
125 : : }
126 : :
127 : :
128 : :
129 : :
130 : :
131 : :
132 : 0 : void CompositeShell::get_parents_virt( DLIList<TopologyBridge*>& parents )
133 [ # # ][ # # ]: 0 : { if( myLump ) parents.append( static_cast<TopologyBridge*>(myLump) ); }
134 : :
135 : 0 : void CompositeShell::get_children_virt( DLIList<TopologyBridge*>& children )
136 : : {
137 [ # # ]: 0 : for( CompositeCoSurf* c = firstCoSurf; c; c = c->next_in_shell() )
138 [ # # ]: 0 : children.append( c->get_surface() );
139 : 0 : }
140 : :
141 : :
142 : :
143 : : //-------------------------------------------------------------------------
144 : : // Purpose : Get CompositeEngine
145 : : //
146 : : // Special Notes :
147 : : //
148 : : // Creator : Jason Kraftcheck
149 : : //
150 : : // Creation Date : 01/11/02
151 : : //-------------------------------------------------------------------------
152 : 0 : GeometryQueryEngine* CompositeShell::get_geometry_query_engine() const
153 : 0 : { return VirtualQueryEngine::instance(); }
154 : :
155 : :
156 : : //-------------------------------------------------------------------------
157 : : // Purpose : Attribute functions
158 : : //
159 : : // Special Notes :
160 : : //
161 : : // Creator : Jason Kraftcheck
162 : : //
163 : : // Creation Date : 01/11/02
164 : : //-------------------------------------------------------------------------
165 : 0 : void CompositeShell::append_simple_attribute_virt( const CubitSimpleAttrib& )
166 : 0 : { }
167 : 0 : void CompositeShell::remove_simple_attribute_virt( const CubitSimpleAttrib& )
168 : 0 : { }
169 : 0 : void CompositeShell::remove_all_simple_attribute_virt()
170 : 0 : { }
171 : 0 : CubitStatus CompositeShell::get_simple_attribute( DLIList<CubitSimpleAttrib>& )
172 : 0 : { return CUBIT_FAILURE; }
173 : 0 : CubitStatus CompositeShell::get_simple_attribute(
174 : : const CubitString& , DLIList<CubitSimpleAttrib>& )
175 : 0 : { return CUBIT_FAILURE; }
176 : :
177 : :
178 : : //-------------------------------------------------------------------------
179 : : // Purpose : Debug output
180 : : //
181 : : // Special Notes :
182 : : //
183 : : // Creator : Jason Kraftcheck
184 : : //
185 : : // Creation Date : 09/16/04
186 : : //-------------------------------------------------------------------------
187 : 0 : void CompositeShell::print_debug_info( const char* prefix )
188 : : {
189 [ # # ]: 0 : if( prefix == 0 ) prefix = "";
190 [ # # ][ # # ]: 0 : PRINT_INFO("%sCompositeShell @ %p : \n", prefix, (void*)this );
191 : :
192 : 0 : char* new_prefix = new char[strlen(prefix)+3];
193 : 0 : strcpy( new_prefix, prefix );
194 : 0 : strcat( new_prefix, " " );
195 : :
196 : 0 : CompositeCoSurf* cosurf = first_co_surf();
197 [ # # ]: 0 : if( !cosurf )
198 [ # # ][ # # ]: 0 : PRINT_INFO("%sNo Surfaces!!\n", prefix);
199 [ # # ]: 0 : else for (; cosurf; cosurf = next_co_surf( cosurf ))
200 : 0 : cosurf->print_debug_info( new_prefix );
201 : :
202 [ # # ]: 0 : delete [] new_prefix;
203 : 0 : }
|