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