Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : SubCurve.hpp
3 : : //
4 : : // Purpose :
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Jason Kraftcheck
9 : : //
10 : : // Creation Date : 04/10/02
11 : : //-------------------------------------------------------------------------
12 : :
13 : : #ifndef SUB_CURVE_HPP
14 : : #define SUB_CURVE_HPP
15 : :
16 : : #include "PartitionCurve.hpp"
17 : :
18 : : class SubCurve : public PartitionCurve
19 : : {
20 : :
21 : : public:
22 : :
23 : : PartitionCurve* split( double param );
24 : : CubitStatus combine( PartitionCurve* dead_curve );
25 : :
26 : :
27 : : SubCurve( Curve* curve_ptr );
28 : : SubCurve( SubCurve* curve_ptr, double start_param );
29 : :
30 : : ~SubCurve();
31 : :
32 : : Curve* real_curve() const;
33 : :
34 : : int num_partitions() const;
35 : : void get_all_partitions( DLIList<TopologyBridge*>& curves ) const;
36 : :
37 : : CubitStatus get_graphics( GMem& result,
38 : : double angle_tolerance = 0,
39 : : double distance_tolernace = 0,
40 : : double max_edge_length = 0);
41 : :
42 : : void reverse_sense();
43 : :
44 : : virtual CubitStatus save(CubitSimpleAttrib&);
45 : :
46 : : /*** Methods from GeometryEntity ***/
47 : :
48 : : CubitBox bounding_box() const;
49 : : double measure();
50 : : GeometryType geometry_type();
51 : :
52 : : /*** Methods from Curve ***/
53 : :
54 : : CubitStatus closest_point( CubitVector const& from, CubitVector& closest,
55 : : CubitVector* tangent = 0, CubitVector* curvature = 0,
56 : : double* param = 0 );
57 : : CubitPointContainment point_containment( const CubitVector& point );
58 : : CubitBoolean is_position_on( const CubitVector& position );
59 : : CubitBoolean G1_discontinuous( double u, CubitVector* minus_tangent = 0,
60 : : CubitVector* plus_tangent = 0 );
61 : : CubitStatus get_interior_extrema( DLIList<CubitVector*>& points, CubitSense& sense );
62 : : CubitStatus get_center_radius( CubitVector& center, double& radius );
63 : :
64 : : CubitBoolean get_param_range( double& lower, double& upper );
65 : : double start_param();
66 : : double end_param();
67 : : CubitBoolean is_periodic( double& period );
68 : :
69 : : double length_from_u( double u1, double u2 );
70 : : double u_from_position( const CubitVector& position );
71 : : CubitStatus position_from_u( double u, CubitVector& result );
72 : : double u_from_arc_length( double root, double length );
73 : :
74 : : //R CubitStatus
75 : : //O- true or false if spline is rational or not.
76 : : //O- the degree of this spline
77 : : //O- the control points
78 : : //O- If rational, weight for each control point
79 : : //O- whether underlying spline is reversed
80 : : virtual CubitStatus get_spline_params( bool &rational,
81 : : int °ree,
82 : : DLIList<CubitVector> &cntrl_pts,
83 : : DLIList<double> &cntrl_pt_weights,
84 : : DLIList<double> &knots,
85 : : bool &spline_is_reversed
86 : : ) const;
87 : : //R CubitStatus
88 : : //O- center - ellipse center point
89 : : //O- normal - normal of the plane of the ellipse
90 : : //O- major_axis - major axis of the ellipse
91 : : //O- radius_ratio - ratio of the length of the major to minor axis.
92 : : virtual CubitStatus get_ellipse_params( CubitVector ¢er,
93 : : CubitVector &normal,
94 : : CubitVector &major_axis,
95 : : double &radius_ratio ) const;
96 : : private:
97 : :
98 : : void fixup_periodic_param( double& param ) const;
99 : : CubitBoolean get_ordered_param_range( double& lower, double& upper );
100 : :
101 : : double startParam, endParam;
102 : : };
103 : :
104 : 0 : inline Curve* SubCurve::real_curve() const
105 [ # # ]: 0 : { return dynamic_cast<Curve*>(partitioned_entity()); }
106 : :
107 : :
108 : : #endif
|