Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : CompositeCurve.hpp
3 : : //
4 : : // Purpose : Geometry defined as the joining of a chain of curves.
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Jason Kraftcheck
9 : : //
10 : : // Creation Date : 12/19/01
11 : : //-------------------------------------------------------------------------
12 : :
13 : : #ifndef COMPOSITE_CURVE_HPP
14 : : #define COMPOSITE_CURVE_HPP
15 : :
16 : : #include "VGDefines.h"
17 : : #include "Curve.hpp"
18 : : #include "CompositeGeom.hpp"
19 : : #include "HiddenEntitySet.hpp"
20 : : #include "CompositeCoEdge.hpp"
21 : :
22 : : class CompositeSurface;
23 : : class CompositePoint;
24 : : class TBPoint;
25 : :
26 : : class CompositeCurve : public Curve, public TBOwner
27 : : {
28 : :
29 : : public:
30 : :
31 : : int HadBridgeRemoved;
32 : : //CompositeCurve( DLIList<Curve*>& curve_list, bool periodic );
33 : : //CompositeCurve( );
34 : : CompositeCurve( Curve* curve );
35 : : CompositeCurve( CompositeGeom* geometry );
36 : : CompositeCurve( CompositePoint* point ); // create point-curve
37 : :
38 : : virtual ~CompositeCurve();
39 : :
40 : : inline Curve* get_curve( int index ) const;
41 : : inline CubitSense get_sense( int index ) const;
42 : : inline int num_curves( ) const;
43 : : inline int index_of( Curve* curve_ptr ) const;
44 : : inline void update();
45 : : Curve* remove_curve( int index );
46 : :
47 : : /*
48 : : inline CubitStatus append_curve( Curve* curve_ptr );
49 : : inline CubitStatus prepend_curve( Curve* curve_ptr );
50 : : CubitStatus insert_curve( Curve* curve_ptr, int index );
51 : : Curve* remove_curve( Curve* curve_ptr );
52 : : Curve* remove_curve( int index );
53 : : */
54 : : CompositeCurve* split( Curve* curve_ptr );
55 : : CubitStatus combine( CompositeCurve* curve_ptr, bool prepend );
56 : : void reverse();
57 : :
58 : : CompositeCoEdge* first_coedge() const;
59 : : CompositeCoEdge* next_coedge( CompositeCoEdge* after_this ) const;
60 : : CubitStatus add( CompositeCoEdge* coedge );
61 : : CubitStatus remove( CompositeCoEdge* coedge );
62 : :
63 : : CompositePoint* start_point() const;
64 : : CompositePoint* end_point() const;
65 : : CubitStatus start_point( CompositePoint* pt );
66 : : CubitStatus end_point( CompositePoint* pt );
67 : : CompositePoint* other_point( CompositePoint* pt );
68 : : CompositePoint* common_point( CompositeCurve* curve );
69 : : CompositeCurve* next( const CompositePoint* around_this );
70 : :
71 : : HiddenEntitySet& hidden_entities();
72 : : void get_hidden_points( DLIList<TBPoint*>& points );
73 : :
74 : : bool has_parent_composite_surface() const;
75 : :
76 : : /**************** Methods from TopologyBridge *******************/
77 : :
78 : : void append_simple_attribute_virt( const CubitSimpleAttrib& csa );
79 : : void remove_simple_attribute_virt(const CubitSimpleAttrib& csa );
80 : : void remove_all_simple_attribute_virt();
81 : : CubitStatus get_simple_attribute(DLIList<CubitSimpleAttrib>& csa_list );
82 : : CubitStatus get_simple_attribute( const CubitString& name,
83 : : DLIList<CubitSimpleAttrib>& attrib_list );
84 : : GeometryQueryEngine* get_geometry_query_engine() const;
85 : :
86 : : void get_parents_virt( DLIList<TopologyBridge*>& parents );
87 : : void get_children_virt( DLIList<TopologyBridge*>& children );
88 : 0 : int layer() const { return COMPOSITE_LAYER; }
89 : :
90 : : /******************** Methods from TBOwner **********************/
91 : :
92 : : CubitStatus remove_bridge( TopologyBridge* bridge );
93 : : CubitStatus swap_bridge( TopologyBridge* old,
94 : : TopologyBridge* neww,
95 : : bool reversed );
96 : : CubitBoolean contains_bridge( TopologyBridge* bridge ) const;
97 : : void notify_reversed( TopologyBridge* bridge );
98 : : void notify_split( TopologyBridge* new_bridge, TopologyBridge* split_from );
99 : : // void notify_joined( TopologyBridge* dead, TopologyBridge* keep );
100 : :
101 : : /**************** Methods from GeometryEntity *******************/
102 : :
103 : : CubitBox bounding_box() const;
104 : : double measure( ) ;
105 : : GeometryType geometry_type();
106 : :
107 : :
108 : : /******************** Methods from Curve ***********************/
109 : :
110 : : CubitBoolean get_param_range( double& lower, double& upper );
111 : : CubitBoolean is_periodic( double& period);
112 : : double start_param();
113 : : double end_param();
114 : :
115 : : CubitStatus position_from_u( double u_value, CubitVector& pos );
116 : : double u_from_position (const CubitVector& input_position);
117 : :
118 : : double length_from_u( double parameter1, double parameter2 );
119 : : double u_from_arc_length ( double root_param, double arc_length );
120 : :
121 : : CubitStatus closest_point( CubitVector const& location,
122 : : CubitVector& closest_location,
123 : : CubitVector* tangent_ptr = NULL,
124 : : CubitVector* curvature_ptr = NULL,
125 : : double *param = NULL);
126 : :
127 : : CubitStatus closest_point_trimmed( CubitVector const& from_pt,
128 : : CubitVector& result_pt );
129 : :
130 : : CubitBoolean is_position_on( const CubitVector &test_position );
131 : : CubitPointContainment point_containment( const CubitVector &point );
132 : :
133 : : CubitStatus get_point_direction( CubitVector& origin,
134 : : CubitVector& direction );
135 : :
136 : : CubitStatus get_interior_extrema(
137 : : DLIList<CubitVector*>& interior_points,
138 : : CubitSense& return_sense);
139 : :
140 : : CubitStatus get_center_radius( CubitVector& c, double& r );
141 : :
142 : : CubitBoolean G1_discontinuous( double param,
143 : : CubitVector* minus_tangent = NULL,
144 : : CubitVector* plus_tangent = NULL );
145 : :
146 : :
147 : : void print_debug_info( const char* prefix = 0, bool brief = false ) const;
148 : :
149 : : CubitStatus stitch( CompositeCurve* merge_with );
150 : : void unstitch_all();
151 : : CompositeCurve* primary_stitched_curve();
152 : : bool is_stitched();
153 : : void get_stitched( DLIList<CompositeCurve*>& list );
154 : :
155 : : CubitStatus curve_param( double u_composite, double& u_curve, int& index ) const;
156 : : double composite_param( int index, double param ) const;
157 : :
158 : : //void draw( int color );
159 : :
160 : : void read_attributes() ; //{ compGeom->read_attributes(); }
161 : : void write_attributes() ; //{ compGeom->write_attributes(); }
162 : :
163 : : //R CubitStatus
164 : : //O- true or false if spline is rational or not.
165 : : //O- the degree of this spline
166 : : //O- the control points
167 : : //O- If rational, weight for each control point
168 : : //O- whether underlying spline is reversed
169 : : virtual CubitStatus get_spline_params( bool &rational,
170 : : int °ree,
171 : : DLIList<CubitVector> &cntrl_pts,
172 : : DLIList<double> &cntrl_pt_weights,
173 : : DLIList<double> &knots,
174 : : bool &spline_is_reversed
175 : : ) const;
176 : : //R CubitStatus
177 : : //O- center - ellipse center point
178 : : //O- normal - normal of the plane of the ellipse
179 : : //O- major_axis - major axis of the ellipse
180 : : //O- radius_ratio - ratio of the length of the major to minor axis.
181 : : virtual CubitStatus get_ellipse_params( CubitVector ¢er,
182 : : CubitVector &normal,
183 : : CubitVector &major_axis,
184 : : double &radius_ratio ) const;
185 : :
186 : : protected:
187 : :
188 : : CompositeCurve();
189 : :
190 : : int closest_curve( CubitVector const& location,
191 : : CubitVector *point = NULL );
192 : : //R int
193 : : //R- The index of the closest curve
194 : : //I location
195 : : //I- A position for which the closest curve is desired.
196 : : //O point
197 : : //O- The closest point on the curve
198 : : //- This function finds the closest underlying Curve of this
199 : : //- CompositeCurve to a given point
200 : :
201 : : double lengthUntilI( int index ) const;
202 : :
203 : : void fixup_periodic_param( double& u ) const;
204 : :
205 : : CubitStatus set_point( bool set_start_point, CompositePoint* point );
206 : :
207 : : private:
208 : :
209 : : // these have no implementation, just private delcarations
210 : : // to prevent the compiler from generating default implementations
211 : : CompositeCurve& operator=(const CompositeCurve&);
212 : : CompositeCurve(const CompositeCurve&);
213 : :
214 : : CompositeGeom* compGeom;
215 : :
216 : : HiddenEntitySet* hiddenSet;
217 : :
218 : : CompositeCoEdge* firstCoEdge;
219 : :
220 : : CompositePoint* startPoint;
221 : : CompositePoint* endPoint;
222 : :
223 : : CompositeCurve* startNext;
224 : : CompositeCurve* endNext;
225 : :
226 : : CompositeCurve* stitchNext;
227 : : };
228 : :
229 : 0 : inline Curve* CompositeCurve::get_curve( int index ) const
230 [ # # ]: 0 : { return dynamic_cast<Curve*>(compGeom->entity(index)); }
231 : :
232 : 0 : inline CubitSense CompositeCurve::get_sense( int index ) const
233 : 0 : { return compGeom->sense( index ); }
234 : :
235 : 0 : inline int CompositeCurve::num_curves( ) const
236 : 0 : { return compGeom->num_entities(); }
237 : :
238 : 0 : inline int CompositeCurve::index_of( Curve* curve ) const
239 : 0 : { return compGeom->index_of( curve ); }
240 : :
241 : 0 : inline void CompositeCurve::update()
242 : 0 : { compGeom->update_cached_data();}
243 : :
244 : : /*
245 : : inline CubitStatus CompositeCurve::prepend_curve( Curve* curve )
246 : : { return insert_curve( curve, 0 ); }
247 : :
248 : : inline CubitStatus CompositeCurve::append_curve( Curve* curve )
249 : : { return insert_curve( curve, num_curves() ); }
250 : : */
251 : 0 : inline CompositeCoEdge* CompositeCurve::first_coedge( ) const
252 : 0 : { return firstCoEdge; }
253 : :
254 : 0 : inline CompositeCoEdge* CompositeCurve::next_coedge( CompositeCoEdge* coedge ) const
255 [ # # ][ # # ]: 0 : { return !coedge ? firstCoEdge : coedge->myCurve == this ? coedge->nextOnCurve : 0; }
256 : :
257 : 0 : inline CompositePoint* CompositeCurve::start_point() const
258 : 0 : { return startPoint; }
259 : :
260 : 0 : inline CompositePoint* CompositeCurve::end_point() const
261 : 0 : { return endPoint; }
262 : :
263 : :
264 : :
265 : 0 : inline HiddenEntitySet& CompositeCurve::hidden_entities()
266 [ # # ]: 0 : { if( !hiddenSet )
267 [ # # ]: 0 : hiddenSet = new HiddenEntitySet(this);
268 : 0 : return *hiddenSet;
269 : : }
270 : :
271 : :
272 : : #endif
|