Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to access the points in a Graphicspath?

If there is a line added to a Graphicspath with two ends location defined, is it possible to read this pair of points?

Point[] myArray =
         {
             new Point(30,30),
             new Point(60,60),

         };
GraphicsPath myPath2 = new GraphicsPath();
myPath2.AddLines(myArray2);

from myPath2, is there something similar to myPath2.Location that can give me the points (30,30) and (60,60)? Thanks

like image 295
tomu Avatar asked Dec 06 '25 06:12

tomu


1 Answers

Yes it is possible via GraphicsPath.PathPoints but you will need to understand the 2nd array of GraphicsPath.PathTypes!

Only if all the points are added as a simple point array of line coordinates, maybe like this:

List<Point> points = new List<Point>();
..  // add some points!
GraphicsPath gp = new GraphicsPath();
gp.AddLines(points.ToArray());

will you be able to use/modify the points without much hassle.

If you add them via rounded shapes, like..

 gp.AddEllipse(ClientRectangle);

..you will need to understand the various types! The same is true when you add them as other curves gp.AddCurves(points.ToArray());

If you add them as gp.AddRectangle(ClientRectangle); you will get the regular points but with a byte type that says

0 - Indicates that the point is the start of a figure.

So in your case you get at the 1st of your points like this:

Console.WriteLine(gp.PathPoints[1].ToString());

Btw: There is no such thing as a GraphicsPath.Location; but you may find GraphicsPath.GetBounds() useful..

Note that all rounded shapes (including arcs and ellipses!) in fact consist only of bezier points:

3 - Indicates that the point is an endpoint or control point of a cubic Bézier spline

which means that the PathPoints are alternating endpoints and control points.

like image 187
TaW Avatar answered Dec 08 '25 00:12

TaW