HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
UT_VectorTypes.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: UT_VectorTypes.h (Utility library, C++)
7  *
8  * COMMENTS:
9  * This class prototypes our vector types, such
10  * as UT_QuaternionR, UT_Vector3R, etc.
11  */
12 
13 #ifndef __UT_VectorTypes__
14 #define __UT_VectorTypes__
15 
16 #include "UT_API.h"
17 
18 #include <SYS/SYS_Types.h>
19 #include <SYS/SYS_TypeDecorate.h>
20 
21 // Define this so that H11 users can use this to determine if they have
22 // UT_Vector3R, UT_Matrix3R, etc.
23 #define UT_VECTORTYPES_HAVE_FPREAL 1
24 
25 template <typename T> class UT_API UT_Vector2T;
30 typedef UT_Vector2T<float> UT_Vector2; // deprecated
33 
34 template <typename T> class UT_API UT_Vector3T;
39 typedef UT_Vector3T<float> UT_Vector3; // deprecated
42 
43 template <typename T> class UT_API UT_Vector4T;
48 typedef UT_Vector4T<float> UT_Vector4; // deprecated
51 
52 class UT_XformOrder;
53 
54 template <typename T> class UT_API UT_QuaternionT;
59 typedef UT_QuaternionT<float> UT_Quaternion; // deprecated
60 
61 template <typename T> class UT_API UT_Matrix2T;
65 typedef UT_Matrix2T<float> UT_Matrix2; // deprecated
66 typedef UT_Matrix2T<double> UT_DMatrix2; // deprecated
67 
68 template <typename T> class UT_API UT_Matrix3T;
72 typedef UT_Matrix3T<float> UT_Matrix3; // deprecated
73 typedef UT_Matrix3T<double> UT_DMatrix3; // deprecated
74 
75 template <typename T> class UT_API UT_Matrix4T;
79 typedef UT_Matrix4T<float> UT_Matrix4; // deprecated
80 typedef UT_Matrix4T<double> UT_DMatrix4; // deprecated
81 
82 
83 //
84 // Declare the following types as POD so that UT_ValArray can be optimized
85 //
98 
108 
109 //
110 // Declare common array types
111 //
112 template <typename T> class UT_API_TMPL UT_ValArray;
113 
114 typedef UT_ValArray<fpreal> UT_FprealArray;
115 typedef UT_ValArray<fpreal32> UT_Fpreal32Array;
116 typedef UT_ValArray<fpreal64> UT_Fpreal64Array;
117 typedef UT_ValArray<float> UT_FloatArray;
118 typedef UT_ValArray<double> UT_DoubleArray;
119 typedef UT_ValArray<int> UT_IntArray;
120 typedef UT_ValArray<exint> UT_ExintArray;
121 typedef UT_ValArray<int16> UT_Int16Array;
122 typedef UT_ValArray<int32> UT_Int32Array;
123 typedef UT_ValArray<int64> UT_Int64Array;
124 
125 typedef UT_ValArray<UT_Vector2R> UT_Vector2RArray;
126 typedef UT_ValArray<UT_Vector3R> UT_Vector3RArray;
127 typedef UT_ValArray<UT_Vector4R> UT_Vector4RArray;
128 typedef UT_ValArray<UT_Vector2F> UT_Vector2FArray;
129 typedef UT_ValArray<UT_Vector3F> UT_Vector3FArray;
130 typedef UT_ValArray<UT_Vector4F> UT_Vector4FArray;
131 typedef UT_ValArray<UT_Vector2D> UT_Vector2DArray;
132 typedef UT_ValArray<UT_Vector3D> UT_Vector3DArray;
133 typedef UT_ValArray<UT_Vector4D> UT_Vector4DArray;
134 typedef UT_ValArray<UT_Vector2H> UT_Vector2HArray;
135 typedef UT_ValArray<UT_Vector3H> UT_Vector3HArray;
136 typedef UT_ValArray<UT_Vector4H> UT_Vector4HArray;
137 
138 typedef UT_ValArray<UT_Vector2I> UT_Vector2IArray;
139 typedef UT_ValArray<UT_Vector3I> UT_Vector3IArray;
140 typedef UT_ValArray<UT_Vector4I> UT_Vector4IArray;
141 typedef UT_ValArray<UT_Vector2i> UT_Vector2iArray;
142 typedef UT_ValArray<UT_Vector3i> UT_Vector3iArray;
143 typedef UT_ValArray<UT_Vector4i> UT_Vector4iArray;
144 
145 typedef UT_ValArray<UT_Matrix2F> UT_Matrix2FArray;
146 typedef UT_ValArray<UT_Matrix3F> UT_Matrix3FArray;
147 typedef UT_ValArray<UT_Matrix4F> UT_Matrix4FArray;
148 typedef UT_ValArray<UT_Matrix2D> UT_Matrix2DArray;
149 typedef UT_ValArray<UT_Matrix3D> UT_Matrix3DArray;
150 typedef UT_ValArray<UT_Matrix4D> UT_Matrix4DArray;
151 
152 typedef UT_ValArray<UT_QuaternionR> UT_QuaternionRArray;
153 typedef UT_ValArray<UT_QuaternionF> UT_QuaternionFArray;
154 typedef UT_ValArray<UT_QuaternionD> UT_QuaternionDArray;
155 
156 typedef UT_ValArray<UT_Vector2> UT_Vector2Array; // deprecated
157 typedef UT_ValArray<UT_Vector3> UT_Vector3Array; // deprecated
158 typedef UT_ValArray<UT_Vector4> UT_Vector4Array; // deprecated
159 
160 
161 //
162 // Type Conversion
163 //
164 template< typename FT, template<typename> class V >
165 inline const V<fpreal>
167  const V<FT>& v
168 )
169 {
170  return V<fpreal>(v);
171 }
172 template< typename FT, template<typename> class V >
173 inline const V<double>
175  const V<FT>& v
176 )
177 {
178  return V<double>(v);
179 }
180 template< typename FT, template<typename> class V >
181 inline const V<float>
183  const V<FT>& v
184 )
185 {
186  return V<float>(v);
187 }
188 #if (SYS_SIZEOF_FPREAL == 4)
189  #define UT_R_FROM_D(VAL) UTconvertToR(VAL)
190  #define UT_R_FROM_F(VAL) (VAL)
191  #define UT_D_FROM_R(VAL) UTconvertToD(VAL)
192  #define UT_F_FROM_R(VAL) (VAL)
193 #elif (SYS_SIZEOF_FPREAL == 8)
194  #define UT_R_FROM_F(VAL) UTconvertToR(VAL)
195  #define UT_R_FROM_D(VAL) (VAL)
196  #define UT_F_FROM_R(VAL) UTconvertToF(VAL)
197  #define UT_D_FROM_R(VAL) (VAL)
198 #else
199  #error Missing FPREAL type
200 #endif
201 
202 
203 template<typename T>
204 static inline const char *UT_TypeShortName();
205 
206 template<>
207 inline const char *UT_TypeShortName<fpreal16>() { return "H"; }
208 
209 template<>
210 inline const char *UT_TypeShortName<fpreal32>() { return "F"; }
211 
212 template<>
213 inline const char *UT_TypeShortName<fpreal64>() { return "D"; }
214 
215 template<>
216 inline const char *UT_TypeShortName<int32>() { return "i"; }
217 
218 template<>
219 inline const char *UT_TypeShortName<int64>() { return "I"; }
220 
221 
222 // Type promotion
223 // This is used to define promoted types for specific use cases.
224 // E.g. We define PreciseType as the promoted version of a type to use in
225 // calculations where we want extra precision (e.g. norm calculations)
226 
227 template<typename T>
229 {
230  // Default precise promotion is T
231  typedef T PreciseType;
232 };
233 
234 template<>
236 {
237  // Use double precision for precise calculations
239 };
240 
241 // Templated typedefs for convenience
242 
243 // e.g. UT_PreciseT<fpreal32> is type fpreal64
244 template <typename T>
246 
247 #endif
UT_Vector2T< int64 > UT_Vector2I
UT_Matrix4T< double > UT_DMatrix4
UT_Matrix4T< fpreal64 > UT_Matrix4D
UT_Matrix3T< double > UT_DMatrix3
UT_Vector3T< fpreal16 > UT_Vector3H
const V< double > UTconvertToD(const V< FT > &v)
UT_Vector3T< int32 > UT_Vector3i
UT_Vector2T< float > UT_Vector2
const GLdouble * v
Definition: glcorearb.h:836
const char * UT_TypeShortName< int64 >()
UT_Vector2T< fpreal64 > UT_Vector2D
UT_Vector3T< float > UT_Vector3
UT_Vector4T< int64 > UT_Vector4I
#define UT_API
Definition: UT_API.h:13
UT_Vector3T< int64 > UT_Vector3I
3D Vector class.
4D Vector class.
Definition: UT_Vector4.h:155
2D Vector class.
Definition: UT_Vector2.h:138
UT_Matrix3T< fpreal > UT_Matrix3R
UT_Matrix4T< float > UT_Matrix4
const char * UT_TypeShortName< fpreal32 >()
UT_Vector4T< fpreal > UT_Vector4R
UT_Vector4T< int32 > UT_Vector4i
long long int64
Definition: SYS_Types.h:107
UT_Vector4T< float > UT_Vector4
UT_Matrix2T< fpreal > UT_Matrix2R
UT_QuaternionT< fpreal > UT_QuaternionR
UT_Matrix3T< float > UT_Matrix3
UT_Vector4T< fpreal16 > UT_Vector4H
int64 exint
Definition: SYS_Types.h:116
double fpreal64
Definition: SYS_Types.h:192
UT_Matrix2T< double > UT_DMatrix2
UT_QuaternionT< fpreal16 > UT_QuaternionH
const char * UT_TypeShortName< int32 >()
UT_Matrix2T< float > UT_Matrix2
typename UT_TypePromoteT< T >::PreciseType UT_PreciseT
UT_Matrix4T< fpreal32 > UT_Matrix4F
#define SYS_DECLARE_IS_POD(T)
Declare a type as POD.
UT_Vector2T< fpreal16 > UT_Vector2H
UT_Matrix3T< fpreal32 > UT_Matrix3F
UT_Vector3T< fpreal64 > UT_Vector3D
int int32
Definition: SYS_Types.h:35
UT_QuaternionT< fpreal32 > UT_QuaternionF
UT_QuaternionT< fpreal64 > UT_QuaternionD
UT_QuaternionT< float > UT_Quaternion
UT_Matrix2T< fpreal64 > UT_Matrix2D
UT_Vector3T< fpreal32 > UT_Vector3F
const char * UT_TypeShortName< fpreal16 >()
double fpreal
Definition: SYS_Types.h:270
Quaternion class.
Definition: UT_Quaternion.h:51
const V< fpreal > UTconvertToR(const V< FT > &v)
UT_Vector2T< fpreal32 > UT_Vector2F
UT_Vector2T< fpreal > UT_Vector2R
UT_Vector4T< fpreal32 > UT_Vector4F
UT_Vector3T< fpreal > UT_Vector3R
#define UT_API_TMPL
Definition: UT_API.h:14
const char * UT_TypeShortName< fpreal64 >()
UT_Matrix4T< fpreal > UT_Matrix4R
#define const
Definition: zconf.h:214
UT_Vector4T< fpreal64 > UT_Vector4D
short int16
Definition: SYS_Types.h:33
UT_Matrix2T< fpreal32 > UT_Matrix2F
float fpreal32
Definition: SYS_Types.h:191
UT_Vector2T< int32 > UT_Vector2i
const V< float > UTconvertToF(const V< FT > &v)
UT_Matrix3T< fpreal64 > UT_Matrix3D