public static BezierGroup Transformation(BezierGroup bzgroup, Vector3?startPoint = null, Vector3?startDirection = null, Vector3?symmetryPoint = null, Vector3?symmetryAxis = null) { BezierGroup newGroup = new BezierGroup(); for (int i = 0; i < bzgroup.Count; i++) { Bezier bz = new Bezier(bzgroup[i].P0, bzgroup[i].P1, bzgroup[i].P2, bzgroup[i].P3); // 如果 symmetryPoint 和 symmetryAxis 同时存在, 优先处理 symmetryPoint. if (symmetryPoint.HasValue) { bz.SymmetryTranslateByPoint((Vector3)symmetryPoint); } if (symmetryAxis.HasValue) { bz.SymmetryTranslateByAxis((Vector3)symmetryAxis); } if (startPoint.HasValue || startDirection.HasValue) { if (i == 0) { bz.TranslateTo(startPoint, startDirection); } else { bz.TranslateTo(newGroup[-1].P3, newGroup[-1].P3 - newGroup[-1].P2); } } newGroup.AddBizer(bz); } return(newGroup); }
public static BezierGroup FromJsonData(JsonObject data) { BezierGroup bzg = new BezierGroup(); List <string> keys = new List <string>(); foreach (var k in data.Keys) { keys.Add((string)k); } keys.Sort(); List <Vector3> tempP = new List <Vector3>(); for (int i = 0; i < keys.Count; i++) { string k = keys[i]; List <object> xy = (List <object>)data[k]; Vector3 p = new Vector3((float)xy[0], (float)xy[1]); tempP.Add(p); if (tempP.Count == 4) { var bz = new Bezier(tempP[0], tempP[1], tempP[2], tempP[3]); bzg.AddBizer(bz); tempP.Clear(); tempP.Add(p); } } return(bzg); }
public static BezierGroup Reverse(BezierGroup bzgroup) { BezierGroup newGroup = new BezierGroup(); for (int i = bzgroup.Count - 1; i >= 0; i--) { Bezier bz = new Bezier(bzgroup[i].P3, bzgroup[i].P2, bzgroup[i].P1, bzgroup[i].P0); newGroup.AddBizer(bz); } return(newGroup); }