Exemple #1
0
        public static void Mirror(this Curve2 curve, float mirrorError, Curve2 origin = null)
        {
            var axis   = 0.5f;//mirrorAxis
            var append = new List <Key2>();

            foreach (var k in curve)
            {
                if (Mathf.Abs(k.time - axis) < mirrorError)//points on mirror axis
                {
                    if (origin != null)
                    {
                        var key = origin[curve.IndexOf(k)];
                        key.SetVector(new Vector2(axis, k.value));
                        //key.outMode = key.inMode;
                        //key.outMode = KeyMode.None;
                    }
                    k.SetVector(new Vector2(axis, k.value));
                    k.outTan  = k.inTan.MirrorX(axis);
                    k.outMode = k.inMode;
                }
                else
                {
                    var n = k.Clone();
                    ComTool.Swap(ref n.inTan, ref n.outTan);//先把切线翻转
                    n.inTan  = n.inTan.MirrorX(n.time);
                    n.outTan = n.outTan.MirrorX(n.time);
                    n.SetVector(n.vector.MirrorX(axis)); // 然后SetVector一起拉过去
                    ComTool.Swap(ref n.inMode, ref n.outMode);
                    append.Add(n);
                }
            }
            curve.keys.AddRange(append);
            curve.Sort();
        }
Exemple #2
0
 //public Vector3 normal;
 //public Vector3 na, nb, nc, nd;
 public static Quad ToReverse(Quad quad)
 {
     ComTool.Swap(ref quad.a, ref quad.d);
     return(quad);
 }