Hi,
Is it possible to get all points of a cable tray by selection with tab tab (CableTray and cable tray fitting) with correct endpoint and startpoint like a polycurve
Because when i try to do this some point are inverted.
to get lines:
lstDS_Geo = []
for e in lstElemNetWork:
if isinstance(e.Location, LocationCurve):
rvtCurve = e.Location.Curve
lstDS_Geo.append(rvtCurve.ToProtoType())
else:
lstLines = []
locPt = e.Location.Point
connSet = e.MEPModel.ConnectorManager.Connectors
lstConn = list(connSet)
if connSet.Size == 1:
lstDS_Geo.append(None)
elif connSet.Size == 2:
try:
line = DB.Line.CreateBound(lstConn[0].Origin, lstConn[1].Origin)
lstDS_Geo.append(line.ToProtoType())
except:
# Unable to create Line. Points are likely coincident
pline = DB.PolyLine.Create(List[XYZ]([lstConn[0].Origin, locPt, lstConn[1].Origin]))
lstDS_Geo.append(pline.ToProtoType())
elif connSet.Size == 3 and [con for con in connSet if con.Domain != Domain.DomainElectrical].Count == 2:
lstConn2=[con for con in connSet if con.Domain != Domain.DomainElectrical]
line = DB.Line.CreateBound(lstConn2[0].Origin, lstConn2[1].Origin)
lstDS_Geo.append(line.ToProtoType())
else:
for con in connSet:
#doc.Application.ShortCurveTolerance :
if locPt.DistanceTo(con.Origin) > 0.00256026455729167 and con.Domain != Domain.DomainElectrical:
line = DB.Line.CreateBound(locPt, con.Origin)
lstLines.append(line.ToProtoType())
lstDS_Geo.append(lstLines)
For selection :
import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = uiapp.ActiveUIDocument
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.Elements)
ueWrapper = None
wrappers = clr.GetClrType(Revit.Elements.ElementWrapper).GetMethods()
for w in wrappers:
if w.ToString().startswith("Revit.Elements.UnknownElement"):
ueWrapper = w
break
out = []
selectElemId = uidoc.Selection.GetElementIds()
selectElem = [doc.GetElement(xId) for xId in selectElemId]
for i in selectElem:
try:
check = Revit.Elements.ElementWrapper.Wrap(i, True)
except: check = None
if check is None:
out.append(ueWrapper.Invoke(None, (i, False)))
else:
out.append(i)
OUT = out, selectElemId
Daniel OLIVES