Split beam at multiple indexes using beam.Split(index) method

hello @paris
try this

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

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

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

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

def splitBeam(elem, lstPt):
	curvB = elem.Location.Curve
	#sort by distance with end point of Curve
	lstPt.sort(key = lambda x : curvB.GetEndPoint(1).DistanceTo(x))
	outBeam = []
	TransactionManager.Instance.EnsureInTransaction(doc)
	for pt in lstPt:
		lenBeam = curvB.Length 
		param = (curvB.GetEndPoint(0).DistanceTo(pt)) / lenBeam
		newBeam = elem.Split(param)
		outBeam.append(newBeam)
		doc.Regenerate()
	TransactionManager.Instance.TransactionTaskDone()   
	return  outBeam, lstPt, curvB.GetEndPoint(0).ToPoint()
	
beam = UnwrapElement(IN[0])
lstDynPt = IN[1]
#convert dynamo points to Revit Point
lstPt = [x.ToXyz() if isinstance(x, Autodesk.DesignScript.Geometry.Point) else x for x in lstDynPt]
loc = beam.Location
if isinstance(loc, LocationCurve):
	outBeam , lstPt, startPt = splitBeam(beam, lstPt)
OUT = outBeam, startPt
2 Likes