Hi,

i am sometimes confused about the different kinds of curves rhino commands return from functions. Specifically - mesh-plane intersection gives me PolylineCurves - and applying the ToPolyline method again returns a PolylineCurve. What is the best way to convert it to a simple Polyline?

Thanks!

If you are using RhinoCommon, feel free to use these Extension Methods for this purpose.

```
// usage
PolyLineCurve plc; // defined elsewhere
Point3dList list = plc.To<Point3dList>();
List<Point3d> anotherList = plc.To<List<Point3d>>();
Polyline polyline = plc.To<Polyline>();
Point3d[] arr = plc.ToArray();
public static class PolylineCurveExtensions
{
/// <summary>
/// Convert a polyline curve to a list of points
/// </summary>
/// <param name="plc"></param>
/// <returns></returns>
public static T To<T>(this PolylineCurve plc)
where T : IList<Point3d>, new()
{
if (plc == null) throw new ArgumentNullException("plc");
T list = new T();
for (int i = 0; i < plc.PointCount; ++i)
{
list.Add(plc.Point(i));
}
return list;
}
/// <summary>
/// Convert a polyline curve to an array of points
/// </summary>
/// <param name="plc"></param>
/// <returns></returns>
public static Point3d[] ToArray(this PolylineCurve plc)
{
if (plc == null) throw new ArgumentNullException("plc");
Point3d[] pts = new Point3d[plc.PointCount];
for(int i = 0; i < plc.PointCount; ++i)
{
pts[i] = plc.Point(i);
}
return pts;
}
}
```

A `Rhino.Geometry.Polyline`

object is nothing more than a collection of `Rhino.Geometry.Point3d`

objects.

A `Rhino.Geometry.Polyline`

is also a data member of a `Rhino.Geometry.PolylineCurve`

object.

As mentioned above, if you want to create a `Rhino.Geometry.Polyline`

object from a `Rhino.Geometry.Polyline`

object, you can do the following:

```
PolylineCurve polyline_curve = ...;
int point_count = polyline_curve.PointCount;
Polyline polyline = new Polyline(point_count);
for (int i = 0; i < polyline_curve.PointCount; ++i)
{
polyline.Add(polyline_curve.Point(i));
}
```

thats basically what i did, just was curious if there is any method to do it in one step.

thanks for the info / code!

I think there should be a method. So I’ve added this as a wish list item.

Hi Dale,

How does this differ from the [curve].TryGetPolyline() Method?

http://4.rhino3d.com/5/rhinocommon/?topic=html/M_Rhino_Geometry_Curve_TryGetPolyline.htm

-Willem

Hi Willem,

Thanks for pointing this out, and may be an option for the developer.

Several types of Curve can have the form of a polyline including a degree 1 `NurbsCurve`

, a `PolylineCurve`

, and a `PolyCurve`

all of whose segments are some form of polyline. The `Curve.IsPolyline`

method tests a curve to see if it can be represented as a polyline and, if so, returns the polyline form.

In this thread, the developer knows he has a `PolylineCurve`

and just want to quickly get the polyline form.

– Dale

i am not sure if i follow correctly, but in case of my mesh-plane intersection, any result can only be a polyline, therefore a tryGetPolyline method should always work?

```
PolylineCurve polyline_curve = ...;
Polyline polyline;
if (polyline_curve.TryGetPolyline(out polyline))
{
// TODO...
}
```

This should be faster than using a for loop to get each point one at a time.