Any suggestions? Export (0) Print
Expand All

GraphicsPathIterator.NextSubpath Method (GraphicsPath, Boolean)


Gets the next figure (subpath) from the associated path of this GraphicsPathIterator.

Namespace:   System.Drawing.Drawing2D
Assembly:  System.Drawing (in System.Drawing.dll)

public int NextSubpath(
	GraphicsPath path,
	out bool isClosed


Type: System.Drawing.Drawing2D.GraphicsPath

A GraphicsPath that is to have its data points set to match the data points of the retrieved figure (subpath) for this iterator.

Type: System.Boolean

[out] Indicates whether the current subpath is closed. It is true if the if the figure is closed, otherwise it is false.

Return Value

Type: System.Int32

The number of data points in the retrieved figure (subpath). If there are no more figures to retrieve, zero is returned.

The following example is designed for use with Windows Forms, and it requires PaintEventArgse, an OnPaint event object. The code performs the following actions:

  • Creates a GraphicsPath object.

  • Adds three lines, a rectangle, an ellipse, and two markers.

  • Lists the values of all the path's points to the left side of the screen.

  • Creates a GraphicsPathIterator object.

  • Creates a GraphicsPath object, myPathSection, to receive copied points.

  • Calls the NextSubpath method, which iterates to the third subpath (figure) and copies all the points contained in that subpath to the myPathSection path, and also returns the number of points copied to subpathPoints.

  • Lists the subpath number and number of points it contains to the right side of the screen.

public void NextSubpathExample2(PaintEventArgs e)

    // Create a graphics path.
    GraphicsPath myPath = new GraphicsPath();

    // Set up primitives to add to myPath.
    Point[] myPoints = {new Point(20, 20), new Point(120, 120), 
        new Point(20, 120),new Point(20, 20) }; 
    Rectangle myRect = new Rectangle(120, 120, 100, 100);

    // Add 3 lines, a rectangle, an ellipse, and 2 markers.
    myPath.AddEllipse(220, 220, 100, 100);

    // Get the total number of points for the path,

    // and the arrays of the points and types.
    int myPathPointCount = myPath.PointCount;
    PointF[] myPathPoints = myPath.PathPoints;
    byte[] myPathTypes = myPath.PathTypes;

    // Set up variables for listing all of the path's

    // points to the screen.
    int i;
    float j = 20;
    Font myFont = new Font("Arial", 8);
    SolidBrush myBrush = new SolidBrush(Color.Black);

    // List the values of all the path points and types to the screen.
    for(i=0; i<myPathPointCount; i++)
            ", " + myPathPoints[i].Y.ToString() + ", " +

    // Create a GraphicsPathIterator for myPath.
    GraphicsPathIterator myPathIterator = new

    // Rewind the iterator.

    // Create the GraphicsPath section.
    GraphicsPath myPathSection = new GraphicsPath();

    // Iterate to the 3rd subpath and list the number of points therein

    // to the screen.
    int subpathPoints;
    bool IsClosed2;

    // Iterate to the third subpath.
    subpathPoints = myPathIterator.NextSubpath(
        myPathSection, out IsClosed2);
    subpathPoints = myPathIterator.NextSubpath(
        myPathSection, out IsClosed2);
    subpathPoints = myPathIterator.NextSubpath(
        myPathSection, out IsClosed2);

    // Write the number of subpath points to the screen.
    e.Graphics.DrawString("Subpath: 3"  +
        "   Num Points: " +

.NET Framework
Available since 1.1
Return to top
© 2016 Microsoft