Extend Curve
Demonstrates how to extend a curve object to user-selected boundary objects.
partial class Examples
{
public static Result ExtendCurve(RhinoDoc doc)
{
ObjRef[] boundary_obj_refs;
var rc = RhinoGet.GetMultipleObjects("Select boundary objects", false, ObjectType.AnyObject, out boundary_obj_refs);
if (rc != Result.Success)
return rc;
if (boundary_obj_refs == null || boundary_obj_refs.Length == 0)
return Result.Nothing;
var gc = new GetObject();
gc.SetCommandPrompt("Select curve to extend");
gc.GeometryFilter = ObjectType.Curve;
gc.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve;
gc.DisablePreSelect ();
gc.Get();
if (gc.CommandResult() != Result.Success)
return gc.CommandResult();
var curve_obj_ref = gc.Object(0);
var curve = curve_obj_ref.Curve();
if (curve == null) return Result.Failure;
double t;
if (!curve.ClosestPoint(curve_obj_ref.SelectionPoint(), out t))
return Result.Failure;
var curve_end = t <= curve.Domain.Mid ? CurveEnd.Start : CurveEnd.End;
var geometry = boundary_obj_refs.Select(obj=> obj.Geometry());
var extended_curve = curve.Extend(curve_end, CurveExtensionStyle.Line, geometry);
if (extended_curve != null && extended_curve.IsValid)
{
if (!doc.Objects.Replace(curve_obj_ref.ObjectId, extended_curve))
return Result.Failure;
doc.Views.Redraw();
}
else
{
RhinoApp.WriteLine("No boundary object was intersected so curve not extended");
return Result.Nothing;
}
return Result.Success;
}
}
Partial Friend Class Examples
Public Shared Function ExtendCurve(ByVal doc As RhinoDoc) As Result
Dim boundary_obj_refs() As ObjRef = Nothing
Dim rc = RhinoGet.GetMultipleObjects("Select boundary objects", False, ObjectType.AnyObject, boundary_obj_refs)
If rc IsNot Result.Success Then
Return rc
End If
If boundary_obj_refs Is Nothing OrElse boundary_obj_refs.Length = 0 Then
Return Result.Nothing
End If
Dim gc = New GetObject()
gc.SetCommandPrompt("Select curve to extend")
gc.GeometryFilter = ObjectType.Curve
gc.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve
gc.DisablePreSelect()
gc.Get()
If gc.CommandResult() <> Result.Success Then
Return gc.CommandResult()
End If
Dim curve_obj_ref = gc.Object(0)
Dim curve = curve_obj_ref.Curve()
If curve Is Nothing Then
Return Result.Failure
End If
Dim t As Double = Nothing
If Not curve.ClosestPoint(curve_obj_ref.SelectionPoint(), t) Then
Return Result.Failure
End If
Dim curve_end = If(t <= curve.Domain.Mid, CurveEnd.Start, CurveEnd.End)
Dim geometry = boundary_obj_refs.Select(Function(obj) obj.Geometry())
Dim extended_curve = curve.Extend(curve_end, CurveExtensionStyle.Line, geometry)
If extended_curve IsNot Nothing AndAlso extended_curve.IsValid Then
If Not doc.Objects.Replace(curve_obj_ref.ObjectId, extended_curve) Then
Return Result.Failure
End If
doc.Views.Redraw()
Else
RhinoApp.WriteLine("No boundary object was intersected so curve not extended")
Return Result.Nothing
End If
Return Result.Success
End Function
End Class
from Rhino import *
from Rhino.Geometry import *
from Rhino.DocObjects import *
from Rhino.Commands import *
from Rhino.Input import *
from Rhino.Input.Custom import *
from scriptcontext import doc
def RunCommand():
rc, boundary_obj_refs = RhinoGet.GetMultipleObjects("Select boundary objects", False, ObjectType.AnyObject)
if rc != Result.Success:
return rc
if boundary_obj_refs == None or boundary_obj_refs.Length == 0:
return Result.Nothing
gc = GetObject()
gc.SetCommandPrompt("Select curve to extend")
gc.GeometryFilter = ObjectType.Curve
gc.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve
gc.Get()
if gc.CommandResult() != Result.Success:
return gc.CommandResult()
curve_obj_ref = gc.Object(0)
curve = curve_obj_ref.Curve()
if curve == None: return Result.Failure
b, t = curve.ClosestPoint(curve_obj_ref.SelectionPoint())
if not b: return Result.Failure
curve_end = CurveEnd.Start if t <= curve.Domain.Mid else CurveEnd.End
geometry = [obj.Geometry() for obj in boundary_obj_refs]
extended_curve = curve.Extend(curve_end, CurveExtensionStyle.Line, geometry)
if extended_curve != None and extended_curve.IsValid:
if not doc.Objects.Replace(curve_obj_ref.ObjectId, extended_curve):
return Result.Failure
doc.Views.Redraw()
return Result.Success
else:
RhinoApp.WriteLine("No boundary object was intersected so curve not extended")
return Result.Nothing
if __name__ == "__main__":
RunCommand()