Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    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);
    }
Esempio n. 3
0
    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);
    }