public static MDagPath CreateJointsCurve(MSelectionList jointDagPathList) { int count = (int)jointDagPathList.length; string curveName = "curve_"; MVector[] vectors = new MVector[count]; for (int i = 0; i < count; i++) { MDagPath dagPath = new MDagPath(); jointDagPathList.getDagPath((uint)i, dagPath); if (i == 0) { curveName += dagPath.partialPathName + "_"; } else if (i == count - 1) { curveName += dagPath.partialPathName; } MFnTransform ptTrans = new MFnTransform(dagPath); vectors[i] = ptTrans.getTranslation(MSpace.Space.kWorld); //MGlobal.displayInfo(BasicFunc::ToCMDSParamStr(vectors[i])); } MDagPath curveDagPath = BasicFunc.CreateCurve(vectors, curveName); //MGlobal.displayInfo("create Finish"); return(curveDagPath); }
public static MDagPath CreateLoopCircleByPos(List <MVector> posList, bool reOrder = true, bool closedArc = true, string ctlName = "loopCircle_0") { List <MVector> vectors = new List <MVector>(posList); if (vectors.Count < 2) { return(default(MDagPath)); } if (reOrder) { int count = vectors.Count; //List<float> radians = new List<float>(); Dictionary <MVector, float> radianDic = new Dictionary <MVector, float>(); for (int i = 0; i < count; i++) { radianDic.Add(vectors[i], BasicFunc.CalPosRadian(vectors[i])); } vectors.Sort((a, b) => { if (radianDic[a] > radianDic[b]) { return(1); } else { return(-1); } }); } if (closedArc) { vectors.Add(vectors[0]); } return(BasicFunc.CreateCurve(vectors.ToArray(), ctlName, 1, closedArc ? MFnNurbsCurve.Form.kClosed : MFnNurbsCurve.Form.kOpen)); }