tomu tomu - 3 months ago 15
C# Question

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

TaW TaW
Answer

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.

Comments