CreateFilletCurves
Rhino.Geometry.Curve
Back to CreateFilletCurves on Curve
Examples
using Rhino;
using Rhino.Commands;
using Rhino.Geometry;
using Rhino.Input;
using Rhino.DocObjects;
using Rhino.Input.Custom;
namespace examples_cs
{
public class FilletCurvesCommand : Command
{
public override string EnglishName { get { return "csFilletCurves"; } }
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
var gc1 = new GetObject();
gc1.DisablePreSelect();
gc1.SetCommandPrompt("Select first curve to fillet (close to the end you want to fillet)");
gc1.GeometryFilter = ObjectType.Curve;
gc1.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve;
gc1.Get();
if (gc1.CommandResult() != Result.Success)
return gc1.CommandResult();
var curve1_obj_ref = gc1.Object(0);
var curve1 = curve1_obj_ref.Curve();
if (curve1 == null) return Result.Failure;
var curve1_point_near_end = curve1_obj_ref.SelectionPoint();
if (curve1_point_near_end == Point3d.Unset)
return Result.Failure;
var gc2 = new GetObject();
gc2.DisablePreSelect();
gc2.SetCommandPrompt("Select second curve to fillet (close to the end you want to fillet)");
gc2.GeometryFilter = ObjectType.Curve;
gc2.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve;
gc2.Get();
if (gc2.CommandResult() != Result.Success)
return gc2.CommandResult();
var curve2_obj_ref = gc2.Object(0);
var curve2 = curve2_obj_ref.Curve();
if (curve2 == null) return Result.Failure;
var curve2_point_near_end = curve2_obj_ref.SelectionPoint();
if (curve2_point_near_end == Point3d.Unset)
return Result.Failure;
double radius = 0;
var rc = RhinoGet.GetNumber("fillet radius", false, ref radius);
if (rc != Result.Success) return rc;
var join = false;
var trim = true;
var arc_extension = true;
var fillet_curves = Curve.CreateFilletCurves(curve1, curve1_point_near_end, curve2, curve2_point_near_end, radius,
join, trim, arc_extension, doc.ModelAbsoluteTolerance, doc.ModelAngleToleranceDegrees);
if (fillet_curves == null )
return Result.Failure;
foreach(var fillet_curve in fillet_curves)
doc.Objects.AddCurve(fillet_curve);
doc.Views.Redraw();
return rc;
}
}
}
from Rhino import *
from Rhino.Commands import *
from Rhino.Geometry import *
from Rhino.Input import *
from Rhino.DocObjects import *
from Rhino.Input.Custom import *
from scriptcontext import doc
def RunCommand():
gc1 = GetObject()
gc1.DisablePreSelect()
gc1.SetCommandPrompt("Select first curve to fillet (close to the end you want to fillet)")
gc1.GeometryFilter = ObjectType.Curve
gc1.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve
gc1.Get()
if gc1.CommandResult() != Result.Success:
return gc1.CommandResult()
curve1_obj_ref = gc1.Object(0)
curve1 = curve1_obj_ref.Curve()
if curve1 == None: return Result.Failure
curve1_point_near_end = curve1_obj_ref.SelectionPoint()
if curve1_point_near_end == Point3d.Unset:
return Result.Failure
gc2 = GetObject()
gc2.DisablePreSelect()
gc2.SetCommandPrompt("Select second curve to fillet (close to the end you want to fillet)")
gc2.GeometryFilter = ObjectType.Curve
gc2.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve
gc2.Get()
if gc2.CommandResult() != Result.Success:
return gc2.CommandResult()
curve2_obj_ref = gc2.Object(0)
curve2 = curve2_obj_ref.Curve()
if curve2 == None: return Result.Failure
curve2_point_near_end = curve2_obj_ref.SelectionPoint()
if curve2_point_near_end == Point3d.Unset:
return Result.Failure
radius = 0.0
rc, radius = RhinoGet.GetNumber("fillet radius", False, radius)
if rc != Result.Success: return rc
fillet_curve = Curve.CreateFilletCurves(curve1, curve1_point_near_end, curve2, curve2_point_near_end, radius,
True, True, True, doc.ModelAbsoluteTolerance, doc.ModelAngleToleranceDegrees)
if fillet_curve == None or fillet_curve.Length != 1:
return Result.Failure
doc.Objects.AddCurve(fillet_curve[0])
doc.Views.Redraw()
return rc
if __name__ == "__main__":
RunCommand()
Imports Rhino
Imports Rhino.Commands
Imports Rhino.Geometry
Imports Rhino.Input
Imports Rhino.DocObjects
Imports Rhino.Input.Custom
Namespace examples_vb
Public Class FilletCurvesCommand
Inherits Command
Public Overrides ReadOnly Property EnglishName() As String
Get
Return "vbFilletCurves"
End Get
End Property
Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result
Dim gc1 = New GetObject()
gc1.DisablePreSelect()
gc1.SetCommandPrompt("Select first curve to fillet (close to the end you want to fillet)")
gc1.GeometryFilter = ObjectType.Curve
gc1.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve
gc1.[Get]()
If gc1.CommandResult() <> Result.Success Then
Return gc1.CommandResult()
End If
Dim curve1_obj_ref = gc1.[Object](0)
Dim curve1 = curve1_obj_ref.Curve()
If curve1 Is Nothing Then
Return Result.Failure
End If
Dim curve1_point_near_end = curve1_obj_ref.SelectionPoint()
If curve1_point_near_end = Point3d.Unset Then
Return Result.Failure
End If
Dim gc2 = New GetObject()
gc2.DisablePreSelect()
gc2.SetCommandPrompt("Select second curve to fillet (close to the end you want to fillet)")
gc2.GeometryFilter = ObjectType.Curve
gc2.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve
gc2.[Get]()
If gc2.CommandResult() <> Result.Success Then
Return gc2.CommandResult()
End If
Dim curve2_obj_ref = gc2.[Object](0)
Dim curve2 = curve2_obj_ref.Curve()
If curve2 Is Nothing Then
Return Result.Failure
End If
Dim curve2_point_near_end = curve2_obj_ref.SelectionPoint()
If curve2_point_near_end = Point3d.Unset Then
Return Result.Failure
End If
Dim radius As Double = 0
Dim rc = RhinoGet.GetNumber("fillet radius", False, radius)
If rc <> Result.Success Then
Return rc
End If
Dim fillet_curve = Curve.CreateFilletCurves(curve1, curve1_point_near_end, curve2, curve2_point_near_end, radius, True, _
True, True, doc.ModelAbsoluteTolerance, doc.ModelAngleToleranceDegrees)
If fillet_curve Is Nothing OrElse fillet_curve.Length <> 1 Then
Return Result.Failure
End If
doc.Objects.AddCurve(fillet_curve(0))
doc.Views.Redraw()
Return rc
End Function
End Class
End Namespace