Hello everybody.
Dear members, yesterday I found this topic
credits to @c.poupin
To summarize, his script paints the faces of the conduit however it doesnt do the same with the curves. So I tried to include the conduitfittings in the script, but I wasnt successful in several ways.
As an example of modification:
ORIGINAL
import clr
import sys
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Electrical import Conduit
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
def getAllConnect(conduit):
lstIds = [conduit.Id]
lstconduit = [conduit]
def findNext(lstconduitCheck):
lstElemId = []
for conduitCheck in lstconduitCheck:
if hasattr(conduitCheck, 'ConnectorManager'):
conManag = conduitCheck.ConnectorManager
else:
conManag = conduitCheck.MEPModel.ConnectorManager
for con in conManag.Connectors :
for conRef in con.AllRefs:
if conRef.Owner.Id not in lstIds:
lstElemId.append(conRef.Owner.Id)
return lstElemId
flag = True
while flag:
newConnIds = findNext(lstconduit)
if len(newConnIds) > 0:
newConnElem = [doc.GetElement(x) for x in newConnIds]
lstconduit.extend(newConnElem)
lstIds.extend(newConnIds)
else:
flag = False
break
return lstconduit
conduit = UnwrapElement(IN[0])
material = UnwrapElement(IN[1])
opt = Options()
TransactionManager.Instance.EnsureInTransaction(doc)
for conduitToPaint in getAllConnect(conduit) :
if isinstance(conduitToPaint, Conduit):
instGeo = conduit.get_Geometry(opt)
for ig in instGeo:
if isinstance(ig, Solid):
for face in ig.Faces:
doc.Paint(conduitToPaint.Id, face, material.Id)
TransactionManager.Instance.TransactionTaskDone()
OUT = getAllConnect(conduit)
MOD
import clr
import sys
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Electrical import Conduit, ConduitFitting
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
def getAllConnect(conduit):
lstIds = [conduit.Id]
lstconduit = [conduit]
def findNext(lstconduitCheck):
lstElemId = []
for conduitCheck in lstconduitCheck:
if hasattr(conduitCheck, 'ConnectorManager'):
conManag = conduitCheck.ConnectorManager
else:
conManag = conduitCheck.MEPModel.ConnectorManager
for con in conManag.Connectors :
for conRef in con.AllRefs:
if conRef.Owner.Id not in lstIds:
lstElemId.append(conRef.Owner.Id)
return lstElemId
flag = True
while flag:
newConnIds = findNext(lstconduit)
if len(newConnIds) > 0:
newConnElem = [doc.GetElement(x) for x in newConnIds]
lstconduit.extend(newConnElem)
lstIds.extend(newConnIds)
else:
flag = False
break
return lstconduit
conduit = UnwrapElement(IN[0])
material = UnwrapElement(IN[1])
opt = Options()
TransactionManager.Instance.EnsureInTransaction(doc)
for conduitToPaint in getAllConnect(conduit) :
if isinstance(conduitToPaint, Conduit) or isinstance(conduitToPaint, ConduitFitting):
instGeo = conduit.get_Geometry(opt)
for ig in instGeo:
if isinstance(ig, Solid):
for face in ig.Faces:
doc.Paint(conduitToPaint.Id, face, material.Id)
TransactionManager.Instance.TransactionTaskDone()
OUT = getAllConnect(conduit)
Does anyone know what really should be adjusted?