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