Get curves from piping

Hello
i don’t know the goal of your script but here is an alternative

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

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

from System.Collections.Generic import List

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

toList = lambda x : x if hasattr(x, '__iter__') else [x]
lstElemNetWork = toList(UnwrapElement(IN[0]))

lstDS_Geo = [] 
for e in lstElemNetWork:
	if isinstance(e.Location, LocationCurve):
		rvtCurve = e.Location.Curve
		lstDS_Geo.append(rvtCurve.ToProtoType())
	else:
		locPt = e.Location.Point
		connSet = e.MEPModel.ConnectorManager.Connectors
		lstConn = list(connSet)
		if connSet.Size == 2:
			try:
				pline = DB.PolyLine.Create(List[XYZ]([lstConn[0].Origin, locPt, lstConn[1].Origin]))
				lstDS_Geo.append(pline.ToProtoType())
			except:  
				# Unable to create Line. Points are likely coincident
				line = DB.Line.CreateBound(lstConn[0].Origin, lstConn[1].Origin)
				lstDS_Geo.append(line.ToProtoType())			
		else:
			for con in connSet:
				line = DB.Line.CreateBound(locPt, con.Origin)
				lstDS_Geo.append(line.ToProtoType())

OUT = lstDS_Geo
3 Likes