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)); }