54 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
63 const Matrix3d &rest_basis,
64 const Matrix3d &basis,
170 virtual Vector3d
Axis(
int dof)
const = 0;
199 virtual void Scale(
double scale);
244 Vector3d
Axis(
int dof)
const;
252 void SetLimit(
int axis,
double lmin,
double lmax);
256 Matrix3d m_new_basis;
257 bool m_limit_x, m_limit_y, m_limit_z;
258 double m_min[2], m_max[2];
259 double m_min_y, m_max_y, m_max_x, m_max_z, m_offset_x, m_offset_z;
260 double m_locked_ax, m_locked_ay, m_locked_az;
277 return Vector3d(0, 0, 0);
290 Vector3d
Axis(
int dof)
const;
296 void SetLimit(
int axis,
double lmin,
double lmax);
298 void SetBasis(
const Matrix3d &basis);
302 double m_angle, m_new_angle;
312 Vector3d
Axis(
int dof)
const;
318 void SetLimit(
int axis,
double lmin,
double lmax);
320 void SetBasis(
const Matrix3d &basis);
323 Matrix3d m_new_basis;
324 bool m_limit_x, m_limit_z;
325 double m_min[2], m_max[2];
326 double m_max_x, m_max_z, m_offset_x, m_offset_z;
335 Vector3d
Axis(
int dof)
const;
341 void SetLimit(
int axis,
double lmin,
double lmax);
343 void SetBasis(
const Matrix3d &basis);
348 double m_twist, m_angle, m_new_twist, m_new_angle;
349 double m_cos_twist, m_sin_twist;
351 bool m_limit, m_limit_twist;
352 double m_min, m_max, m_min_twist, m_max_twist;
362 Vector3d
Axis(
int dof)
const;
369 void SetLimit(
int axis,
double lmin,
double lmax);
371 void Scale(
double scale);
375 bool m_axis_enabled[3], m_limit[3];
376 Vector3d m_new_translation;
377 double m_min[3], m_max[3];
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
Vector3d Axis(int dof) const
void SetLimit(int axis, double lmin, double lmax)
IK_QElbowSegment(int axis)
void Lock(int dof, IK_QJacobian &jacobian, Vector3d &delta)
void SetWeight(int axis, double weight)
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp)
void SetBasis(const Matrix3d &basis)
bool UpdateAngle(const IK_QJacobian &, Vector3d &, bool *)
void SetBasis(const Matrix3d &)
void SetWeight(int axis, double weight)
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp)
Vector3d Axis(int dof) const
IK_QRevoluteSegment(int axis)
void SetBasis(const Matrix3d &basis)
void Lock(int dof, IK_QJacobian &jacobian, Vector3d &delta)
void SetLimit(int axis, double lmin, double lmax)
virtual void SetBasis(const Matrix3d &basis)
const Vector3d GlobalStart() const
virtual EIGEN_MAKE_ALIGNED_OPERATOR_NEW ~IK_QSegment()
const Affine3d & GlobalTransform() const
const Vector3d GlobalEnd() const
virtual void Lock(int, IK_QJacobian &, Vector3d &)
virtual void UpdateAngleApply()=0
virtual bool UpdateAngle(const IK_QJacobian &, Vector3d &, bool *)=0
Vector3d m_orig_translation
IK_QSegment * Composite() const
IK_QSegment * Child() const
IK_QSegment * Sibling() const
void ScaleWeight(int dof, double scale)
bool Translational() const
bool Locked(int dof) const
void UpdateTransform(const Affine3d &global)
const double MaxExtension() const
virtual Vector3d Axis(int dof) const =0
Affine3d m_global_transform
virtual void Scale(double scale)
virtual void SetWeight(int, double)
void SetComposite(IK_QSegment *seg)
Matrix3d BasisChange() const
IK_QSegment(int num_DoF, bool translational)
double Weight(int dof) const
void PrependBasis(const Matrix3d &mat)
void SetParent(IK_QSegment *parent)
void SetDoFId(int dof_id)
IK_QSegment * m_composite
void RemoveChild(IK_QSegment *child)
virtual void SetLimit(int, double, double)
IK_QSegment * Parent() const
Vector3d TranslationChange() const
void SetTransform(const Vector3d &start, const Matrix3d &rest_basis, const Matrix3d &basis, const double length)
void SetWeight(int axis, double weight)
Vector3d Axis(int dof) const
void Lock(int dof, IK_QJacobian &jacobian, Vector3d &delta)
bool ComputeClampRotation(Vector3d &clamp)
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp)
void SetLimit(int axis, double lmin, double lmax)
void SetWeight(int axis, double weight)
void Lock(int dof, IK_QJacobian &jacobian, Vector3d &delta)
Vector3d Axis(int dof) const
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp)
void SetLimit(int axis, double lmin, double lmax)
void SetBasis(const Matrix3d &basis)
void SetWeight(int axis, double weight)
void Lock(int, IK_QJacobian &, Vector3d &)
Vector3d Axis(int dof) const
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp)
void SetLimit(int axis, double lmin, double lmax)
ccl_device_inline int clamp(int a, int mn, int mx)