Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : CompositePoint.cpp
3 : : //
4 : : // Purpose : Point decorator for composite topology
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Jason Kraftcheck
9 : : //
10 : : // Creation Date : 03/11/02
11 : : //-------------------------------------------------------------------------
12 : :
13 : : #include "CompositePoint.hpp"
14 : : #include "CompositeEngine.hpp"
15 : : #include "VirtualQueryEngine.hpp"
16 : :
17 : 0 : CompositePoint::CompositePoint( TBPoint* real_pt )
18 : 0 : : HadBridgeRemoved(0), firstCurve(0), realPoint(real_pt), stitchNext(0)
19 : : {
20 [ # # ][ # # ]: 0 : if( real_pt->owner() )
21 [ # # ][ # # ]: 0 : real_pt->owner()->swap_bridge( real_pt, this, false );
22 [ # # ]: 0 : real_pt->owner(this);
23 : 0 : }
24 : :
25 [ # # ]: 0 : CompositePoint::~CompositePoint()
26 : : {
27 : : // remove from all curves
28 [ # # ]: 0 : while( firstCurve )
29 : : {
30 : 0 : CompositeCurve* curve = firstCurve;
31 [ # # ][ # # ]: 0 : if( curve->start_point() == this )
32 [ # # ]: 0 : curve->start_point(0);
33 [ # # ][ # # ]: 0 : if( curve->end_point() == this )
34 [ # # ]: 0 : curve->end_point(0);
35 [ # # ]: 0 : assert(firstCurve != curve);
36 : : }
37 : :
38 [ # # ]: 0 : if( stitchNext )
39 : : {
40 : : // unmerge
41 [ # # ]: 0 : unstitch_all();
42 : : }
43 : :
44 [ # # ]: 0 : if (realPoint)
45 : : {
46 : : // update owner
47 [ # # ][ # # ]: 0 : assert(realPoint->owner() == this);
48 [ # # ]: 0 : realPoint->owner(0);
49 [ # # ][ # # ]: 0 : if( owner() )
50 [ # # ][ # # ]: 0 : owner()->swap_bridge( this, realPoint, false );
51 : :
52 : 0 : realPoint = 0;
53 : : }
54 [ # # ]: 0 : }
55 : :
56 : 0 : void CompositePoint::unstitch_all()
57 : : {
58 [ # # ]: 0 : assert( !firstCurve );
59 [ # # ]: 0 : while (stitchNext)
60 : : {
61 : 0 : stitchNext->owner(0);
62 [ # # ]: 0 : if (owner())
63 : 0 : owner()->notify_copied( stitchNext, this );
64 : 0 : stitchNext = stitchNext->stitchNext;
65 : : }
66 : 0 : }
67 : :
68 : :
69 : 0 : void CompositePoint::get_parents_virt( DLIList<TopologyBridge*>& list )
70 : : {
71 [ # # ]: 0 : DLIList<TopologyBridge*> point_parents;
72 [ # # ]: 0 : realPoint->get_parents_virt( point_parents );
73 [ # # ][ # # ]: 0 : for( int i = point_parents.size(); i--; )
74 : : {
75 [ # # ]: 0 : TopologyBridge* tb = point_parents.get_and_step();
76 [ # # ][ # # ]: 0 : if( CompositeCurve* curve = dynamic_cast<CompositeCurve*>(tb->owner()) )
[ # # ]
77 : : {
78 [ # # ][ # # ]: 0 : if( ! dynamic_cast<HiddenEntitySet*>(curve->owner()) )
[ # # ][ # # ]
79 [ # # ]: 0 : list.append_unique( curve );
80 : : }
81 [ # # ][ # # ]: 0 : else if( ! dynamic_cast<HiddenEntitySet*>(tb->owner()) )
[ # # ][ # # ]
82 [ # # ]: 0 : list.append( tb );
83 : : }
84 : :
85 : : // get point-curves also
86 : 0 : CompositeCurve* curve = 0;
87 [ # # ][ # # ]: 0 : while ((curve = next_curve(curve)))
88 [ # # ][ # # ]: 0 : if (curve->num_curves() == 0)
89 [ # # ]: 0 : list.append(curve);
90 : :
91 [ # # ]: 0 : if (stitchNext)
92 : : {
93 [ # # ]: 0 : point_parents.clean_out();
94 [ # # ]: 0 : stitchNext->get_parents_virt( point_parents );
95 [ # # ]: 0 : point_parents.reset();
96 [ # # ][ # # ]: 0 : for (int j = point_parents.size(); j--; )
97 : : {
98 [ # # ]: 0 : TopologyBridge* bridge = point_parents.get_and_step();
99 [ # # ]: 0 : CompositeCurve* curv = dynamic_cast<CompositeCurve*>(bridge);
100 [ # # ]: 0 : if (curv)
101 [ # # ][ # # ]: 0 : list.append_unique( curv->primary_stitched_curve() );
102 : : else
103 [ # # ]: 0 : list.append_unique( bridge );
104 : : }
105 [ # # ]: 0 : }
106 : 0 : }
107 : :
108 : 0 : void CompositePoint::get_children_virt( DLIList<TopologyBridge*>& )
109 : : {
110 : 0 : }
111 : :
112 : :
113 : 0 : CubitStatus CompositePoint::remove_bridge( TopologyBridge* bridge )
114 : : {
115 [ # # ]: 0 : if( bridge->owner() != this )
116 : : {
117 : 0 : assert(0);
118 : : return CUBIT_FAILURE;
119 : : }
120 : :
121 [ # # ]: 0 : if( bridge == realPoint )
122 : : {
123 : 0 : realPoint = 0;
124 : : }
125 : : else
126 : : {
127 : 0 : return CUBIT_FAILURE;
128 : : }
129 : :
130 : 0 : bridge->owner(0);
131 : :
132 [ # # ]: 0 : if (!realPoint)
133 : 0 : CompositeEngine::instance().notify_deactivated(this);
134 : :
135 : 0 : HadBridgeRemoved = 1;
136 : :
137 : 0 : return CUBIT_SUCCESS;
138 : : }
139 : :
140 : 0 : CubitStatus CompositePoint::swap_bridge( TopologyBridge* oldtb,
141 : : TopologyBridge* newtb,
142 : : bool )
143 : : {
144 [ # # ]: 0 : TBPoint* oldpt = dynamic_cast<TBPoint*>(oldtb);
145 [ # # ]: 0 : TBPoint* newpt = dynamic_cast<TBPoint*>(newtb);
146 [ # # ][ # # ]: 0 : if( !(oldpt && newpt) || newpt->owner() )
[ # # ][ # # ]
147 : 0 : return CUBIT_FAILURE;
148 : :
149 [ # # ]: 0 : assert(oldpt == realPoint );
150 : :
151 : 0 : realPoint = newpt;
152 : :
153 : 0 : newtb->owner(this);
154 : 0 : oldtb->owner(0);
155 : 0 : return CUBIT_SUCCESS;
156 : : }
157 : :
158 : :
159 : 0 : void CompositePoint::print_debug_info( const char* prefix, bool brief ) const
160 : : {
161 [ # # ]: 0 : if( prefix == 0 ) prefix = "";
162 : :
163 : : #ifdef TOPOLOGY_BRIDGE_IDS
164 : : PRINT_INFO("%sCompositePoint %d : %s %d\n", prefix, get_id(),
165 : : realPoint ? fix_type_name(typeid(*realPoint).name()) : "NO REAL POINT",
166 : : realPoint ? realPoint->get_id() : 0 );
167 : : #else
168 [ # # ][ # # ]: 0 : PRINT_INFO("%sCompositePoint %p : %s %p\n", prefix, (void*)this,
[ # # ]
169 : : realPoint ? fix_type_name(typeid(*realPoint).name()) : "NO REAL POINT",
170 [ # # ]: 0 : (void*)realPoint);
171 : : #endif
172 : :
173 [ # # ]: 0 : if ( !brief )
174 : : {
175 [ # # ]: 0 : CubitVector p = coordinates();
176 [ # # ][ # # ]: 0 : PRINT_INFO("%s (%f,%f,%f)\n", prefix, p.x(), p.y(), p.z() );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
177 : : }
178 : 0 : }
179 : :
180 : 0 : void CompositePoint::notify_reversed( TopologyBridge* )
181 : 0 : { }
182 : :
183 : 0 : CubitStatus CompositePoint::stitch( CompositePoint* point )
184 : : {
185 [ # # ][ # # ]: 0 : if( !point || point->owner() != this->owner() )
[ # # ]
186 : : {
187 : 0 : assert(0);
188 : : return CUBIT_FAILURE;
189 : : }
190 : :
191 [ # # ]: 0 : if( point->owner() )
192 : 0 : point->owner()->notify_merged( point, this );
193 : :
194 [ # # ]: 0 : if( point->owner() )
195 : 0 : point->owner()->remove_bridge( point );
196 : :
197 : 0 : point->owner( this );
198 : 0 : CompositePoint* end = point;
199 [ # # ]: 0 : while (end->stitchNext)
200 : : {
201 : 0 : end->stitchNext->owner( this );
202 : 0 : end = end->stitchNext;
203 : : }
204 : :
205 : 0 : end->stitchNext = stitchNext;
206 : 0 : stitchNext = end;
207 : :
208 : 0 : return CUBIT_SUCCESS;
209 : : }
210 : :
211 : 0 : void CompositePoint::get_stitched( DLIList<CompositePoint*>& result )
212 : : {
213 [ # # ][ # # ]: 0 : CompositePoint* pt = dynamic_cast<CompositePoint*>(owner());
214 [ # # ]: 0 : if (!pt)
215 : 0 : pt = this;
216 [ # # ]: 0 : while (pt)
217 : : {
218 [ # # ]: 0 : result.append(pt);
219 : 0 : pt = pt->stitchNext;
220 : : }
221 : 0 : }
222 : :
223 : 0 : GeometryQueryEngine* CompositePoint::get_geometry_query_engine() const
224 [ + - ][ + - ]: 6364 : { return VirtualQueryEngine::instance(); }
|