35 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
44 const Matrix3d &rest_basis,
45 const Matrix3d &basis,
151 virtual Vector3d
Axis(
int dof)
const = 0;
174 virtual void Scale(
double scale);
220 Vector3d
Axis(
int dof)
const override;
228 void SetLimit(
int axis,
double lmin,
double lmax)
override;
229 void SetWeight(
int axis,
double weight)
override;
232 Matrix3d m_new_basis;
233 bool m_limit_x, m_limit_y, m_limit_z;
234 double m_min[2], m_max[2];
235 double m_min_y, m_max_y, m_max_x, m_max_z, m_offset_x, m_offset_z;
236 double m_locked_ax, m_locked_ay, m_locked_az;
251 Vector3d
Axis(
int )
const override
253 return Vector3d(0, 0, 0);
266 Vector3d
Axis(
int dof)
const override;
272 void SetLimit(
int axis,
double lmin,
double lmax)
override;
273 void SetWeight(
int axis,
double weight)
override;
274 void SetBasis(
const Matrix3d &basis)
override;
278 double m_angle, m_new_angle;
288 Vector3d
Axis(
int dof)
const override;
294 void SetLimit(
int axis,
double lmin,
double lmax)
override;
295 void SetWeight(
int axis,
double weight)
override;
296 void SetBasis(
const Matrix3d &basis)
override;
299 Matrix3d m_new_basis;
300 bool m_limit_x, m_limit_z;
301 double m_min[2], m_max[2];
302 double m_max_x, m_max_z, m_offset_x, m_offset_z;
311 Vector3d
Axis(
int dof)
const override;
317 void SetLimit(
int axis,
double lmin,
double lmax)
override;
318 void SetWeight(
int axis,
double weight)
override;
319 void SetBasis(
const Matrix3d &basis)
override;
324 double m_twist, m_angle, m_new_twist, m_new_angle;
325 double m_cos_twist, m_sin_twist;
327 bool m_limit, m_limit_twist;
328 double m_min, m_max, m_min_twist, m_max_twist;
338 Vector3d
Axis(
int dof)
const override;
344 void SetWeight(
int axis,
double weight)
override;
345 void SetLimit(
int axis,
double lmin,
double lmax)
override;
347 void Scale(
double scale)
override;
351 bool m_axis_enabled[3], m_limit[3];
352 Vector3d m_new_translation;
353 double m_min[3], m_max[3];
IK_QElbowSegment(int axis)
void Lock(int dof, IK_QJacobian &jacobian, Vector3d &delta) override
void SetLimit(int axis, double lmin, double lmax) override
void SetWeight(int axis, double weight) override
void UpdateAngleApply() override
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp) override
Vector3d Axis(int dof) const override
void SetBasis(const Matrix3d &basis) override
bool UpdateAngle(const IK_QJacobian &, Vector3d &, bool *) override
void SetBasis(const Matrix3d &) override
void UpdateAngleApply() override
Vector3d Axis(int) const override
void UpdateAngleApply() override
IK_QRevoluteSegment(int axis)
Vector3d Axis(int dof) const override
void SetBasis(const Matrix3d &basis) override
void Lock(int dof, IK_QJacobian &jacobian, Vector3d &delta) override
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp) override
void SetWeight(int axis, double weight) override
void SetLimit(int axis, double lmin, double lmax) override
virtual void SetBasis(const Matrix3d &basis)
const Affine3d & GlobalTransform() const
virtual EIGEN_MAKE_ALIGNED_OPERATOR_NEW ~IK_QSegment()
virtual void Lock(int, IK_QJacobian &, Vector3d &)
virtual void UpdateAngleApply()=0
virtual bool UpdateAngle(const IK_QJacobian &, Vector3d &, bool *)=0
Vector3d m_orig_translation
void ScaleWeight(int dof, double scale)
bool Translational() const
bool Locked(int dof) const
void UpdateTransform(const Affine3d &global)
IK_QSegment * Parent() const
virtual Vector3d Axis(int dof) const =0
Affine3d m_global_transform
virtual void Scale(double scale)
virtual void SetWeight(int, double)
Vector3d GlobalEnd() const
void SetComposite(IK_QSegment *seg)
Matrix3d BasisChange() const
Vector3d GlobalStart() const
IK_QSegment(int num_DoF, bool translational)
double Weight(int dof) const
IK_QSegment * Composite() const
void PrependBasis(const Matrix3d &mat)
void SetParent(IK_QSegment *parent)
void SetDoFId(int dof_id)
IK_QSegment * m_composite
IK_QSegment * Child() const
void RemoveChild(IK_QSegment *child)
IK_QSegment * Sibling() const
virtual void SetLimit(int, double, double)
Vector3d TranslationChange() const
double MaxExtension() const
void SetTransform(const Vector3d &start, const Matrix3d &rest_basis, const Matrix3d &basis, const double length)
void SetWeight(int axis, double weight) override
Vector3d Axis(int dof) const override
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp) override
void UpdateAngleApply() override
void Lock(int dof, IK_QJacobian &jacobian, Vector3d &delta) override
bool ComputeClampRotation(Vector3d &clamp)
void SetLimit(int axis, double lmin, double lmax) override
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp) override
void UpdateAngleApply() override
void SetLimit(int axis, double lmin, double lmax) override
Vector3d Axis(int dof) const override
void Lock(int dof, IK_QJacobian &jacobian, Vector3d &delta) override
void SetWeight(int axis, double weight) override
void SetBasis(const Matrix3d &basis) override
void SetWeight(int axis, double weight) override
void SetLimit(int axis, double lmin, double lmax) override
void UpdateAngleApply() override
void Scale(double scale) override
IK_QTranslateSegment(int axis1)
Vector3d Axis(int dof) const override
bool UpdateAngle(const IK_QJacobian &jacobian, Vector3d &delta, bool *clamp) override
void Lock(int, IK_QJacobian &, Vector3d &) override
constexpr T clamp(T, U, U) RET
float length(VecOp< float, D >) RET