Branch data Line data Source code
1 : : #include "PartitionPoint.hpp"
2 : : #include "PartitionCurve.hpp"
3 : : #include "VirtualQueryEngine.hpp"
4 : : #include "PartitionEngine.hpp"
5 : :
6 : : #include "CubitPointData.hpp"
7 : : #include "TDVGFacetOwner.hpp"
8 : : #include "CubitTransformMatrix.hpp"
9 : : #include "Surface.hpp"
10 : :
11 : 0 : PartitionPoint::PartitionPoint( const CubitVector& position,
12 : : PartitionEntity* owner )
13 [ # # ][ # # ]: 0 : : firstCurve(0), curveCount(0), myPosition( position ), facetPoint(0)
14 : : {
15 [ # # ][ # # ]: 0 : owner->sub_entity_set().add_lower_order( this );
16 : 0 : }
17 : :
18 : 0 : PartitionPoint::PartitionPoint( TBPoint* real_point )
19 : : : firstCurve(0), curveCount(0),
20 : 0 : myPosition( real_point->coordinates() ),
21 [ # # ][ # # ]: 0 : facetPoint(0)
22 : : {
23 [ # # ][ # # ]: 0 : assert( dynamic_cast<SubEntitySet*>(real_point->owner()) == 0 );
[ # # ]
24 [ # # ][ # # ]: 0 : new SubEntitySet( real_point, this );
25 : 0 : }
26 : :
27 : 0 : PartitionPoint::PartitionPoint( const CubitSimpleAttrib& attrib,
28 : : PartitionEntity* owner )
29 [ # # ][ # # ]: 0 : : firstCurve(0), curveCount(0), facetPoint(0)
30 : : {
31 [ # # ]: 0 : DLIList<int> junk;
32 [ # # # # ]: 0 : DLIList<CubitVector*> pt;
33 [ # # ][ # # ]: 0 : owner->sub_entity_set().add_lower_order( this, attrib, 0, pt, junk, junk, junk);
34 [ # # ][ # # ]: 0 : assert(pt.size() == 1);
35 [ # # ][ # # ]: 0 : myPosition = *pt.get();
36 [ # # ][ # # ]: 0 : delete pt.get();
37 : 0 : }
38 : :
39 : :
40 [ # # ]: 0 : PartitionPoint::~PartitionPoint()
41 : : {
42 [ # # ]: 0 : while( firstCurve )
43 : : {
44 : 0 : PartitionCurve* curve = firstCurve;
45 [ # # ][ # # ]: 0 : if( curve->start_point() == this )
46 [ # # ]: 0 : curve->start_point(0);
47 [ # # ][ # # ]: 0 : if( curve->end_point() == this )
48 [ # # ]: 0 : curve->end_point(0);
49 [ # # ]: 0 : assert( firstCurve != curve );
50 : : }
51 [ # # ]: 0 : assert( curveCount == 0 );
52 [ # # ]: 0 : facet_point(0);
53 [ # # ]: 0 : }
54 : :
55 : 0 : CubitVector PartitionPoint::coordinates() const
56 : 0 : { return myPosition; }
57 : : /*
58 : : int PartitionPoint::num_curves() const
59 : : {
60 : : int count = 0;
61 : : for( PartitionCurve* curve = firstCurve; curve; curve=curve->next_curve(this) )
62 : : count++;
63 : : return count;
64 : : }
65 : : */
66 : 0 : PartitionCurve* PartitionPoint::next_curve( PartitionCurve* prev ) const
67 [ # # ]: 0 : { return prev ? prev->next_curve(this) : firstCurve; }
68 : :
69 : 0 : PartitionCurve* PartitionPoint::common_curve( PartitionPoint* other ) const
70 : : {
71 : 0 : PartitionCurve* curve = 0;
72 [ # # ]: 0 : if( other == this )
73 : : {
74 [ # # ]: 0 : while( (curve = next_curve(curve)) )
75 [ # # ]: 0 : if( curve->start_point() == curve->end_point() )
76 : 0 : return curve;
77 : : }
78 : : else
79 : : {
80 [ # # ]: 0 : while( (curve = next_curve(curve)) )
81 [ # # ]: 0 : if( curve->other_point(other) )
82 : 0 : return curve;
83 : : }
84 : 0 : return 0;
85 : : }
86 : :
87 : 0 : CubitStatus PartitionPoint::move( CubitVector& /*delta*/ )
88 : : {
89 : : //if( curveSet.size() )
90 : 0 : return CUBIT_FAILURE;
91 : :
92 : : //myPosition += delta;
93 : : //return CUBIT_SUCCESS;
94 : : }
95 : :
96 : 0 : void PartitionPoint::get_parents_virt( DLIList<TopologyBridge*>& parents )
97 : : {
98 : 0 : parents.clean_out();
99 [ # # ]: 0 : if( real_point() )
100 : : {
101 : : // Get all the real point's parent curves.
102 : 0 : sub_entity_set().get_entity()->get_parents_virt( parents );
103 : :
104 : : // Remove all real parents hidden by partitions. We will add
105 : : // the partitions hiding these curves later.
106 [ # # ]: 0 : for( int i = parents.size(); i--; )
107 [ # # ][ # # ]: 0 : if( dynamic_cast<SubEntitySet*>(parents.step_and_get()->owner() ) )
[ # # ]
108 : 0 : parents.change_to(0);
109 [ # # ]: 0 : parents.remove_all_with_value(0);
110 : : }
111 : :
112 : : // Now add any parent partition curves
113 [ # # ]: 0 : for( PartitionCurve* curve = firstCurve; curve; curve = curve->next_curve(this) )
114 [ # # ]: 0 : parents.append( curve );
115 : :
116 : 0 : }
117 : :
118 : 0 : void PartitionPoint::get_children_virt( DLIList<TopologyBridge*>& )
119 : : {
120 : 0 : }
121 : :
122 : 0 : TBPoint* PartitionPoint::real_point() const
123 : : {
124 [ # # ]: 0 : return dynamic_cast<TBPoint*>(sub_entity_set().get_entity());
125 : : }
126 : :
127 : 0 : GeometryQueryEngine* PartitionPoint::get_geometry_query_engine() const
128 : : {
129 : 0 : return VirtualQueryEngine::instance();
130 : : }
131 : :
132 : 0 : void PartitionPoint::print_debug_info( const char* prefix,
133 : : bool ent_set ) const
134 : : {
135 [ # # ]: 0 : if( !prefix ) prefix = "";
136 [ # # ]: 0 : char* new_prefix = new char[strlen(prefix)+3];
137 : 0 : strcpy( new_prefix, prefix );
138 : 0 : strcat( new_prefix, " ");
139 [ # # ]: 0 : CubitVector p = coordinates();
140 [ # # ][ # # ]: 0 : PRINT_INFO("%sPartitionPoint %p at (%f,%f,%f)\n",
[ # # ][ # # ]
[ # # ][ # # ]
141 [ # # ]: 0 : prefix, (void*)this, p.x(), p.y(), p.z() );
142 [ # # ]: 0 : DLIList<Curve*> curve_list;
143 [ # # ]: 0 : const_cast<PartitionPoint*>(this)->TopologyBridge::curves( curve_list );
144 [ # # ][ # # ]: 0 : PRINT_INFO("%s %d Curves (%d PartitionCurves).\n", prefix,
[ # # ][ # # ]
[ # # ]
145 [ # # ]: 0 : curve_list.size(), num_curves() );
146 : :
147 [ # # ][ # # ]: 0 : if ( facet_point() ) {
148 [ # # ][ # # ]: 0 : p = facet_point()->coordinates();
[ # # ]
149 [ # # ][ # # ]: 0 : PRINT_INFO("%s CubitPoint %p at [%f,%f,%f] (%f)\n", prefix,
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
150 : : (void*)facet_point(), p.x(), p.y(), p.z(),
151 [ # # ]: 0 : (coordinates() - facet_point()->coordinates()).length());
152 : : }
153 : :
154 [ # # ]: 0 : if( ent_set )
155 [ # # ][ # # ]: 0 : sub_entity_set().print_debug_info( new_prefix );
156 : : else
157 [ # # ]: 0 : print_partitioned_entity(new_prefix);
158 [ # # ][ # # ]: 0 : delete [] new_prefix;
159 : 0 : }
160 : :
161 : :
162 : 0 : void PartitionPoint::append_simple_attribute_virt(const CubitSimpleAttrib& csa)
163 : 0 : { sub_entity_set().add_attribute( this, csa ); }
164 : 0 : void PartitionPoint::remove_simple_attribute_virt(const CubitSimpleAttrib& csa)
165 : 0 : { sub_entity_set().rem_attribute( this, csa ); }
166 : 0 : void PartitionPoint::remove_all_simple_attribute_virt()
167 : 0 : { sub_entity_set().rem_all_attrib( this ); }
168 : 0 : CubitStatus PartitionPoint::get_simple_attribute(DLIList<CubitSimpleAttrib>& list)
169 : : {
170 : 0 : sub_entity_set().get_attributes( this, list );
171 : 0 : return CUBIT_SUCCESS;
172 : : }
173 : 0 : CubitStatus PartitionPoint::get_simple_attribute(const CubitString& name,
174 : : DLIList<CubitSimpleAttrib>& list)
175 : : {
176 : 0 : sub_entity_set().get_attributes( this, name.c_str(), list );
177 : 0 : return CUBIT_SUCCESS;
178 : : }
179 : :
180 : 0 : void PartitionPoint::reverse_sense()
181 : 0 : { }
182 : :
183 : 0 : void PartitionPoint::notify_split( FacetEntity* , FacetEntity* )
184 : 0 : { assert(0); }
185 : :
186 : 0 : void PartitionPoint::facet_point( CubitPointData* set )
187 : : {
188 [ # # ]: 0 : if( facetPoint )
189 : 0 : TDVGFacetOwner::remove(facetPoint);
190 : 0 : facetPoint = set;
191 [ # # ]: 0 : if( set )
192 : : {
193 [ # # ][ # # ]: 0 : assert((set->coordinates() - coordinates()).length_squared()
[ # # ]
194 [ # # ]: 0 : < GEOMETRY_RESABS*GEOMETRY_RESABS);
195 : 0 : TDVGFacetOwner::set(facetPoint,this);
196 : : }
197 : 0 : }
198 : :
199 : 0 : CubitStatus PartitionPoint::save( CubitSimpleAttrib& attrib )
200 : : {
201 [ # # ][ # # ]: 0 : int id = sub_entity_set().get_id(this);
202 [ # # ]: 0 : if( id <= 0 )
203 : 0 : return CUBIT_FAILURE;
204 : :
205 [ # # ]: 0 : DLIList<CubitVector*> pt_list(1);
206 [ # # ][ # # ]: 0 : pt_list.append( new CubitVector(coordinates()) );
[ # # ]
207 : :
208 [ # # ][ # # ]: 0 : return sub_entity_set().save_geometry( id, 0, &pt_list, 0, 0, 0, attrib );
[ # # ]
209 : : }
210 : :
211 : 0 : CubitBox PartitionPoint::bounding_box() const
212 [ # # ]: 0 : { return CubitBox(coordinates()); }
213 : :
214 : 0 : CubitStatus PartitionPoint::move_to_geometry( CubitVector& pos )
215 : : {
216 [ # # ]: 0 : pos = coordinates();
217 : 0 : return CUBIT_SUCCESS;
218 : : }
219 : :
220 : 0 : void PartitionPoint::transform( const CubitTransformMatrix& xform )
221 : : {
222 [ # # ][ # # ]: 0 : if( TBPoint* point = dynamic_cast<TBPoint*>(partitioned_entity()) )
223 [ # # ]: 0 : myPosition = point->coordinates();
224 : : else
225 [ # # ]: 0 : myPosition = xform * myPosition;
226 : :
227 [ # # ]: 0 : if( facetPoint )
228 : 0 : facetPoint->set(myPosition);
229 [ + - ][ + - ]: 6364 : }
|