Loading...
Searching...
No Matches
dualQuath.h
Go to the documentation of this file.
1//
2// Copyright 2021 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
8// This file is generated by a script. Do not edit directly. Edit the
9// dualQuat.template.h file to make changes.
10
11#ifndef PXR_BASE_GF_DUALQUATH_H
12#define PXR_BASE_GF_DUALQUATH_H
13
16
17#include "pxr/pxr.h"
18#include "pxr/base/gf/api.h"
19#include "pxr/base/gf/declare.h"
20#include "pxr/base/gf/traits.h"
21#include "pxr/base/gf/half.h"
22
23#include "pxr/base/gf/quath.h"
24#include "pxr/base/tf/hash.h"
25
26#include <iosfwd>
27
28PXR_NAMESPACE_OPEN_SCOPE
29
30template <>
31struct GfIsGfDualQuat<class GfDualQuath> { static const bool value = true; };
32
34GfHalf GfDot(const GfDualQuath& dq1, const GfDualQuath& dq2);
35
36
50class GfDualQuath final
51{
52 public:
53 typedef GfHalf ScalarType;
54
57 GfDualQuath() = default;
58
66 explicit GfDualQuath( GfHalf realVal ) : _real( realVal ), _dual( 0 ) {}
67
71 explicit GfDualQuath( const GfQuath &real )
72 : _real( real ), _dual( 0 ) {
73 }
74
76 GfDualQuath( const GfQuath &real, const GfQuath &dual )
77 : _real( real ), _dual( dual ) {
78 }
79
81 GfDualQuath( const GfQuath &rotation, const GfVec3h &translation )
82 : _real( rotation ) {
83 SetTranslation( translation );
84 }
85
87 GF_API
88 explicit GfDualQuath(const GfDualQuatd &other);
90 GF_API
91 explicit GfDualQuath(const GfDualQuatf &other);
92
94 void SetReal(const GfQuath &real) {
95 _real = real;
96 }
97
99 void SetDual(const GfQuath &dual) {
100 _dual = dual;
101 }
102
104 const GfQuath &GetReal() const {
105 return _real;
106 }
107
109 const GfQuath &GetDual() const {
110 return _dual;
111 }
112
117 }
118
123 }
124
126 GF_API
127 std::pair<GfHalf, GfHalf> GetLength() const;
128
132 GF_API
134
139 GF_API
140 std::pair<GfHalf, GfHalf> Normalize(GfHalf eps = GF_MIN_VECTOR_LENGTH);
141
143 GF_API
145
147 GF_API
149
151 GF_API
152 void SetTranslation( const GfVec3h &translation );
153
155 GF_API
157
159 friend inline size_t hash_value(const GfDualQuath &dq) {
160 return TfHash::Combine(dq.GetReal(), dq.GetDual());
161 }
162
165 bool operator ==(const GfDualQuath &dq) const {
166 return (GetReal() == dq.GetReal() &&
167 GetDual() == dq.GetDual());
168 }
169
172 bool operator !=(const GfDualQuath &dq) const {
173 return ! (*this == dq);
174 }
175
178 _real += dq._real;
179 _dual += dq._dual;
180 return *this;
181 }
182
185 _real -= dq._real;
186 _dual -= dq._dual;
187 return *this;
188 }
189
191 GF_API
193
196 _real *= s;
197 _dual *= s;
198 return *this;
199 }
200
203 return (*this) *= 1.0 / s;
204 }
205
208 const GfDualQuath &dq2) {
209 GfDualQuath dqt = dq1;
210 return dqt += dq2;
211 }
212
215 const GfDualQuath &dq2) {
216 GfDualQuath dqt = dq1;
217 return dqt -= dq2;
218 }
219
222 const GfDualQuath &dq2) {
223 GfDualQuath dqt = dq1;
224 return dqt *= dq2;
225 }
226
229 GfDualQuath dqt = dq;
230 return dqt *= s;
231 }
232
235 GfDualQuath dqt = dq;
236 return dqt *= s;
237 }
238
241 GfDualQuath dqt = dq;
242 return dqt /= s;
243 }
244
246 GF_API
247 GfVec3h Transform(const GfVec3h &vec) const;
248
249 private:
250 GfQuath _real; // for rotation
251 GfQuath _dual; // for translation
252};
253
254
257GF_API std::ostream &operator<<(std::ostream &out, const GfDualQuath &dq);
258
259
261inline GfHalf
262GfDot(const GfDualQuath& dq1, const GfDualQuath& dq2) {
263 return GfDot(dq1.GetReal(), dq2.GetReal()) + GfDot(dq1.GetDual(), dq2.GetDual());
264}
265
266PXR_NAMESPACE_CLOSE_SCOPE
267
268#endif // PXR_BASE_GF_DUALQUATH_H
Declares Gf types.
Basic type: a real part quaternion and a dual part quaternion.
Definition: dualQuatd.h:50
Basic type: a real part quaternion and a dual part quaternion.
Definition: dualQuatf.h:50
Basic type: a real part quaternion and a dual part quaternion.
Definition: dualQuath.h:51
GF_API GfDualQuath GetConjugate() const
Returns the conjugate of this dual quaternion.
const GfQuath & GetDual() const
Returns the dual part of the dual quaternion.
Definition: dualQuath.h:109
GF_API GfDualQuath(const GfDualQuatf &other)
Construct from GfDualQuatf.
GF_API GfDualQuath GetInverse() const
Returns the inverse of this dual quaternion.
GF_API GfDualQuath & operator*=(const GfDualQuath &dq)
Post-multiplies dual quaternion dq into this dual quaternion.
friend GfDualQuath operator-(const GfDualQuath &dq1, const GfDualQuath &dq2)
Component-wise binary difference operator.
Definition: dualQuath.h:214
friend size_t hash_value(const GfDualQuath &dq)
Hash.
Definition: dualQuath.h:159
GfDualQuath()=default
GfDualQuath value-initializes to zero and performs no default initialization, like float or double.
bool operator!=(const GfDualQuath &dq) const
Component-wise dual quaternion inequality test.
Definition: dualQuath.h:172
GfDualQuath & operator-=(const GfDualQuath &dq)
Component-wise unary difference operator.
Definition: dualQuath.h:184
GF_API std::pair< GfHalf, GfHalf > GetLength() const
Returns geometric length of this dual quaternion.
GfDualQuath(const GfQuath &real, const GfQuath &dual)
This constructor initializes the real and dual parts.
Definition: dualQuath.h:76
GfDualQuath(const GfQuath &rotation, const GfVec3h &translation)
This constructor initializes from a rotation and a translation components.
Definition: dualQuath.h:81
GfDualQuath(const GfQuath &real)
Initialize the real part to real quaternion and the imaginary part to zero quaternion.
Definition: dualQuath.h:71
GF_API std::pair< GfHalf, GfHalf > Normalize(GfHalf eps=GF_MIN_VECTOR_LENGTH)
Normalizes this dual quaternion in place.
const GfQuath & GetReal() const
Returns the real part of the dual quaternion.
Definition: dualQuath.h:104
GfDualQuath(GfHalf realVal)
Initialize the real part to realVal and the imaginary part to zero quaternion.
Definition: dualQuath.h:66
void SetDual(const GfQuath &dual)
Sets the dual part of the dual quaternion.
Definition: dualQuath.h:99
GF_API GfDualQuath GetNormalized(GfHalf eps=GF_MIN_VECTOR_LENGTH) const
Returns a normalized (unit-length) version of this dual quaternion.
static GfDualQuath GetZero()
Returns the zero dual quaternion, which has a real part of (0,0,0,0) and a dual part of (0,...
Definition: dualQuath.h:115
friend GfDualQuath operator+(const GfDualQuath &dq1, const GfDualQuath &dq2)
Component-wise binary sum operator.
Definition: dualQuath.h:207
GF_API GfVec3h GetTranslation() const
Get the translation component of this dual quaternion.
GfDualQuath & operator+=(const GfDualQuath &dq)
Component-wise unary sum operator.
Definition: dualQuath.h:177
GF_API GfDualQuath(const GfDualQuatd &other)
Construct from GfDualQuatd.
friend GfDualQuath operator/(const GfDualQuath &dq, GfHalf s)
Returns the product of dual quaternion dq and scalar 1 / s.
Definition: dualQuath.h:240
GF_API GfVec3h Transform(const GfVec3h &vec) const
Transforms the row vector vec by the dual quaternion.
GfDualQuath & operator/=(GfHalf s)
Scales this dual quaternion by 1 / s.
Definition: dualQuath.h:202
bool operator==(const GfDualQuath &dq) const
Component-wise dual quaternion equality test.
Definition: dualQuath.h:165
void SetReal(const GfQuath &real)
Sets the real part of the dual quaternion.
Definition: dualQuath.h:94
friend GfDualQuath operator*(const GfDualQuath &dq1, const GfDualQuath &dq2)
Returns the product of dual quaternions dq1 and dq2.
Definition: dualQuath.h:221
GF_API void SetTranslation(const GfVec3h &translation)
Set the translation component of this dual quaternion.
static GfDualQuath GetIdentity()
Returns the identity dual quaternion, which has a real part of (1,0,0,0) and a dual part of (0,...
Definition: dualQuath.h:121
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quath.h:44
static GfQuath GetZero()
Return the zero quaternion, with real coefficient 0 and an imaginary coefficients all zero.
Definition: quath.h:83
static GfQuath GetIdentity()
Return the identity quaternion, with real coefficient 1 and an imaginary coefficients all zero.
Definition: quath.h:87
Basic type for a vector of 3 GfHalf components.
Definition: vec3h.h:47
static size_t Combine(Args &&... args)
Produce a hash code by combining the hash codes of several objects.
Definition: hash.h:487
GfHalf GfDot(const GfDualQuath &dq1, const GfDualQuath &dq2)
Return the dot (inner) product of two dual quaternions.
Definition: dualQuath.h:262
#define GF_MIN_VECTOR_LENGTH
This constant is used to determine whether the length of a vector is too small to handle accurately.
Definition: limits.h:17
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].
This header serves to simply bring in the half float datatype and provide a hash_value function.
pxr_half::half GfHalf
A 16-bit floating point data type.
Definition: half.h:26
A metafunction with a static const bool member 'value' that is true for GfDualQuat types and false fo...
Definition: traits.h:35