Extending lines

Here is an example with Python to extend / join lines (between 2 lines)

join curves

Code Python
import clr
import sys
pyEngineName = sys.implementation.name 
import System
#
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS

#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)

#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

def create_extend_lines(ds_lineA, ds_lineB):
    """
    create extend lines by lineA and lineB
    
    Args:
        ds_lineA (Line): input lineA
        ds_lineB (Line): input lineB

    Returns:
        intersectPoint (Point): intersection point between extend lines
        extend_LineA (Line): extend lineA
        extend_LineB (Line): extend lineB
    """
    curveA = ds_lineA.ToRevitType()
    curveB = ds_lineB.ToRevitType()
    curveA.MakeUnbound()
    curveB.MakeUnbound()
    p1, p2, intersectPoint = None, None, None
    extend_LineA = ds_lineA
    extend_LineB = ds_lineB
    #
    if abs(curveA.Direction.CrossProduct(curveB.Direction).Z) > 0.01:
        if pyEngineName == "ironpython":
            outInterR = clr.Reference[DB.IntersectionResultArray]()
            result = curveA.Intersect(curveB, outInterR)
            if result == DB.SetComparisonResult.Overlap:
                interResult = outInterR.Value
                intersectPoint = interResult[0].XYZPoint.ToPoint()
        else:
            dummy_out = DB.IntersectionResultArray()
            result, interResult = curveA.Intersect(curveB, dummy_out)
            if result == DB.SetComparisonResult.Overlap:
                intersectPoint = interResult[0].XYZPoint.ToPoint()
        # make extend Lines
        p1 = ds_lineA.ParameterAtPoint(intersectPoint)
        p2 = ds_lineB.ParameterAtPoint(intersectPoint)
        # if parameter egal to 1 or 0
        if p1 < 0.001 or p1 > 0.999:
            extend_LineA = DS.Line.ByStartPointEndPoint(intersectPoint, ds_lineA.PointAtParameter(1 - p1))
        if p2 < 0.001 or p2 > 0.999:
            extend_LineB = DS.Line.ByStartPointEndPoint(intersectPoint, ds_lineB.PointAtParameter(1 - p2))
            
    return intersectPoint, extend_LineA, extend_LineB

#Preparing input from dynamo to revit
ds_lineA = IN[0]
ds_lineB = IN[1]

OUT = create_extend_lines(ds_lineA, ds_lineB)
2 Likes