Translated by moderator. See below the line for original post.
I need help automating my pipeline with a dynamo. I’ve tried everything and I need help.
Original post below
Necesito ayuda para la automatizacion de mis tuberia con dynamo.. he intentado de todo y necesito ayuda
Welcome to the forum @erickantoniorodrigue!
The official language here is English, which sadly is a requirement for search to work (annars skulle jag posta på svenska). Please translate all future posts, keeping your native language post on the other side of a separation if you’d like, as it may help us should we ever get multi-language support.
here an example with Python

This is a simple example involving horizontal pipe runs; if other types of fittings need to be used (such as Tee-fittings), the solution will need to be adapted.
code Python (with PythonNet3)
import clr
import sys
import System
#
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS
clr.AddReference("System.Core")
clr.ImportExtensions(System.Linq)
#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
#import specify namespace
from Autodesk.Revit.DB.Electrical import *
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
def get_conduit_size(type_conduit_name, size_project):
global unit_L
input_size = UnitUtils.ConvertToInternalUnits(float(size_project), unit_L)
css = ConduitSizeSettings.GetConduitSizeSettings(doc)
enumeratorA = css.GetEnumerator()
while enumeratorA.MoveNext():
type_conduit, allSize = enumeratorA.Current.Key, enumeratorA.Current.Value
#print(type_conduit, allSize)
enumeratorB = allSize.GetEnumerator()
while enumeratorB.MoveNext():
size_c = enumeratorB.Current
#print(type_conduit, size_c)
if abs(size_c.NominalDiameter - input_size ) < 0.01:
return type_conduit, size_c.NominalDiameter
return None, None
def create_elbows(lstconduit):
all_connectors = [c for cond in lstconduit for c in cond.ConnectorManager.Connectors]
out = []
i = 0
while all_connectors and i < 100:
i += 1
conA = all_connectors.pop(0)
if len(all_connectors) > 0:
all_connectors.sort(key = lambda c : c.Origin.DistanceTo(conA.Origin))
conCandidate = all_connectors[0]
if conCandidate.Origin.DistanceTo(conA.Origin) < 0.01:
conB = all_connectors.pop(0)
newfitting = doc.Create.NewElbowFitting(conA, conB)
out.append(newfitting)
return out
toList = lambda x : x if hasattr(x, '__iter__') else [x]
lst_DSlines_toconduit = IN[0]
conduit_type_name = IN[1]
conduit_size = IN[2]
conduit_LevelId = doc.ActiveView.GenLevel.Id
unit_L = doc.GetUnits().GetFormatOptions(SpecTypeId.Length).GetUnitTypeId()
lst_new_conduit = []
conduit_type = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Conduit).WhereElementIsElementType()\
.FirstOrDefault(System.Func[System.Object, System.Boolean](lambda x: x.Name == conduit_type_name))
if conduit_type:
conduit_std_type_name = conduit_type.get_Parameter(BuiltInParameter.CONDUIT_STANDARD_TYPE_PARAM).AsValueString()
conduit_std_type, size_conduit = get_conduit_size(conduit_std_type_name, conduit_size)
#print(conduit_std_type_name, size_conduit)
#Do some action in a Transaction
if size_conduit:
TransactionManager.Instance.EnsureInTransaction(doc)
for line in lst_DSlines_toconduit:
line = line.ToRevitType()
newconduit = Conduit.Create( doc, conduit_type.Id, line.GetEndPoint(0), line.GetEndPoint(1), conduit_LevelId)
newconduit.get_Parameter(BuiltInParameter.RBS_CONDUIT_DIAMETER_PARAM).Set(size_conduit)
lst_new_conduit.append(newconduit)
#
doc.Regenerate()
lst_elbows = create_elbows(lst_new_conduit)
TransactionManager.Instance.TransactionTaskDone()
OUT =lst_new_conduit, lst_elbows