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<uint8> UT_Uint8Array;
122 typedef UT_ValArray<int8> UT_Int8Array;
123 typedef UT_ValArray<int16> UT_Int16Array;
124 typedef UT_ValArray<int32> UT_Int32Array;
125 typedef UT_ValArray<int64> UT_Int64Array;
126 
127 typedef UT_ValArray<UT_Vector2R> UT_Vector2RArray;
128 typedef UT_ValArray<UT_Vector3R> UT_Vector3RArray;
129 typedef UT_ValArray<UT_Vector4R> UT_Vector4RArray;
130 typedef UT_ValArray<UT_Vector2F> UT_Vector2FArray;
131 typedef UT_ValArray<UT_Vector3F> UT_Vector3FArray;
132 typedef UT_ValArray<UT_Vector4F> UT_Vector4FArray;
133 typedef UT_ValArray<UT_Vector2D> UT_Vector2DArray;
134 typedef UT_ValArray<UT_Vector3D> UT_Vector3DArray;
135 typedef UT_ValArray<UT_Vector4D> UT_Vector4DArray;
136 typedef UT_ValArray<UT_Vector2H> UT_Vector2HArray;
137 typedef UT_ValArray<UT_Vector3H> UT_Vector3HArray;
138 typedef UT_ValArray<UT_Vector4H> UT_Vector4HArray;
139 
140 typedef UT_ValArray<UT_Vector2I> UT_Vector2IArray;
141 typedef UT_ValArray<UT_Vector3I> UT_Vector3IArray;
142 typedef UT_ValArray<UT_Vector4I> UT_Vector4IArray;
143 typedef UT_ValArray<UT_Vector2i> UT_Vector2iArray;
144 typedef UT_ValArray<UT_Vector3i> UT_Vector3iArray;
145 typedef UT_ValArray<UT_Vector4i> UT_Vector4iArray;
146 
147 typedef UT_ValArray<UT_Matrix2F> UT_Matrix2FArray;
148 typedef UT_ValArray<UT_Matrix3F> UT_Matrix3FArray;
149 typedef UT_ValArray<UT_Matrix4F> UT_Matrix4FArray;
150 typedef UT_ValArray<UT_Matrix2D> UT_Matrix2DArray;
151 typedef UT_ValArray<UT_Matrix3D> UT_Matrix3DArray;
152 typedef UT_ValArray<UT_Matrix4D> UT_Matrix4DArray;
153 
154 typedef UT_ValArray<UT_QuaternionR> UT_QuaternionRArray;
155 typedef UT_ValArray<UT_QuaternionF> UT_QuaternionFArray;
156 typedef UT_ValArray<UT_QuaternionD> UT_QuaternionDArray;
157 
158 typedef UT_ValArray<UT_Vector2> UT_Vector2Array; // deprecated
159 typedef UT_ValArray<UT_Vector3> UT_Vector3Array; // deprecated
160 typedef UT_ValArray<UT_Vector4> UT_Vector4Array; // deprecated
161 
162 
163 //
164 // Type Conversion
165 //
166 template< typename FT, template<typename> class V >
167 inline const V<fpreal>
169  const V<FT>& v
170 )
171 {
172  return V<fpreal>(v);
173 }
174 template< typename FT, template<typename> class V >
175 inline const V<double>
177  const V<FT>& v
178 )
179 {
180  return V<double>(v);
181 }
182 template< typename FT, template<typename> class V >
183 inline const V<float>
185  const V<FT>& v
186 )
187 {
188  return V<float>(v);
189 }
190 #if (SYS_SIZEOF_FPREAL == 4)
191  #define UT_R_FROM_D(VAL) UTconvertToR(VAL)
192  #define UT_R_FROM_F(VAL) (VAL)
193  #define UT_D_FROM_R(VAL) UTconvertToD(VAL)
194  #define UT_F_FROM_R(VAL) (VAL)
195 #elif (SYS_SIZEOF_FPREAL == 8)
196  #define UT_R_FROM_F(VAL) UTconvertToR(VAL)
197  #define UT_R_FROM_D(VAL) (VAL)
198  #define UT_F_FROM_R(VAL) UTconvertToF(VAL)
199  #define UT_D_FROM_R(VAL) (VAL)
200 #else
201  #error Missing FPREAL type
202 #endif
203 
204 
205 template<typename T>
206 static inline const char *UT_TypeShortName();
207 
208 template<>
209 inline const char *UT_TypeShortName<fpreal16>() { return "H"; }
210 
211 template<>
212 inline const char *UT_TypeShortName<fpreal32>() { return "F"; }
213 
214 template<>
215 inline const char *UT_TypeShortName<fpreal64>() { return "D"; }
216 
217 template<>
218 inline const char *UT_TypeShortName<int32>() { return "i"; }
219 
220 template<>
221 inline const char *UT_TypeShortName<int64>() { return "I"; }
222 
223 
224 // Type promotion
225 // This is used to define promoted types for specific use cases.
226 // E.g. We define PreciseType as the promoted version of a type to use in
227 // calculations where we want extra precision (e.g. norm calculations)
228 
229 template<typename T>
231 {
232  // Default precise promotion is T
233  typedef T PreciseType;
234 };
235 
236 template<>
238 {
239  // Use double precision for precise calculations
241 };
242 
243 // Templated typedefs for convenience
244 
245 // e.g. UT_PreciseT<fpreal32> is type fpreal64
246 template <typename T>
248 
249 #endif
UT_Vector2T< int64 > UT_Vector2I
UT_Matrix4T< double > UT_DMatrix4
UT_Matrix4T< fpreal64 > UT_Matrix4D
UT_Matrix3T< double > UT_DMatrix3
int int32
Definition: SYS_Types.h:39
UT_Vector3T< fpreal16 > UT_Vector3H
const V< double > UTconvertToD(const V< FT > &v)
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the and then *wait for them to all complete We provide a helper class
Definition: thread.h:643
UT_Vector3T< int32 > UT_Vector3i
UT_Vector2T< float > UT_Vector2
const char * UT_TypeShortName< int64 >()
UT_Vector2T< fpreal64 > UT_Vector2D
UT_Vector3T< float > UT_Vector3
int64 exint
Definition: SYS_Types.h:125
UT_Vector4T< int64 > UT_Vector4I
#define UT_API
Definition: UT_API.h:13
const GLdouble * v
Definition: glew.h:1391
UT_Vector3T< int64 > UT_Vector3I
3D Vector class.
4D Vector class.
Definition: UT_Vector4.h:166
2D Vector class.
Definition: UT_Vector2.h:149
float fpreal32
Definition: SYS_Types.h:200
UT_Matrix3T< fpreal > UT_Matrix3R
UT_Matrix4T< float > UT_Matrix4
const char * UT_TypeShortName< fpreal32 >()
double fpreal64
Definition: SYS_Types.h:201
unsigned char uint8
Definition: SYS_Types.h:36
UT_Vector4T< fpreal > UT_Vector4R
UT_Vector4T< int32 > UT_Vector4i
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
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.
long long int64
Definition: SYS_Types.h:116
UT_Vector2T< fpreal16 > UT_Vector2H
UT_Matrix3T< fpreal32 > UT_Matrix3F
UT_Vector3T< fpreal64 > UT_Vector3D
signed char int8
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 >()
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
short int16
Definition: SYS_Types.h:37
UT_Vector3T< fpreal > UT_Vector3R
fpreal64 fpreal
Definition: SYS_Types.h:277
#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
UT_Matrix2T< fpreal32 > UT_Matrix2F
UT_Vector2T< int32 > UT_Vector2i
const V< float > UTconvertToF(const V< FT > &v)
UT_Matrix3T< fpreal64 > UT_Matrix3D