コード例 #1
0
        // Self
        private static Vector2 GetSelfControlPoint(SelfControlPointMode mode, Vector2 point, Vector2 startingPoint, Vector2 startingSelfControlPoint)
        {
            switch (mode)
            {
            case SelfControlPointMode.None: return(point);

            case SelfControlPointMode.Angle:
            {
                Vector2 selfControlPoint = Math.FootPoint(point, startingPoint, startingSelfControlPoint);
                return(selfControlPoint);
            }

            case SelfControlPointMode.Length:
            {
                Vector2 startingSelfVector = startingSelfControlPoint - startingPoint;
                Vector2 selfVector         = point - startingPoint;

                float startingSelfLength = startingSelfVector.Length();
                float selfLength         = selfVector.Length();

                // Vector2 startingSelfUnit = startingSelfVector  / startingSelfLength;
                Vector2 selfUnit = selfVector / selfLength;

                Vector2 selfControlPoint = startingPoint + startingSelfLength * selfUnit;
                return(selfControlPoint);
            }
            }
            return(point);
        }
コード例 #2
0
        /// <summary>
        /// It controls the transformation of node contol point.
        /// </summary>
        /// <param name="mode"> The mode. </param>
        /// <param name="lengthMode"> The length mode. </param>
        /// <param name="angleMode"> The angle mode. </param>
        /// <param name="point"> The point. </param>
        /// <param name="startingNoder"> The starting node. </param>
        /// <param name="isLeftControlPoint"> <see cref="Node.LeftControlPoint"/> or <see cref="Node.RightControlPoint"/>. </param>
        /// <returns> The controlled node. </returns>
        public static void Controller(SelfControlPointMode mode, EachControlPointLengthMode lengthMode, EachControlPointAngleMode angleMode, Vector2 point, Node node, bool isLeftControlPoint = true)
        {
            Vector2 startingPoint = node.StartingPoint;

            Vector2 startingSelfControlPoint = isLeftControlPoint ? node.StartingLeftControlPoint : node.StartingRightControlPoint;
            Vector2 startingEachControlPoint = isLeftControlPoint ? node.StartingRightControlPoint : node.StartingLeftControlPoint;

            Vector2 selfControlPoint = Node.GetSelfControlPoint(mode, point, startingPoint, startingSelfControlPoint);
            Vector2 eachControlPoint = Node.GetEachControlPoint(lengthMode, angleMode, startingPoint, selfControlPoint - startingPoint, startingSelfControlPoint - startingPoint, startingEachControlPoint - startingPoint);

            node.LeftControlPoint  = isLeftControlPoint ? selfControlPoint : eachControlPoint;
            node.RightControlPoint = isLeftControlPoint ? eachControlPoint : selfControlPoint;
        }