void IK_SetStiffness(IK_Segment *seg, IK_SegmentAxis axis, float stiffness) { if (stiffness < 0.0f) return; if (stiffness > (1.0 - IK_STRETCH_STIFF_EPS)) stiffness = (1.0 - IK_STRETCH_STIFF_EPS); IK_QSegment *qseg = (IK_QSegment *)seg; double weight = 1.0f - stiffness; if (axis >= IK_TRANS_X) { if (!qseg->Translational()) { if (qseg->Composite() && qseg->Composite()->Translational()) qseg = qseg->Composite(); else return; } if (axis == IK_TRANS_X) axis = IK_X; else if (axis == IK_TRANS_Y) axis = IK_Y; else axis = IK_Z; } qseg->SetWeight(axis, weight); }
void IK_SetStiffness(IK_Segment *seg, IK_SegmentAxis axis, float stiffness) { if (stiffness < 0.0) return; if (stiffness > 0.999) stiffness = 0.999; IK_QSegment *qseg = (IK_QSegment*)seg; MT_Scalar weight = 1.0-stiffness; if (axis >= IK_TRANS_X) { if(!qseg->Translational()) { if(qseg->Composite() && qseg->Composite()->Translational()) qseg = qseg->Composite(); else return; } if(axis == IK_TRANS_X) axis = IK_X; else if(axis == IK_TRANS_Y) axis = IK_Y; else axis = IK_Z; } qseg->SetWeight(axis, weight); }
void IK_GetTranslationChange(IK_Segment *seg, float *translation_change) { IK_QSegment *qseg = (IK_QSegment *)seg; if (!qseg->Translational() && qseg->Composite()) qseg = qseg->Composite(); const Vector3d& change = qseg->TranslationChange(); translation_change[0] = (float)change[0]; translation_change[1] = (float)change[1]; translation_change[2] = (float)change[2]; }
void IK_SetLimit(IK_Segment *seg, IK_SegmentAxis axis, float lmin, float lmax) { IK_QSegment *qseg = (IK_QSegment *)seg; if (axis >= IK_TRANS_X) { if (!qseg->Translational()) { if (qseg->Composite() && qseg->Composite()->Translational()) qseg = qseg->Composite(); else return; } if (axis == IK_TRANS_X) axis = IK_X; else if (axis == IK_TRANS_Y) axis = IK_Y; else axis = IK_Z; } qseg->SetLimit(axis, lmin, lmax); }
void IK_GetBasisChange(IK_Segment *seg, float basis_change[][3]) { IK_QSegment *qseg = (IK_QSegment*)seg; const MT_Matrix3x3& change = qseg->BasisChange(); if (qseg->Translational() && qseg->Composite()) qseg = qseg->Composite(); // convert from moto row major to blender column major basis_change[0][0] = (float)change[0][0]; basis_change[1][0] = (float)change[0][1]; basis_change[2][0] = (float)change[0][2]; basis_change[0][1] = (float)change[1][0]; basis_change[1][1] = (float)change[1][1]; basis_change[2][1] = (float)change[1][2]; basis_change[0][2] = (float)change[2][0]; basis_change[1][2] = (float)change[2][1]; basis_change[2][2] = (float)change[2][2]; }
void IK_GetBasisChange(IK_Segment *seg, float basis_change[][3]) { IK_QSegment *qseg = (IK_QSegment *)seg; if (qseg->Translational() && qseg->Composite()) qseg = qseg->Composite(); const Matrix3d& change = qseg->BasisChange(); // convert to blender column major basis_change[0][0] = (float)change(0, 0); basis_change[1][0] = (float)change(0, 1); basis_change[2][0] = (float)change(0, 2); basis_change[0][1] = (float)change(1, 0); basis_change[1][1] = (float)change(1, 1); basis_change[2][1] = (float)change(1, 2); basis_change[0][2] = (float)change(2, 0); basis_change[1][2] = (float)change(2, 1); basis_change[2][2] = (float)change(2, 2); }