Here is an example with Python to extend / join lines (between 2 lines)
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)