/// <summary> /// Create a new capsule geometry. /// </summary> /// <param name="resourceCreator"> The resource - creator. </param> /// <param name="transformer"> The ITransformer - LTRB. </param> /// <returns> The product geometry. </returns> public static CanvasGeometry CreateCapsule(ICanvasResourceCreator resourceCreator, ITransformerLTRB transformer) { Vector2 centerLeft = transformer.CenterLeft; Vector2 centerTop = transformer.CenterTop; Vector2 centerRight = transformer.CenterRight; Vector2 centerBottom = transformer.CenterBottom; // Horizontal Vector2 horizontal = transformer.Horizontal; float horizontalLength = horizontal.Length(); Vector2 horizontalUnit = horizontal / horizontalLength; // Vertical Vector2 vertical = transformer.Vertical; float verticalLength = vertical.Length(); if (horizontalLength < verticalLength) { return(TransformerGeometry.CreateEllipse(resourceCreator, transformer)); } return(TransformerGeometry.CreateCapsuleCore(resourceCreator, verticalLength, horizontalUnit, centerTop, centerLeft, centerRight, centerBottom, transformer.LeftTop, transformer.RightTop, transformer.RightBottom, transformer.LeftBottom )); }
/// <summary> /// Create a new capsule geometry. /// </summary> /// <param name="resourceCreator"> The resource - creator. </param> /// <param name="transformerLTRB"> The ITransformer - LTRB. </param> /// <param name="matrix"> The matrix. </param> /// <returns> The product geometry. </returns> public static CanvasGeometry CreateCapsule(ICanvasResourceCreator resourceCreator, ITransformerLTRB transformer, Matrix3x2 matrix) { Vector2 leftTop = Vector2.Transform(transformer.LeftTop, matrix); Vector2 rightTop = Vector2.Transform(transformer.RightTop, matrix); Vector2 rightBottom = Vector2.Transform(transformer.RightBottom, matrix); Vector2 leftBottom = Vector2.Transform(transformer.LeftBottom, matrix); Vector2 centerLeft = Vector2.Transform(transformer.CenterLeft, matrix); Vector2 centerTop = Vector2.Transform(transformer.CenterTop, matrix); Vector2 centerRight = Vector2.Transform(transformer.CenterRight, matrix); Vector2 centerBottom = Vector2.Transform(transformer.CenterBottom, matrix); // Horizontal Vector2 horizontal = (centerRight - centerLeft); float horizontalLength = horizontal.Length(); Vector2 horizontalUnit = horizontal / horizontalLength; // Vertical Vector2 vertical = (centerBottom - centerTop); float verticalLength = vertical.Length(); if (horizontalLength < verticalLength) { return(TransformerGeometry.CreateEllipse(resourceCreator, transformer, matrix)); } return(TransformerGeometry.CreateCapsuleCore(resourceCreator, verticalLength, horizontalUnit, centerTop, centerLeft, centerRight, centerBottom, leftTop, rightTop, rightBottom, leftBottom)); }