Point Casting

Point and PointF classes were originally created in IronSoftware.Drawing to match the functionalities available in other drawing libraries, such as System.Drawing, SixLabors.ImageSharp, Maui.Graphics, and SkiaSharp. As a result, IronSoftware.Drawing enables implicit casting for Point and PointF objects, allowing them to be used across libraries and manipulated by users in the program.

The code snippet below demonstrates how implicit casting is achieved. In the first snippet, an IronSoftware.Drawing.Point object is cast to a Point object from another library, while the second snippet shows the opposite conversion. To perform implicit casting, simply assign the IronSoftware.Drawing.Point object to the variable of the desired library.

// Demonstrating implicit casting with IronSoftware.Drawing

// Snippet 1: From IronSoftware.Drawing.Point to System.Drawing.Point
IronSoftware.Drawing.Point ironPoint = new IronSoftware.Drawing.Point(10.5, 20.5);
System.Drawing.Point systemPoint = ironPoint;
// After casting, the systemPoint coordinates are converted to integers

// Snippet 2: From System.Drawing.Point back to IronSoftware.Drawing.Point
System.Drawing.Point anotherSystemPoint = new System.Drawing.Point(15, 25);
IronSoftware.Drawing.Point anotherIronPoint = anotherSystemPoint;
// anotherIronPoint coordinates are converted back to double
// Demonstrating implicit casting with IronSoftware.Drawing

// Snippet 1: From IronSoftware.Drawing.Point to System.Drawing.Point
IronSoftware.Drawing.Point ironPoint = new IronSoftware.Drawing.Point(10.5, 20.5);
System.Drawing.Point systemPoint = ironPoint;
// After casting, the systemPoint coordinates are converted to integers

// Snippet 2: From System.Drawing.Point back to IronSoftware.Drawing.Point
System.Drawing.Point anotherSystemPoint = new System.Drawing.Point(15, 25);
IronSoftware.Drawing.Point anotherIronPoint = anotherSystemPoint;
// anotherIronPoint coordinates are converted back to double
' Demonstrating implicit casting with IronSoftware.Drawing

' Snippet 1: From IronSoftware.Drawing.Point to System.Drawing.Point
Dim ironPoint As New IronSoftware.Drawing.Point(10.5, 20.5)
Dim systemPoint As System.Drawing.Point = ironPoint
' After casting, the systemPoint coordinates are converted to integers

' Snippet 2: From System.Drawing.Point back to IronSoftware.Drawing.Point
Dim anotherSystemPoint As New System.Drawing.Point(15, 25)
Dim anotherIronPoint As IronSoftware.Drawing.Point = anotherSystemPoint
' anotherIronPoint coordinates are converted back to double
$vbLabelText   $csharpLabel

It's important to note that implicit casting does not apply to all libraries. For instance, casting System.Drawing.PointF to IronSoftware.Drawing.PointF is not possible, as it is not supported by System.Drawing. However, casting IronSoftware.Drawing.Point and PointF to other libraries is possible. When casting from an IronSoftware.Drawing.Point object, the value type of the coordinates changes from System.Double to System.Int32, whereas for PointF, the System.Single value is maintained after casting.

Examples of other libraries available for casting include Microsoft.Maui.Graphics.Point and SkiaSharp.SKPointI.

// Example with other libraries

// From IronSoftware.Drawing.Point to Microsoft.Maui.Graphics.Point
IronSoftware.Drawing.Point ironPointExample = new IronSoftware.Drawing.Point(12.7, 17.8);
Microsoft.Maui.Graphics.Point mauiPoint = ironPointExample;
// mauiPoint maintains its coordinates as System.Int32 after implicit casting

// From IronSoftware.Drawing.PointF to SkiaSharp.SKPoint
IronSoftware.Drawing.PointF ironPointF = new IronSoftware.Drawing.PointF(5.5f, 9.3f);
SkiaSharp.SKPoint skiaPoint = ironPointF;
// skiaPoint maintains its coordinates as System.Single after implicit casting
// Example with other libraries

// From IronSoftware.Drawing.Point to Microsoft.Maui.Graphics.Point
IronSoftware.Drawing.Point ironPointExample = new IronSoftware.Drawing.Point(12.7, 17.8);
Microsoft.Maui.Graphics.Point mauiPoint = ironPointExample;
// mauiPoint maintains its coordinates as System.Int32 after implicit casting

// From IronSoftware.Drawing.PointF to SkiaSharp.SKPoint
IronSoftware.Drawing.PointF ironPointF = new IronSoftware.Drawing.PointF(5.5f, 9.3f);
SkiaSharp.SKPoint skiaPoint = ironPointF;
// skiaPoint maintains its coordinates as System.Single after implicit casting
' Example with other libraries

' From IronSoftware.Drawing.Point to Microsoft.Maui.Graphics.Point
Dim ironPointExample As New IronSoftware.Drawing.Point(12.7, 17.8)
Dim mauiPoint As Microsoft.Maui.Graphics.Point = ironPointExample
' mauiPoint maintains its coordinates as System.Int32 after implicit casting

' From IronSoftware.Drawing.PointF to SkiaSharp.SKPoint
Dim ironPointF As New IronSoftware.Drawing.PointF(5.5F, 9.3F)
Dim skiaPoint As SkiaSharp.SKPoint = ironPointF
' skiaPoint maintains its coordinates as System.Single after implicit casting
$vbLabelText   $csharpLabel