This document is for a version of USD that is under development. See this page for the current release.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
65 explicit GfDualQuath( GfHalf realVal ) : _real( realVal ), _dual( 0 ) {}
66
70 explicit GfDualQuath( const GfQuath &real )
71 : _real( real ), _dual( 0 ) {
72 }
73
75 GfDualQuath( const GfQuath &real, const GfQuath &dual )
76 : _real( real ), _dual( dual ) {
77 }
78
80 GfDualQuath( const GfQuath &rotation, const GfVec3h &translation )
81 : _real( rotation ) {
82 SetTranslation( translation );
83 }
84
86 GF_API
87 explicit GfDualQuath(const GfDualQuatd &other);
89 GF_API
90 explicit GfDualQuath(const GfDualQuatf &other);
91
93 void SetReal(const GfQuath &real) {
94 _real = real;
95 }
96
98 void SetDual(const GfQuath &dual) {
99 _dual = dual;
100 }
101
103 const GfQuath &GetReal() const {
104 return _real;
105 }
106
108 const GfQuath &GetDual() const {
109 return _dual;
110 }
111
116 }
117
122 }
123
125 GF_API
126 std::pair<GfHalf, GfHalf> GetLength() const;
127
131 GF_API
133
138 GF_API
139 std::pair<GfHalf, GfHalf> Normalize(GfHalf eps = GF_MIN_VECTOR_LENGTH);
140
142 GF_API
144
146 GF_API
148
150 GF_API
151 void SetTranslation( const GfVec3h &translation );
152
154 GF_API
156
158 friend inline size_t hash_value(const GfDualQuath &dq) {
159 return TfHash::Combine(dq.GetReal(), dq.GetDual());
160 }
161
164 bool operator ==(const GfDualQuath &dq) const {
165 return (GetReal() == dq.GetReal() &&
166 GetDual() == dq.GetDual());
167 }
168
171 bool operator !=(const GfDualQuath &dq) const {
172 return ! (*this == dq);
173 }
174
177 _real += dq._real;
178 _dual += dq._dual;
179 return *this;
180 }
181
184 _real -= dq._real;
185 _dual -= dq._dual;
186 return *this;
187 }
188
190 GF_API
192
195 _real *= s;
196 _dual *= s;
197 return *this;
198 }
199
202 return (*this) *= 1.0 / s;
203 }
204
207 const GfDualQuath &dq2) {
208 GfDualQuath dqt = dq1;
209 return dqt += dq2;
210 }
211
214 const GfDualQuath &dq2) {
215 GfDualQuath dqt = dq1;
216 return dqt -= dq2;
217 }
218
221 const GfDualQuath &dq2) {
222 GfDualQuath dqt = dq1;
223 return dqt *= dq2;
224 }
225
228 GfDualQuath dqt = dq;
229 return dqt *= s;
230 }
231
234 GfDualQuath dqt = dq;
235 return dqt *= s;
236 }
237
240 GfDualQuath dqt = dq;
241 return dqt /= s;
242 }
243
245 GF_API
246 GfVec3h Transform(const GfVec3h &vec) const;
247
248 private:
249 GfQuath _real; // for rotation
250 GfQuath _dual; // for translation
251};
252
253
256GF_API std::ostream &operator<<(std::ostream &out, const GfDualQuath &dq);
257
258
260inline GfHalf
261GfDot(const GfDualQuath& dq1, const GfDualQuath& dq2) {
262 return GfDot(dq1.GetReal(), dq2.GetReal()) + GfDot(dq1.GetDual(), dq2.GetDual());
263}
264
265PXR_NAMESPACE_CLOSE_SCOPE
266
267#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:108
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:213
friend size_t hash_value(const GfDualQuath &dq)
Hash.
Definition: dualQuath.h:158
bool operator!=(const GfDualQuath &dq) const
Component-wise dual quaternion inequality test.
Definition: dualQuath.h:171
GfDualQuath()
The default constructor leaves the dual quaternion undefined.
Definition: dualQuath.h:56
GfDualQuath & operator-=(const GfDualQuath &dq)
Component-wise unary difference operator.
Definition: dualQuath.h:183
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:75
GfDualQuath(const GfQuath &rotation, const GfVec3h &translation)
This constructor initializes from a rotation and a translation components.
Definition: dualQuath.h:80
GfDualQuath(const GfQuath &real)
Initialize the real part to real quaternion and the imaginary part to zero quaternion.
Definition: dualQuath.h:70
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:103
GfDualQuath(GfHalf realVal)
Initialize the real part to realVal and the imaginary part to zero quaternion.
Definition: dualQuath.h:65
void SetDual(const GfQuath &dual)
Sets the dual part of the dual quaternion.
Definition: dualQuath.h:98
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:114
friend GfDualQuath operator+(const GfDualQuath &dq1, const GfDualQuath &dq2)
Component-wise binary sum operator.
Definition: dualQuath.h:206
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:176
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:239
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:201
bool operator==(const GfDualQuath &dq) const
Component-wise dual quaternion equality test.
Definition: dualQuath.h:164
void SetReal(const GfQuath &real)
Sets the real part of the dual quaternion.
Definition: dualQuath.h:93
friend GfDualQuath operator*(const GfDualQuath &dq1, const GfDualQuath &dq2)
Returns the product of dual quaternions dq1 and dq2.
Definition: dualQuath.h:220
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:120
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:82
static GfQuath GetIdentity()
Return the identity quaternion, with real coefficient 1 and an imaginary coefficients all zero.
Definition: quath.h:86
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:475
GfHalf GfDot(const GfDualQuath &dq1, const GfDualQuath &dq2)
Return the dot (inner) product of two dual quaternions.
Definition: dualQuath.h:261
#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:24
A metafunction with a static const bool member 'value' that is true for GfDualQuat types and false fo...
Definition: traits.h:35