Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : SubSurface.hpp
3 : : //
4 : : // Purpose : Geoemtry for the split of a face.
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Jason Kraftcheck
9 : : //
10 : : // Creation Date : 06/11/98
11 : : //-------------------------------------------------------------------------
12 : :
13 : : #ifndef SUB_SURFACE_HPP
14 : : #define SUB_SURFACE_HPP
15 : :
16 : : #include "PartitionSurface.hpp"
17 : :
18 : : class SubSurface : public PartitionSurface
19 : : {
20 : : public:
21 : :
22 : : SubSurface( Surface* real_surf );
23 : : //- Constructor
24 : :
25 : : CubitStatus combine( PartitionSurface* dead_surface );
26 : :
27 : : virtual ~SubSurface();
28 : : //- destructor.
29 : :
30 : : inline Surface* partitioned_surface() const;
31 : :
32 : : virtual CubitStatus save(CubitSimpleAttrib&);
33 : :
34 : : //CubitBox bounding_box() const;
35 : : //Use facet-based version inherited from PartitionSurface
36 : :
37 : : double measure();
38 : : GeometryType geometry_type();
39 : :
40 : :
41 : : CubitStatus get_point_normal( CubitVector& point, CubitVector& normal );
42 : :
43 : : virtual CubitStatus closest_point_uv_guess(
44 : : CubitVector const& location,
45 : : double& u, double& v,
46 : : CubitVector* closest_location = NULL,
47 : : CubitVector* unit_normal = NULL );
48 : :
49 : : virtual CubitStatus evaluate( double u, double v,
50 : : CubitVector *position,
51 : : CubitVector *unit_normal,
52 : : CubitVector *curvature1,
53 : : CubitVector *curvature2 );
54 : :
55 : : CubitStatus closest_point( CubitVector const& pos,
56 : : CubitVector* close = 0, CubitVector* norm = 0,
57 : : CubitVector* curv1 = 0, CubitVector* curv2 = 0);
58 : : void closest_point_trimmed( CubitVector from, CubitVector& result );
59 : :
60 : : CubitStatus closest_point_along_vector( CubitVector& from_point,
61 : : CubitVector& along_vector,
62 : : CubitVector& point_on_surface);
63 : :
64 : : CubitStatus principal_curvatures( CubitVector const& loc,
65 : : double& curv1, double& curv2,
66 : : CubitVector* closest_location=0 );
67 : :
68 : : CubitVector position_from_u_v( double u, double v );
69 : : CubitStatus u_v_from_position( CubitVector const& location,
70 : : double& u, double& v,
71 : : CubitVector* closest_location = NULL );
72 : :
73 : : CubitBoolean is_periodic();
74 : : CubitBoolean is_periodic_in_U( double& period );
75 : : CubitBoolean is_periodic_in_V( double& period );
76 : : CubitBoolean is_singular_in_U( double u_param );
77 : : CubitBoolean is_singular_in_V( double v_param );
78 : : CubitBoolean is_closed_in_U();
79 : : CubitBoolean is_closed_in_V();
80 : :
81 : : CubitStatus uv_derivitives( double u, double v,
82 : : CubitVector &du, CubitVector &dv );
83 : : CubitBoolean is_parametric();
84 : : CubitBoolean get_param_range_U( double& lo, double& hi );
85 : : CubitBoolean get_param_range_V( double& lo, double& hi );
86 : :
87 : : CubitBoolean is_position_on( CubitVector &test_position );
88 : :
89 : : CubitSense get_geometry_sense();
90 : :
91 : : CubitStatus get_sphere_params( CubitVector ¢er,
92 : : double &radius ) const;
93 : : //- Only valid for spherical surfaces
94 : : //O center
95 : : //O- The center of the sphere
96 : : //O radius
97 : : //O- The radius of the sphere
98 : :
99 : : CubitStatus get_cone_params( CubitVector ¢er,
100 : : CubitVector &normal,
101 : : CubitVector &major_axis,
102 : : double &radius_ratio,
103 : : double &sine_angle,
104 : : double &cos_angle ) const;
105 : : //- Only valid for conical surfaces. Cylinders are a special case of conicals.
106 : : //O center
107 : : //O-
108 : : //O normal
109 : : //O-
110 : : //O major_axis
111 : : //O-
112 : : //O radius_ratio
113 : : //O-
114 : : //O sine_angle
115 : : //O-
116 : : //O cos_angle
117 : : //O-
118 : :
119 : : virtual CubitStatus get_torus_params( CubitVector ¢er,
120 : : CubitVector &normal,
121 : : double &major_radius,
122 : : double &minor_radius ) const;
123 : : //- Only valid for torus surfaces.
124 : : //O center
125 : : //O-
126 : : //O normal
127 : : //O-
128 : : //O major_radius
129 : : //O-
130 : : //O minor_radius
131 : : //O-
132 : :
133 : : virtual CubitStatus get_nurb_params( bool &rational,
134 : : int °ree_u,
135 : : int °ree_v,
136 : : int &num_cntrl_pts_u,
137 : : int &num_cntrl_pts_v,
138 : : DLIList<CubitVector> &cntrl_pts,
139 : : DLIList<double> &weights,
140 : : DLIList<double> &u_knots,
141 : : DLIList<double> &v_knots ) const;
142 : : //- Only valid for nurbs surfaces
143 : : //O rational
144 : : //O- True if the nurb is rational
145 : : //O degree_u
146 : : //O- The degree of the nurb in the u direction
147 : : //O degree_v
148 : : //O- The degree of the nurb in the v direction
149 : : //O num_cntrl_pts_u
150 : : //O- Number of control points in the u direction
151 : : //O num_cntrl_pts_v
152 : : //O- Number of control points in the v direction
153 : : //O cntrl_pts
154 : : //O- The control points stored as
155 : : //O- cntrl_pts[0 ] = pt[u=0][v=0]
156 : : //O- cntrl_pts[1 ] = pt[u=1][v=0]
157 : : //O- ...
158 : : //O- cntrl_pts[num_cntrl_pts_u-1] = pt[u=?][v=0]
159 : : //O- cntrl_pts[num_cntrl_pts_u ] = pt[u=0][v=1]
160 : : //O- ...
161 : : //O weights
162 : : //O- If rational, weights for each control point, stored in the same
163 : : //O- order as the control points. No weights are returned if
164 : : //O- rational == false
165 : : //O u_knots
166 : : //O- knot vector in the u direction
167 : : //O v_knots
168 : : //O- knot vector in the v direction
169 : :
170 : : void reverse_sense();
171 : :
172 : : protected:
173 : :
174 : : virtual PartitionSurface* copy();
175 : :
176 : : private:
177 : :
178 : : SubSurface( SubSurface* split_from );
179 : : };
180 : :
181 : 0 : inline Surface* SubSurface::partitioned_surface() const
182 [ # # ]: 0 : { return dynamic_cast<Surface*>(partitioned_entity()); }
183 : :
184 : :
185 : : #endif
186 : :
|