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