Example #1
0
void IK_UI::Update ()
{
	if (!window->visible())
		return;

	Model *mdl = callback->GetMdl ();
	vector<MdlObject*> sel = mdl->GetSelectedObjects ();

	const char *mt = "<multiple types>";
	selJointType->remove(mt);

	if (!sel.empty()) {
		selJointType->activate ();

		int jt = sel.front()->ikInfo.jointType;
		for (uint a=1;a<sel.size();a++) {
			if (sel[a]->ikInfo.jointType != jt) {
				jt = -1;
				break;
			}
		}

		if (jt < 0) {
			multipleTypes = selJointType->add (mt);
			int index = ((fltk::Group*)selJointType)->find (multipleTypes);
			selJointType->value (index);
		} else
			selJointType->value (jt);
	} else
		selJointType->deactivate ();
	window->redraw ();
}
Example #2
0
void IK_UI::JointType (IKJointType jt)
{
	Model *mdl = callback->GetMdl ();
	vector<MdlObject*> sel = mdl->GetSelectedObjects ();

	for (uint a=0;a<sel.size();a++) {
		IKinfo& ik = sel[a]->ikInfo;

		if (ik.jointType == jt)
			continue;

		SAFE_DELETE(ik.joint);
		if (jt == IKJT_Hinge) 
			ik.joint = new HingeJoint;
		else if (jt == IKJT_Universal)
			ik.joint = new UniversalJoint;

		ik.jointType = jt;
	}
}