/// <summary> /// Gets the approximate bounds for this line after it has been transformed by the given <paramref name="transform" />. /// The rectangle returned should equal or contain the actual bounds. /// </summary> /// <param name="transform">The transform to apply to the line.</param> /// <returns></returns> public Rectangle GetApproximateBounds(Matrix3x2 transform) { Vector2 start = Vector2.Transform(Start, transform); Vector2 end = Vector2.Transform(End, transform); Vector2 zero = Vector2.Transform(Vector2.Zero, transform); Vector2 rad = Vector2.Transform(Radius, transform); rad = Radius * (Vector2.Distance(zero, rad) / Radius.Length()); return(new Rectangle(start, Vector2.Zero) .Expand(end) .Expand(start + rad) .Expand(end + rad) .Expand(start - rad) .Expand(end - rad)); }
/// <summary> /// Adds the line to the given <paramref name="path" /> after transforming it by the given /// <paramref name="transform" />. /// </summary> /// <param name="path">The path to add the line to.</param> /// <param name="transform">The transform.</param> public void AddToPath(IGraphicsPath path, Matrix3x2 transform) { Vector2 zero = Vector2.Transform(Vector2.Zero, transform); Vector2 rad = Vector2.Transform(Radius, transform); rad = Radius * (Vector2.Distance(zero, rad) / Radius.Length()); Vector2 angVec = Vector2.Transform(new Vector2(0, 1), Matrix3x2.CreateRotation(Angle) * transform); float ang = AngleBetween(new Vector2(0, 1), angVec - zero); path.AddArc( Vector2.Transform(End, transform), rad, ang, Clockwise /* TODO probably need to work this out somehow */, IsLarge); }