Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : CubitEvaluator.hpp
3 : : //
4 : : // Purpose :
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Matthew Staten
9 : : //
10 : : // Creation Date : 09/14/04
11 : : //
12 : : // Owner : Matthew Staten
13 : : //-------------------------------------------------------------------------
14 : :
15 : : #ifndef CUBIT_EVALUATOR_HPP
16 : : #define CUBIT_EVALUATOR_HPP
17 : :
18 : : #include "CubitDefines.h"
19 : : #include "GeometryDefines.h"
20 : : #include "CubitTransformMatrix.hpp"
21 : : #include "CGMGeomConfigure.h"
22 : :
23 : : class CubitVector;
24 : : class CubitBox;
25 : : class CubitTransformMatrix;
26 : :
27 : 0 : class CUBIT_GEOM_EXPORT CubitEvaluatorData
28 : : {
29 : : public:
30 [ # # ]: 0 : virtual ~CubitEvaluatorData() {}
31 : 0 : virtual GeometryType ask_type() const { return UNDEFINED_SURFACE_TYPE; }
32 : : };
33 : :
34 : 0 : class CUBIT_GEOM_EXPORT CubitEvaluator
35 : : {
36 : :
37 : : private:
38 : :
39 : : protected:
40 : :
41 : : CubitTransformMatrix mTmatrix;
42 : :
43 : : public :
44 : 0 : virtual ~CubitEvaluator()
45 [ # # ]: 0 : {}
46 : :
47 : 0 : virtual GeometryType ask_type() { return UNDEFINED_SURFACE_TYPE; }
48 : :
49 : : virtual const CubitEvaluatorData* evaluator_data() const = 0;
50 : : virtual CubitBox bounding_box() const = 0;
51 : : virtual CubitBoolean is_parametric() const = 0;
52 : : virtual CubitBoolean is_periodic() const = 0;
53 : : virtual CubitBoolean is_periodic_in_U( double &period ) const = 0;
54 : : virtual CubitBoolean is_periodic_in_V( double &period ) const = 0;
55 : : virtual CubitBoolean is_singular_in_U() const = 0;
56 : : virtual CubitBoolean is_singular_in_V() const = 0;
57 : : virtual CubitBoolean is_closed_in_U() const = 0;
58 : : virtual CubitBoolean is_closed_in_V() const = 0;
59 : : virtual CubitBoolean get_param_range_U( double& lower_bound,
60 : : double& upper_bound ) const = 0;
61 : : virtual CubitBoolean get_param_range_V( double& lower_bound,
62 : : double& upper_bound ) const = 0;
63 : :
64 : : virtual CubitVector position_from_u_v( double u, double v ) const = 0;
65 : : virtual CubitStatus u_v_from_position( CubitVector const& location,
66 : : double& u,
67 : : double& v,
68 : : CubitVector* closest_location ) const = 0;
69 : :
70 : : virtual CubitStatus principal_curvatures( CubitVector const& location,
71 : : double& curvature_1,
72 : : double& curvature_2,
73 : : CubitVector* closest_location = NULL ) = 0;
74 : : //R CubitStatus
75 : : //R- CUBIT_SUCCESS/FAILURE
76 : : //I location
77 : : //I- The point at which the curvatures are being requested -- it is also
78 : : //I- the point to which the closest point on the surface is returned.
79 : : //I- curvatures.
80 : : //O closest_location
81 : : //O- The point on the surface, closest to the input location (this
82 : : //O- might not be on the surface). This is input as a reference
83 : : //O- so that the function can modify its contents.
84 : : //O curvature_1/2
85 : : //O- Returned principal curvature magnitudes.
86 : : //- This functions computes the point on the surface that is closest
87 : : //- to the input location and then calculates the magnitudes of the
88 : : //- principal curvatures at this (possibly, new) point on the surface.
89 : :
90 : : virtual CubitStatus closest_point( CubitVector const& location,
91 : : CubitVector* closest_location = NULL,
92 : : CubitVector* unit_normal_ptr = NULL,
93 : : CubitVector* curvature1_ptr = NULL,
94 : : CubitVector* curvature2_ptr = NULL ) const = 0;
95 : : //R CubitStatus
96 : : //R- CUBIT_SUCCESS/FAILURE
97 : : //I location
98 : : //I- The point to which the closest point on the surface is desired.
99 : : //O closest_location
100 : : //O- The point on the Surface, closest to the
101 : : //O- input location (which might not be on the Surface). This is
102 : : //O- input as a reference so that the function can modify its
103 : : //O- contents.
104 : : //O unit_normal_ptr
105 : : //O- The normal (represented as a unit vector) at the closest_location.
106 : : //O- If this pointer is NULL, the normal is not returned.
107 : : //O curvature1_ptr
108 : : //O- The first principal curvature of the surface at closest_location.
109 : : //O- If this pointer is NULL, this curvature is not returned.
110 : : //O curvature2_ptr
111 : : //O- The second principal curvature of the surface at closest_location.
112 : : //O- If this pointer is NULL, this curvature is not returned.
113 : : //- This function computes the point on the surface closest to the input
114 : : //- location -- i.e., closest_location.
115 : : //- The first Facet FACE in the list
116 : : //- is queried.
117 : : //-
118 : : //- If the input pointer values of unit_normal, curvature1 and
119 : : //- curvature2
120 : : //- are non-NULL, the normal and principal curvatures, too, are
121 : : //- returned. These are computed at closest_location, not at the
122 : : //- input location.
123 : : //-
124 : : //- NOTE:
125 : : //- It is assumed that if the calling code needs the normal or the
126 : : //- principal curvatures, it will *allocate* space for the CubitVectors
127 : : //- before sending in the pointers.
128 : :
129 : 0 : void add_transformation( CubitTransformMatrix &tfmat )
130 : : {
131 [ # # ]: 0 : mTmatrix = tfmat * mTmatrix;
132 : 0 : }
133 : :
134 : : };
135 : :
136 : :
137 : : // ********** BEGIN INLINE FUNCTIONS **********
138 : : // ********** END INLINE FUNCTIONS **********
139 : :
140 : : // ********** BEGIN FRIEND FUNCTIONS **********
141 : : // ********** END FRIEND FUNCTIONS **********
142 : :
143 : : // ********** BEGIN EXTERN FUNCTIONS **********
144 : : // ********** END EXTERN FUNCTIONS **********
145 : :
146 : : #endif
147 : :
|