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);
}
示例#2
0
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);
}
示例#5
0
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);
}