I altered the code of another existing node a bit (Elbow.ByMEPCurves) which will take in a bunch of ducts or fittings and searches the closest connector for every connector from the list and then connects them.
I take it that you first undo the demolish action to allow the reconnection of the network? I guess Dynamo could handle this for you as well…
Anyway, here’s the code:
import clr
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
pipes = UnwrapElement(IN[0])
margin = 0
connectors = {}
connlist = []
for pipe in pipes:
try:
conns = pipe.ConnectorManager.Connectors
except:
conns = pipe.MEPModel.ConnectorManager.Connectors
for conn in conns:
if conn.IsConnected:
continue
connectors[conn] = None
connlist.append(conn)
for k in connectors.keys():
mindist = 1000000
closest = None
for conn in connlist:
if conn.Owner.Id.Equals(k.Owner.Id):
continue
dist = k.Origin.DistanceTo(conn.Origin)
if dist < mindist:
mindist = dist
closest = conn
if mindist > margin:
continue
connectors[k] = closest
connlist.remove(closest)
try:
del connectors[closest]
except:
pass
for k,v in connectors.items():
TransactionManager.Instance.EnsureInTransaction(doc)
try:
k.ConnectTo(v)
except:
pass
TransactionManager.Instance.TransactionTaskDone()
OUT = "Done"