Extend Surface

Demonstrates how to extend a user-specified edge of a surface.

partial class Examples
{
  public static Result ExtendSurface(RhinoDoc doc)
  {
    var go = new Rhino.Input.Custom.GetObject();
    go.SetCommandPrompt("Select edge of surface to extend");
    go.GeometryFilter = ObjectType.EdgeFilter;
    go.GeometryAttributeFilter = GeometryAttributeFilter.EdgeCurve;
    go.Get();
    if (go.CommandResult() != Result.Success)
      return go.CommandResult();
    var obj_ref = go.Object(0);

    var surface = obj_ref.Surface();
    if (surface == null)
    {
      RhinoApp.WriteLine("Unable to extend polysurfaces.");
      return Result.Failure;
    }

    var brep = obj_ref.Brep();
    var face = obj_ref.Face();
    if (brep == null || face == null)
      return Result.Failure;
    if (face.FaceIndex < 0)
      return Result.Failure;

    if( !brep.IsSurface)
    {
      RhinoApp.WriteLine("Unable to extend trimmed surfaces.");
      return Result.Nothing;
    }

    var curve = obj_ref.Curve();

    var trim = obj_ref.Trim();
    if (trim == null)
      return Result.Failure;

    if (trim.TrimType == BrepTrimType.Seam)
    {
      RhinoApp.WriteLine("Unable to extend surface at seam.");
      return Result.Nothing;
    }

    var extended_surface = surface.Extend(trim.IsoStatus, 5.0, true);
    if (extended_surface != null)
    {
      var mybrep = Brep.CreateFromSurface(extended_surface);
      doc.Objects.Replace(obj_ref.ObjectId, mybrep);
      doc.Views.Redraw();
    }
    return Result.Success;
  }
}
Partial Friend Class Examples
  Public Shared Function ExtendSurface(ByVal doc As RhinoDoc) As Result
	Dim go = New Rhino.Input.Custom.GetObject()
	go.SetCommandPrompt("Select edge of surface to extend")
	go.GeometryFilter = ObjectType.EdgeFilter
	go.GeometryAttributeFilter = GeometryAttributeFilter.EdgeCurve
	go.Get()
	If go.CommandResult() <> Result.Success Then
	  Return go.CommandResult()
	End If
	Dim obj_ref = go.Object(0)

	Dim surface = obj_ref.Surface()
	If surface Is Nothing Then
	  RhinoApp.WriteLine("Unable to extend polysurfaces.")
	  Return Result.Failure
	End If

	Dim brep = obj_ref.Brep()
	Dim face = obj_ref.Face()
	If brep Is Nothing OrElse face Is Nothing Then
	  Return Result.Failure
	End If
	If face.FaceIndex < 0 Then
	  Return Result.Failure
	End If

	If Not brep.IsSurface Then
	  RhinoApp.WriteLine("Unable to extend trimmed surfaces.")
	  Return Result.Nothing
	End If

	Dim curve = obj_ref.Curve()

	Dim trim = obj_ref.Trim()
	If trim Is Nothing Then
	  Return Result.Failure
	End If

	If trim.TrimType = BrepTrimType.Seam Then
	  RhinoApp.WriteLine("Unable to extend surface at seam.")
	  Return Result.Nothing
	End If

	Dim extended_surface = surface.Extend(trim.IsoStatus, 5.0, True)
	If extended_surface IsNot Nothing Then
	  Dim mybrep = Brep.CreateFromSurface(extended_surface)
	  doc.Objects.Replace(obj_ref.ObjectId, mybrep)
	  doc.Views.Redraw()
	End If
	Return Result.Success
  End Function
End Class
import Rhino
from Rhino.Input.Custom import *
from Rhino.DocObjects import *
from Rhino.Commands import *
from Rhino.Geometry import *
from scriptcontext import doc

def RunCommand():
  go = Rhino.Input.Custom.GetObject()
  go.SetCommandPrompt("Select edge of surface to extend")
  go.GeometryFilter = ObjectType.EdgeFilter
  go.GeometryAttributeFilter = GeometryAttributeFilter.EdgeCurve
  go.Get()
  if go.CommandResult() != Result.Success:
    return go.CommandResult()
  obj_ref = go.Object(0)

  surface = obj_ref.Surface()
  if surface == None:
    print "Unable to extend polysurfaces."
    return Result.Failure

  brep = obj_ref.Brep()
  face = obj_ref.Face()
  if brep == None or face == None:
    return Result.Failure
  if face.FaceIndex < 0:
    return Result.Failure

  if not brep.IsSurface:
    print "Unable to extend trimmed surfaces."
    return Result.Nothing

  curve = obj_ref.Curve()

  trim = obj_ref.Trim()
  if trim == None:
    return Result.Failure

  if trim.TrimType == BrepTrimType.Seam:
    print "Unable to extend surface at seam."
    return Result.Nothing

  extended_surface = surface.Extend(trim.IsoStatus, 5.0, True)
  if extended_surface != None:
    mybrep = Brep.CreateFromSurface(extended_surface)
    doc.Objects.Replace(obj_ref.ObjectId, mybrep)
    doc.Views.Redraw()
  return Result.Success

if __name__ == "__main__":
  RunCommand()