コード例 #1
0
void IK_QSwingSegment::SetLimit(int axis, MT_Scalar lmin, MT_Scalar lmax)
{
	if (lmin >= lmax)
		return;
	
	// clamp and convert to axis angle parameters
	lmin = MT_clamp(lmin, -MT_PI, MT_PI);
	lmax = MT_clamp(lmax, -MT_PI, MT_PI);

	lmin = sin(lmin*0.5);
	lmax = sin(lmax*0.5);

	// put center of ellispe in the middle between min and max
	MT_Scalar offset = 0.5*(lmin + lmax);
	//lmax = lmax - offset;

	if (axis == 0) {
		m_min[0] = -lmax;
		m_max[0] = -lmin;

		m_limit_x = true;
		m_offset_x = offset;
		m_max_x = lmax;
	}
	else if (axis == 2) {
		m_min[1] = -lmax;
		m_max[1] = -lmin;

		m_limit_z = true;
		m_offset_z = offset;
		m_max_z = lmax;
	}
}
コード例 #2
0
void IK_QSphericalSegment::SetLimit(int axis, MT_Scalar lmin, MT_Scalar lmax)
{
	if (lmin >= lmax)
		return;
	
	if (axis == 1) {
		lmin = MT_clamp(lmin, -MT_PI, MT_PI);
		lmax = MT_clamp(lmax, -MT_PI, MT_PI);

		m_min_y = lmin;
		m_max_y = lmax;

		m_limit_y = true;
	}
	else {
		// clamp and convert to axis angle parameters
		lmin = MT_clamp(lmin, -MT_PI, MT_PI);
		lmax = MT_clamp(lmax, -MT_PI, MT_PI);

		lmin = sin(lmin*0.5);
		lmax = sin(lmax*0.5);

		if (axis == 0) {
			m_min[0] = -lmax;
			m_max[0] = -lmin;
			m_limit_x = true;
		}
		else if (axis == 2) {
			m_min[1] = -lmax;
			m_max[1] = -lmin;
			m_limit_z = true;
		}
	}
}
コード例 #3
0
void IK_QRevoluteSegment::SetLimit(int axis, MT_Scalar lmin, MT_Scalar lmax)
{
	if (lmin >= lmax || m_axis != axis)
		return;
	
	// clamp and convert to axis angle parameters
	lmin = MT_clamp(lmin, -MT_PI, MT_PI);
	lmax = MT_clamp(lmax, -MT_PI, MT_PI);

	m_min = lmin;
	m_max = lmax;

	m_limit = true;
}
コード例 #4
0
ファイル: IK_QSegment.cpp プロジェクト: OldBrunet/BGERTPS
void IK_QElbowSegment::SetLimit(int axis, MT_Scalar lmin, MT_Scalar lmax)
{
	if (lmin > lmax)
		return;

	// clamp and convert to axis angle parameters
	lmin = MT_clamp(lmin, -MT_PI, MT_PI);
	lmax = MT_clamp(lmax, -MT_PI, MT_PI);

	if (axis == 1) {
		m_min_twist = lmin;
		m_max_twist = lmax;
		m_limit_twist = true;
	}
	else if (axis == m_axis) {
		m_min = lmin;
		m_max = lmax;
		m_limit = true;
	}
}