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);
        }
Beispiel #2
0
        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));
        }