NEW: Welcome to the Rhino 6 version of this page! Looking for the older Rhino 5 version?

Sweep Surfaces with Sweep1

Demonstrates how to sweep along a single rail curve.

partial class Examples
{
  public static Rhino.Commands.Result Sweep1(Rhino.RhinoDoc doc)
  {
    Rhino.DocObjects.ObjRef rail_ref;
    var rc = RhinoGet.GetOneObject("Select rail curve", false, Rhino.DocObjects.ObjectType.Curve, out rail_ref);
    if(rc!=Rhino.Commands.Result.Success)
      return rc;

    var rail_crv = rail_ref.Curve();
    if( rail_crv==null )
      return Rhino.Commands.Result.Failure;

    var gx = new Rhino.Input.Custom.GetObject();
    gx.SetCommandPrompt("Select cross section curves");
    gx.GeometryFilter = Rhino.DocObjects.ObjectType.Curve;
    gx.EnablePreSelect(false, true);
    gx.GetMultiple(1,0);
    if( gx.CommandResult() != Rhino.Commands.Result.Success )
      return gx.CommandResult();

    var cross_sections = new List<Rhino.Geometry.Curve>();
    for( int i=0; i<gx.ObjectCount; i++ )
    {
      var crv = gx.Object(i).Curve();
      if( crv!= null)
        cross_sections.Add(crv);
    }
    if( cross_sections.Count<1 )
      return Rhino.Commands.Result.Failure;

    var sweep = new Rhino.Geometry.SweepOneRail();
    sweep.AngleToleranceRadians = doc.ModelAngleToleranceRadians;
    sweep.ClosedSweep = false;
    sweep.SweepTolerance = doc.ModelAbsoluteTolerance;
    sweep.SetToRoadlikeTop();
    var breps = sweep.PerformSweep(rail_crv, cross_sections);
    for( int i=0; i<breps.Length; i++ )
      doc.Objects.AddBrep(breps[i]);
    doc.Views.Redraw();
    return Rhino.Commands.Result.Success;
  }
}
Partial Friend Class Examples
  Public Shared Function Sweep1(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
	Dim rail_ref As Rhino.DocObjects.ObjRef = Nothing
	Dim rc = RhinoGet.GetOneObject("Select rail curve", False, Rhino.DocObjects.ObjectType.Curve, rail_ref)
	If rc IsNot Rhino.Commands.Result.Success Then
	  Return rc
	End If

	Dim rail_crv = rail_ref.Curve()
	If rail_crv Is Nothing Then
	  Return Rhino.Commands.Result.Failure
	End If

	Dim gx = New Rhino.Input.Custom.GetObject()
	gx.SetCommandPrompt("Select cross section curves")
	gx.GeometryFilter = Rhino.DocObjects.ObjectType.Curve
	gx.EnablePreSelect(False, True)
	gx.GetMultiple(1,0)
	If gx.CommandResult() <> Rhino.Commands.Result.Success Then
	  Return gx.CommandResult()
	End If

	Dim cross_sections = New List(Of Rhino.Geometry.Curve)()
	For i As Integer = 0 To gx.ObjectCount - 1
	  Dim crv = gx.Object(i).Curve()
	  If crv IsNot Nothing Then
		cross_sections.Add(crv)
	  End If
	Next i
	If cross_sections.Count<1 Then
	  Return Rhino.Commands.Result.Failure
	End If

	Dim sweep = New Rhino.Geometry.SweepOneRail()
	sweep.AngleToleranceRadians = doc.ModelAngleToleranceRadians
	sweep.ClosedSweep = False
	sweep.SweepTolerance = doc.ModelAbsoluteTolerance
	sweep.SetToRoadlikeTop()
	Dim breps = sweep.PerformSweep(rail_crv, cross_sections)
	For i As Integer = 0 To breps.Length - 1
	  doc.Objects.AddBrep(breps(i))
	Next i
	doc.Views.Redraw()
	Return Rhino.Commands.Result.Success
  End Function
End Class
import rhinoscriptsyntax as rs
import Rhino
import scriptcontext

def Sweep1():
    rail = rs.GetObject("Select rail curve", rs.filter.curve)
    rail_crv = rs.coercecurve(rail)
    if not rail_crv: return

    cross_sections = rs.GetObjects("Select cross section curves", rs.filter.curve)
    if not cross_sections: return
    cross_sections = [rs.coercecurve(crv) for crv in cross_sections]

    sweep = Rhino.Geometry.SweepOneRail()
    sweep.AngleToleranceRadians = scriptcontext.doc.ModelAngleToleranceRadians
    sweep.ClosedSweep = False
    sweep.SweepTolerance = scriptcontext.doc.ModelAbsoluteTolerance
    sweep.SetToRoadlikeTop()
    breps = sweep.PerformSweep(rail_crv, cross_sections)
    for brep in breps: scriptcontext.doc.Objects.AddBrep(brep)
    scriptcontext.doc.Views.Redraw()

if __name__ == "__main__":
    Sweep1()