Message 1 of 6
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Dear Forum,
I want to create a conduitrun using dynamo, based on XYZ coordinates. So far I was able te generate separate conduits using a python script. But they appear in Revit as separate conduits, and they don't connect automatically.
I tried to loop over the connectors in each conduit and use the connectTo() command. but to no avail.
This is the python script I used:
import clr
import sys
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
toggle = ""
if isinstance(IN[0], list):
runs = IN[0]
for run in runs:
if isinstance(run, list):
lines = run
else:
lines = [run]
FirstPoint = [x.StartPoint for x in lines]
SecondPoint = [x.EndPoint for x in lines]
conduittype = UnwrapElement(IN[1])
if isinstance(IN[2], list):
level = UnwrapElement(IN[2])
toggle += "0"
else:
level = [UnwrapElement(IN[2])]
if isinstance(IN[3], list):
diameter = IN[3]
toggle += "1"
else:
diameter = [IN[3]]
elements = []
valid = Autodesk.Revit.DB.Electrical.Conduit.IsValidConduitType(doc,conduittype.Id)
TransactionManager.Instance.EnsureInTransaction(doc)
#conduit = Autodesk.Revit.DB.Electrical.Conduit.Create(doc,conduittype.Id,FirstPoint[0].ToXyz(),SecondPoint[0].ToXyz(),level[0].Id)
#TransactionManager.Instance.TransactionTaskDone()
startpoint = FirstPoint[0].ToXyz()
for i,x in enumerate(SecondPoint):
endpoint = x.ToXyz()
conduit = Autodesk.Revit.DB.Electrical.Conduit.Create(doc,conduittype.Id,startpoint,endpoint,level[0].Id)
param = conduit.get_Parameter(BuiltInParameter.RBS_CONDUIT_DIAMETER_PARAM);
param.SetValueString(diameter[0])
startpoint = endpoint
# Set the new curve to the second conduit
#locCure2.Curve = newCurve2
elements.append(conduit)
TransactionManager.Instance.TransactionTaskDone()
TransactionManager.Instance.EnsureInTransaction(doc)
for i in range(len(elements) - 1):
iterator = elements[i].ConnectorManager.Connectors.GetEnumerator()
iterator.MoveNext()
iterator.MoveNext()
connectorfirst = iterator.Current
iterator = elements[i+1].ConnectorManager.Connectors.GetEnumerator()
iterator.MoveNext()
connectorsecond = iterator.Current
connectorfirst.ConnectTo(connectorsecond)
TransactionManager.Instance.TransactionTaskDone()
OUT = elements
As you can see in the picture, all the conduits are connected on their endpoints, but in a conduit run i get only separated conduits:
Thanks in advance for your help.
Solved! Go to Solution.