Divide Curve by Segments
Demonstrates how to divide a user-selected curve into length segments.
partial class Examples
{
public static Result DivideCurveBySegments(RhinoDoc doc)
{
const ObjectType filter = ObjectType.Curve;
ObjRef objref;
var rc = RhinoGet.GetOneObject("Select curve to divide", false, filter, out objref);
if (rc != Result.Success || objref == null)
return rc;
var curve = objref.Curve();
if (curve == null || curve.IsShort(RhinoMath.ZeroTolerance))
return Result.Failure;
var segment_count = 2;
rc = RhinoGet.GetInteger("Divide curve into how many segments?", false, ref segment_count);
if (rc != Result.Success)
return rc;
Point3d[] points;
curve.DivideByCount(segment_count, true, out points);
if (points == null)
return Result.Failure;
foreach (var point in points)
doc.Objects.AddPoint(point);
doc.Views.Redraw();
return Result.Success;
}
}
Partial Friend Class Examples
Public Shared Function DivideCurveBySegments(ByVal doc As RhinoDoc) As Result
Const filter As ObjectType = ObjectType.Curve
Dim objref As ObjRef = Nothing
Dim rc = RhinoGet.GetOneObject("Select curve to divide", False, filter, objref)
If rc IsNot Result.Success OrElse objref Is Nothing Then
Return rc
End If
Dim curve = objref.Curve()
If curve Is Nothing OrElse curve.IsShort(RhinoMath.ZeroTolerance) Then
Return Result.Failure
End If
Dim segment_count = 2
rc = RhinoGet.GetInteger("Divide curve into how many segments?", False, segment_count)
If rc IsNot Result.Success Then
Return rc
End If
Dim points() As Point3d = Nothing
curve.DivideByCount(segment_count, True, points)
If points Is Nothing Then
Return Result.Failure
End If
For Each point In points
doc.Objects.AddPoint(point)
Next point
doc.Views.Redraw()
Return Result.Success
End Function
End Class
from Rhino.DocObjects import *
from Rhino.Input import *
from Rhino.Commands import *
from Rhino.Geometry import *
from Rhino import *
from scriptcontext import doc
def RunCommand():
rc, objref = RhinoGet.GetOneObject("Select curve to divide", False, ObjectType.Curve)
if rc != Result.Success or objref == None:
return rc
curve = objref.Curve()
if curve == None or curve.IsShort(RhinoMath.ZeroTolerance):
return Result.Failure
segment_count = 2
rc, segment_count = RhinoGet.GetInteger("Divide curve into how many segments?", False, segment_count)
if rc != Result.Success:
return rc
curve_params = curve.DivideByCount(segment_count, True)
if curve_params == None:
return Result.Failure
points = [curve.PointAt(t) for t in curve_params]
for point in points:
doc.Objects.AddPoint(point)
doc.Views.Redraw()
return Result.Success
if __name__ == "__main__":
RunCommand()