Defines the extremes of a curve through a flagged enumeration.
Namespace:
Rhino.Geometry
Assembly:
RhinoCommon (in RhinoCommon.dll)
Since: 5.0
Syntax [FlagsAttribute]
public enum CurveEnd
<FlagsAttribute>
Public Enumeration CurveEnd
Members
| Member name | Value | Description |
---|
| None | 0 |
Not the start nor the end.
|
| Start | 1 |
The frontal part of the curve.
|
| End | 2 |
The tail part of the curve.
|
| Both | 3 |
Both the start and the end of the curve.
|
Examples using System.Linq;
using Rhino;
using Rhino.Geometry;
using Rhino.DocObjects;
using Rhino.Commands;
using Rhino.Input;
using Rhino.Input.Custom;
namespace examples_cs
{
public class ExtendCurveCommand : Command
{
public override string EnglishName { get { return "csExtendCurve"; } }
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
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.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;
}
}
}
Imports System.Linq
Imports Rhino
Imports Rhino.Geometry
Imports Rhino.DocObjects
Imports Rhino.Commands
Imports Rhino.Input
Imports Rhino.Input.Custom
Namespace examples_vb
Public Class ExtendCurveCommand
Inherits Command
Public Overrides ReadOnly Property EnglishName() As String
Get
Return "vbExtendCurve"
End Get
End Property
Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result
Dim boundary_obj_refs As ObjRef() = Nothing
Dim rc = RhinoGet.GetMultipleObjects("Select boundary objects", False, ObjectType.AnyObject, boundary_obj_refs)
If rc <> 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.[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
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
End Namespace
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()
See Also