M_Rhino_Geometry_Curve_JoinCurves_1 - mcneel/rhinocommon-api-docs GitHub Wiki

Curve.JoinCurves Method (IEnumerable(Curve), Double)

Joins a collection of curve segments together.

Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll) Version: Rhino 6.0

Syntax

C#

public static Curve[] JoinCurves(
	IEnumerable<Curve> inputCurves,
	double joinTolerance
)

VB

Public Shared Function JoinCurves ( 
	inputCurves As IEnumerable(Of Curve),
	joinTolerance As Double
) As Curve()

Parameters

 

inputCurves
Type: System.Collections.Generic.IEnumerable(Curve)
An array, a list or any enumerable set of curve segments to join.
joinTolerance
Type: System.Double
Joining tolerance, i.e. the distance between segment end-points that is allowed.

Return Value

Type: Curve[]
An array of joint curves. This array can be empty.

Exceptions

 

Exception Condition
ArgumentNullException If inputCurves is null.

Examples

VB

Imports Rhino.DocObjects

Partial Class Examples
  Public Shared Function DivideByLengthPoints(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
    Const filter As ObjectType = Rhino.DocObjects.ObjectType.Curve
    Dim objref As Rhino.DocObjects.ObjRef = Nothing
    Dim rc As Rhino.Commands.Result = Rhino.Input.RhinoGet.GetOneObject("Select curve to divide", False, filter, objref)
    If rc <> Rhino.Commands.Result.Success OrElse objref Is Nothing Then
      Return rc
    End If

    Dim crv As Rhino.Geometry.Curve = objref.Curve()
    If crv Is Nothing OrElse crv.IsShort(Rhino.RhinoMath.ZeroTolerance) Then
      Return Rhino.Commands.Result.Failure
    End If

    Dim crv_length As Double = crv.GetLength()
    Dim s As String = String.Format("Curve length is {0:f3}. Segment length", crv_length)

    Dim seg_length As Double = crv_length / 2.0
    rc = Rhino.Input.RhinoGet.GetNumber(s, False, seg_length, 0, crv_length)
    If rc <> Rhino.Commands.Result.Success Then
      Return rc
    End If

    Dim points As Rhino.Geometry.Point3d() = Nothing
    crv.DivideByLength(seg_length, True, points)
    If points Is Nothing Then
      Return Rhino.Commands.Result.Failure
    End If

    For Each point As Rhino.Geometry.Point3d In points
      doc.Objects.AddPoint(point)
    Next

    doc.Views.Redraw()
    Return Rhino.Commands.Result.Success
  End Function
End Class

C#

using Rhino.DocObjects;

partial class Examples
{
  public static Rhino.Commands.Result DivideByLengthPoints(Rhino.RhinoDoc doc)
  {
    const ObjectType filter = Rhino.DocObjects.ObjectType.Curve; 
    Rhino.DocObjects.ObjRef objref;
    Rhino.Commands.Result rc = Rhino.Input.RhinoGet.GetOneObject("Select curve to divide", false, filter, out objref);
    if (rc != Rhino.Commands.Result.Success || objref == null)
      return rc;

    Rhino.Geometry.Curve crv = objref.Curve();
    if (crv == null || crv.IsShort(Rhino.RhinoMath.ZeroTolerance))
      return Rhino.Commands.Result.Failure;

    double crv_length = crv.GetLength();
    string s = string.Format("Curve length is {0:f3}. Segment length", crv_length);

    double seg_length = crv_length / 2.0;
    rc = Rhino.Input.RhinoGet.GetNumber(s, false, ref seg_length, 0, crv_length);
    if (rc != Rhino.Commands.Result.Success)
      return rc;

    Rhino.Geometry.Point3d[] points;
    crv.DivideByLength(seg_length, true, out points);
    if (points == null)
      return Rhino.Commands.Result.Failure;

    foreach (Rhino.Geometry.Point3d point in points)
      doc.Objects.AddPoint(point);

    doc.Views.Redraw();
    return Rhino.Commands.Result.Success;
  }
}

Python

import Rhino
import scriptcontext

def DivideByLengthPoints():
    filter = Rhino.DocObjects.ObjectType.Curve
    rc, objref = Rhino.Input.RhinoGet.GetOneObject("Select curve to divide", False, filter)
    if not objref or rc!=Rhino.Commands.Result.Success: return rc

    crv = objref.Curve()
    if not crv or crv.IsShort(Rhino.RhinoMath.ZeroTolerance):
        return Rhino.Commands.Result.Failure

    crv_length = crv.GetLength()
    s = "Curve length is {0:.3f}. Segment length".format(crv_length)
    seg_length = crv_length / 2.0
    rc, length = Rhino.Input.RhinoGet.GetNumber(s, False, seg_length, 0, crv_length)
    if rc!=Rhino.Commands.Result.Success: return rc
    t_vals = crv.DivideByLength(length, True)
    if not t_vals:
        return Rhino.Commands.Result.Failure

    [scriptcontext.doc.Objects.AddPoint(crv.PointAt(t)) for t in t_vals]
    scriptcontext.doc.Views.Redraw()
    return Rhino.Commands.Result.Success

if __name__=="__main__":
    DivideByLengthPoints()

Version Information

Supported in: 6.0.16224.21491, 5D58w

See Also

Reference

Curve Class
JoinCurves Overload
Rhino.Geometry Namespace

⚠️ **GitHub.com Fallback** ⚠️