All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
dualQuatd.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_DUALQUATD_H
12#define PXR_BASE_GF_DUALQUATD_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
22#include "pxr/base/gf/quatd.h"
23#include "pxr/base/tf/hash.h"
24
25#include <iosfwd>
26
27PXR_NAMESPACE_OPEN_SCOPE
28
29template <>
30struct GfIsGfDualQuat<class GfDualQuatd> { static const bool value = true; };
31
33double GfDot(const GfDualQuatd& dq1, const GfDualQuatd& dq2);
34
35
49class GfDualQuatd final
50{
51 public:
52 typedef double ScalarType;
53
56
64 explicit GfDualQuatd( double realVal ) : _real( realVal ), _dual( 0 ) {}
65
69 explicit GfDualQuatd( const GfQuatd &real )
70 : _real( real ), _dual( 0 ) {
71 }
72
74 GfDualQuatd( const GfQuatd &real, const GfQuatd &dual )
75 : _real( real ), _dual( dual ) {
76 }
77
79 GfDualQuatd( const GfQuatd &rotation, const GfVec3d &translation )
80 : _real( rotation ) {
81 SetTranslation( translation );
82 }
83
85 GF_API
86 GfDualQuatd(const GfDualQuatf &other);
88 GF_API
89 GfDualQuatd(const GfDualQuath &other);
90
92 void SetReal(const GfQuatd &real) {
93 _real = real;
94 }
95
97 void SetDual(const GfQuatd &dual) {
98 _dual = dual;
99 }
100
102 const GfQuatd &GetReal() const {
103 return _real;
104 }
105
107 const GfQuatd &GetDual() const {
108 return _dual;
109 }
110
115 }
116
121 }
122
124 GF_API
125 std::pair<double, double> GetLength() const;
126
130 GF_API
132
137 GF_API
138 std::pair<double, double> Normalize(double eps = GF_MIN_VECTOR_LENGTH);
139
141 GF_API
143
145 GF_API
147
149 GF_API
150 void SetTranslation( const GfVec3d &translation );
151
153 GF_API
155
157 friend inline size_t hash_value(const GfDualQuatd &dq) {
158 return TfHash::Combine(dq.GetReal(), dq.GetDual());
159 }
160
163 bool operator ==(const GfDualQuatd &dq) const {
164 return (GetReal() == dq.GetReal() &&
165 GetDual() == dq.GetDual());
166 }
167
170 bool operator !=(const GfDualQuatd &dq) const {
171 return ! (*this == dq);
172 }
173
176 _real += dq._real;
177 _dual += dq._dual;
178 return *this;
179 }
180
183 _real -= dq._real;
184 _dual -= dq._dual;
185 return *this;
186 }
187
189 GF_API
191
194 _real *= s;
195 _dual *= s;
196 return *this;
197 }
198
201 return (*this) *= 1.0 / s;
202 }
203
206 const GfDualQuatd &dq2) {
207 GfDualQuatd dqt = dq1;
208 return dqt += dq2;
209 }
210
213 const GfDualQuatd &dq2) {
214 GfDualQuatd dqt = dq1;
215 return dqt -= dq2;
216 }
217
220 const GfDualQuatd &dq2) {
221 GfDualQuatd dqt = dq1;
222 return dqt *= dq2;
223 }
224
226 friend GfDualQuatd operator *(const GfDualQuatd &dq, double s) {
227 GfDualQuatd dqt = dq;
228 return dqt *= s;
229 }
230
232 friend GfDualQuatd operator *(double s, const GfDualQuatd &dq) {
233 GfDualQuatd dqt = dq;
234 return dqt *= s;
235 }
236
238 friend GfDualQuatd operator /(const GfDualQuatd &dq, double s) {
239 GfDualQuatd dqt = dq;
240 return dqt /= s;
241 }
242
244 GF_API
245 GfVec3d Transform(const GfVec3d &vec) const;
246
247 private:
248 GfQuatd _real; // for rotation
249 GfQuatd _dual; // for translation
250};
251
252
255GF_API std::ostream &operator<<(std::ostream &out, const GfDualQuatd &dq);
256
257
259inline double
260GfDot(const GfDualQuatd& dq1, const GfDualQuatd& dq2) {
261 return GfDot(dq1.GetReal(), dq2.GetReal()) + GfDot(dq1.GetDual(), dq2.GetDual());
262}
263
264PXR_NAMESPACE_CLOSE_SCOPE
265
266#endif // PXR_BASE_GF_DUALQUATD_H
Declares Gf types.
Basic type: a real part quaternion and a dual part quaternion.
Definition: dualQuatd.h:50
GF_API GfDualQuatd(const GfDualQuath &other)
Implicitly convert from GfDualQuath.
GF_API std::pair< double, double > GetLength() const
Returns geometric length of this dual quaternion.
GF_API std::pair< double, double > Normalize(double eps=GF_MIN_VECTOR_LENGTH)
Normalizes this dual quaternion in place.
GF_API GfDualQuatd GetConjugate() const
Returns the conjugate of this dual quaternion.
bool operator==(const GfDualQuatd &dq) const
Component-wise dual quaternion equality test.
Definition: dualQuatd.h:163
const GfQuatd & GetDual() const
Returns the dual part of the dual quaternion.
Definition: dualQuatd.h:107
GfDualQuatd & operator/=(double s)
Scales this dual quaternion by 1 / s.
Definition: dualQuatd.h:200
GF_API GfDualQuatd GetNormalized(double eps=GF_MIN_VECTOR_LENGTH) const
Returns a normalized (unit-length) version of this dual quaternion.
void SetReal(const GfQuatd &real)
Sets the real part of the dual quaternion.
Definition: dualQuatd.h:92
GfDualQuatd(const GfQuatd &real, const GfQuatd &dual)
This constructor initializes the real and dual parts.
Definition: dualQuatd.h:74
GfDualQuatd & operator-=(const GfDualQuatd &dq)
Component-wise unary difference operator.
Definition: dualQuatd.h:182
GfDualQuatd & operator+=(const GfDualQuatd &dq)
Component-wise unary sum operator.
Definition: dualQuatd.h:175
friend GfDualQuatd operator/(const GfDualQuatd &dq, double s)
Returns the product of dual quaternion dq and scalar 1 / s.
Definition: dualQuatd.h:238
GF_API GfVec3d GetTranslation() const
Get the translation component of this dual quaternion.
friend GfDualQuatd operator+(const GfDualQuatd &dq1, const GfDualQuatd &dq2)
Component-wise binary sum operator.
Definition: dualQuatd.h:205
GfDualQuatd(const GfQuatd &real)
Initialize the real part to real quaternion and the imaginary part to zero quaternion.
Definition: dualQuatd.h:69
GF_API GfDualQuatd GetInverse() const
Returns the inverse of this dual quaternion.
GF_API GfDualQuatd(const GfDualQuatf &other)
Implicitly convert from GfDualQuatf.
const GfQuatd & GetReal() const
Returns the real part of the dual quaternion.
Definition: dualQuatd.h:102
friend GfDualQuatd operator*(const GfDualQuatd &dq1, const GfDualQuatd &dq2)
Returns the product of dual quaternions dq1 and dq2.
Definition: dualQuatd.h:219
GfDualQuatd(const GfQuatd &rotation, const GfVec3d &translation)
This constructor initializes from a rotation and a translation components.
Definition: dualQuatd.h:79
GF_API GfDualQuatd & operator*=(const GfDualQuatd &dq)
Post-multiplies dual quaternion dq into this dual quaternion.
static GfDualQuatd GetZero()
Returns the zero dual quaternion, which has a real part of (0,0,0,0) and a dual part of (0,...
Definition: dualQuatd.h:113
GF_API GfVec3d Transform(const GfVec3d &vec) const
Transforms the row vector vec by the dual quaternion.
GF_API void SetTranslation(const GfVec3d &translation)
Set the translation component of this dual quaternion.
bool operator!=(const GfDualQuatd &dq) const
Component-wise dual quaternion inequality test.
Definition: dualQuatd.h:170
GfDualQuatd(double realVal)
Initialize the real part to realVal and the imaginary part to zero quaternion.
Definition: dualQuatd.h:64
friend size_t hash_value(const GfDualQuatd &dq)
Hash.
Definition: dualQuatd.h:157
GfDualQuatd()
The default constructor leaves the dual quaternion undefined.
Definition: dualQuatd.h:55
static GfDualQuatd GetIdentity()
Returns the identity dual quaternion, which has a real part of (1,0,0,0) and a dual part of (0,...
Definition: dualQuatd.h:119
void SetDual(const GfQuatd &dual)
Sets the dual part of the dual quaternion.
Definition: dualQuatd.h:97
friend GfDualQuatd operator-(const GfDualQuatd &dq1, const GfDualQuatd &dq2)
Component-wise binary difference operator.
Definition: dualQuatd.h:212
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
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quatd.h:43
static GfQuatd GetIdentity()
Return the identity quaternion, with real coefficient 1 and an imaginary coefficients all zero.
Definition: quatd.h:85
static GfQuatd GetZero()
Return the zero quaternion, with real coefficient 0 and an imaginary coefficients all zero.
Definition: quatd.h:81
Basic type for a vector of 3 double components.
Definition: vec3d.h:46
static size_t Combine(Args &&... args)
Produce a hash code by combining the hash codes of several objects.
Definition: hash.h:475
double GfDot(const GfDualQuatd &dq1, const GfDualQuatd &dq2)
Return the dot (inner) product of two dual quaternions.
Definition: dualQuatd.h:260
#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].
A metafunction with a static const bool member 'value' that is true for GfDualQuat types and false fo...
Definition: traits.h:35