public static MDagPath AddDynamicChainControl(ref MDagPath hairSystem, MSelectionList jointChains = null, ConstantValue.HairPointLockType pointLock = ConstantValue.HairPointLockType.Base) { //get bones if (jointChains == null) { jointChains = BasicFunc.GetSelectedList(); } if (jointChains.length == 0) { return(null); } MDagPath dagPath_startJoint = new MDagPath(), dagPath_endJoint = new MDagPath(); if (jointChains.length == 1) { BasicFunc.Select(jointChains); jointChains.getDagPath((uint)0, dagPath_startJoint); MGlobal.executeCommand("select -hierarchy " + dagPath_startJoint.fullPathName); jointChains = BasicFunc.GetSelectedList(MFn.Type.kJoint); } jointChains.getDagPath(0, dagPath_startJoint); jointChains.getDagPath(jointChains.length - 1, dagPath_endJoint); MDagPath startCurveDagPath = JointProcess.CreateJointsCurve(jointChains); MDagPath outCurveDagPath = CurveToHair(ref hairSystem, startCurveDagPath, pointLock); JointProcess.AddIKHandle(dagPath_startJoint, dagPath_endJoint, JointProcess.IKSolverType.Spline, outCurveDagPath.fullPathName); BasicFunc.SetTransformParent(BasicFunc.GetParent(startCurveDagPath), BasicFunc.GetParent(dagPath_startJoint)); return(outCurveDagPath); }