Click or drag to resize

CurveExtend Method (CurveEnd, CurveExtensionStyle, IEnumerableGeometryBase)

Extends a curve until it intersects a collection of objects.

Namespace:  Rhino.Geometry
Assembly:  RhinoCommon (in RhinoCommon.dll)
Since: 5.0
Syntax
public Curve Extend(
	CurveEnd side,
	CurveExtensionStyle style,
	IEnumerable<GeometryBase> geometry
)

Parameters

side
Type: Rhino.GeometryCurveEnd
The end of the curve to extend.
style
Type: Rhino.GeometryCurveExtensionStyle
The style or type of extension to use.
geometry
Type: System.Collections.GenericIEnumerableGeometryBase
A collection of objects. Allowable object types are Curve, Surface, Brep.

Return Value

Type: Curve
New extended curve result on success, null on failure.
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;
    }
  }
}
Python
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