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<int16> UT_Int16Array;
123 typedef UT_ValArray<int32> UT_Int32Array;
124 typedef UT_ValArray<int64> UT_Int64Array;
125 
126 typedef UT_ValArray<UT_Vector2R> UT_Vector2RArray;
127 typedef UT_ValArray<UT_Vector3R> UT_Vector3RArray;
128 typedef UT_ValArray<UT_Vector4R> UT_Vector4RArray;
129 typedef UT_ValArray<UT_Vector2F> UT_Vector2FArray;
130 typedef UT_ValArray<UT_Vector3F> UT_Vector3FArray;
131 typedef UT_ValArray<UT_Vector4F> UT_Vector4FArray;
132 typedef UT_ValArray<UT_Vector2D> UT_Vector2DArray;
133 typedef UT_ValArray<UT_Vector3D> UT_Vector3DArray;
134 typedef UT_ValArray<UT_Vector4D> UT_Vector4DArray;
135 typedef UT_ValArray<UT_Vector2H> UT_Vector2HArray;
136 typedef UT_ValArray<UT_Vector3H> UT_Vector3HArray;
137 typedef UT_ValArray<UT_Vector4H> UT_Vector4HArray;
138 
139 typedef UT_ValArray<UT_Vector2I> UT_Vector2IArray;
140 typedef UT_ValArray<UT_Vector3I> UT_Vector3IArray;
141 typedef UT_ValArray<UT_Vector4I> UT_Vector4IArray;
142 typedef UT_ValArray<UT_Vector2i> UT_Vector2iArray;
143 typedef UT_ValArray<UT_Vector3i> UT_Vector3iArray;
144 typedef UT_ValArray<UT_Vector4i> UT_Vector4iArray;
145 
146 typedef UT_ValArray<UT_Matrix2F> UT_Matrix2FArray;
147 typedef UT_ValArray<UT_Matrix3F> UT_Matrix3FArray;
148 typedef UT_ValArray<UT_Matrix4F> UT_Matrix4FArray;
149 typedef UT_ValArray<UT_Matrix2D> UT_Matrix2DArray;
150 typedef UT_ValArray<UT_Matrix3D> UT_Matrix3DArray;
151 typedef UT_ValArray<UT_Matrix4D> UT_Matrix4DArray;
152 
153 typedef UT_ValArray<UT_QuaternionR> UT_QuaternionRArray;
154 typedef UT_ValArray<UT_QuaternionF> UT_QuaternionFArray;
155 typedef UT_ValArray<UT_QuaternionD> UT_QuaternionDArray;
156 
157 typedef UT_ValArray<UT_Vector2> UT_Vector2Array; // deprecated
158 typedef UT_ValArray<UT_Vector3> UT_Vector3Array; // deprecated
159 typedef UT_ValArray<UT_Vector4> UT_Vector4Array; // deprecated
160 
161 
162 //
163 // Type Conversion
164 //
165 template< typename FT, template<typename> class V >
166 inline const V<fpreal>
168  const V<FT>& v
169 )
170 {
171  return V<fpreal>(v);
172 }
173 template< typename FT, template<typename> class V >
174 inline const V<double>
176  const V<FT>& v
177 )
178 {
179  return V<double>(v);
180 }
181 template< typename FT, template<typename> class V >
182 inline const V<float>
184  const V<FT>& v
185 )
186 {
187  return V<float>(v);
188 }
189 #if (SYS_SIZEOF_FPREAL == 4)
190  #define UT_R_FROM_D(VAL) UTconvertToR(VAL)
191  #define UT_R_FROM_F(VAL) (VAL)
192  #define UT_D_FROM_R(VAL) UTconvertToD(VAL)
193  #define UT_F_FROM_R(VAL) (VAL)
194 #elif (SYS_SIZEOF_FPREAL == 8)
195  #define UT_R_FROM_F(VAL) UTconvertToR(VAL)
196  #define UT_R_FROM_D(VAL) (VAL)
197  #define UT_F_FROM_R(VAL) UTconvertToF(VAL)
198  #define UT_D_FROM_R(VAL) (VAL)
199 #else
200  #error Missing FPREAL type
201 #endif
202 
203 
204 template<typename T>
205 static inline const char *UT_TypeShortName();
206 
207 template<>
208 inline const char *UT_TypeShortName<fpreal16>() { return "H"; }
209 
210 template<>
211 inline const char *UT_TypeShortName<fpreal32>() { return "F"; }
212 
213 template<>
214 inline const char *UT_TypeShortName<fpreal64>() { return "D"; }
215 
216 template<>
217 inline const char *UT_TypeShortName<int32>() { return "i"; }
218 
219 template<>
220 inline const char *UT_TypeShortName<int64>() { return "I"; }
221 
222 
223 // Type promotion
224 // This is used to define promoted types for specific use cases.
225 // E.g. We define PreciseType as the promoted version of a type to use in
226 // calculations where we want extra precision (e.g. norm calculations)
227 
228 template<typename T>
230 {
231  // Default precise promotion is T
232  typedef T PreciseType;
233 };
234 
235 template<>
237 {
238  // Use double precision for precise calculations
240 };
241 
242 // Templated typedefs for convenience
243 
244 // e.g. UT_PreciseT<fpreal32> is type fpreal64
245 template <typename T>
247 
248 #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
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