# Invalid Duct/Pipe Connections

**URL:** <https://forum.dynamobim.com/t/invalid-duct-pipe-connections/16145>\
**Category:** Revit\
**Created:** [November 1, 2017, 2:03pm UTC](https://forum.dynamobim.com/t/invalid-duct-pipe-connections/16145 "2017-11-01T14:03:55Z")\
**Posts on this page:** 1\
**Showing post:** 10

<div class="post-metadata">

**Author:** ![T\_Pover](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/t_pover/32/19147_2.png) [@T\_Pover](https://forum.dynamobim.com/u/T_Pover)\
**Post date:** [November 2, 2017, 7:37pm UTC](https://forum.dynamobim.com/t/invalid-duct-pipe-connections/16145/10 "2017-11-02T19:37:19Z")

</div>

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"

```

 ![Reconnect duct network](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/b/7/b724bacfbd3c6b2e227eea3fc9f7c4f053710d41.gif)

---

_[View the full topic](https://forum.dynamobim.com/t/invalid-duct-pipe-connections/16145)._
