Update a Python script

Does anyone know how to update this python script that my company bought from a third party to work in revit 2019 and 2020? I would prefer if someone would tell me what the secret is here so I know what to look for next time, or how to find the information from myself. Thanks
Here is the script:

import clr

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):
	lines = IN[0]
else:
	lines = [IN[0]]
FirstPoint = [x.StartPoint for x in lines]
SecondPoint = [x.EndPoint for x in lines]
ducttype = UnwrapElement(IN[1])
systemtype = UnwrapElement(IN[2])
if isinstance(IN[3], list):
	level = UnwrapElement(IN[3])
	toggle += "0"
else:
	level = [UnwrapElement(IN[3])]
if isinstance(IN[4], list):
	width = IN[4]
	toggle += "1"
else:
	width = [IN[4]]
if isinstance(IN[5], list):
	height = IN[5]
	toggle += "1"
else:
	height = [IN[5]]

elements = []

if toggle == "":
	TransactionManager.Instance.EnsureInTransaction(doc)
	for i,x in enumerate(FirstPoint):
		duct = Autodesk.Revit.DB.Mechanical.Duct.Create(doc,systemtype.Id,ducttype.Id,level[0].Id,FirstPoint[i].ToXyz(),SecondPoint[i].ToXyz())
		
		param = duct.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM)
		param.SetValueString(width[0].ToString())
		
		param2 = duct.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM)
		param2.SetValueString(height[0].ToString())

		elements.append(duct.ToDSType(False))

	TransactionManager.Instance.TransactionTaskDone()
	
elif toggle == "0":
	TransactionManager.Instance.EnsureInTransaction(doc)
	for i,x in enumerate(FirstPoint):
		duct = Autodesk.Revit.DB.Mechanical.Duct.Create(doc,systemtype.Id,ducttype.Id,level[i].Id,FirstPoint[i].ToXyz(),SecondPoint[i].ToXyz())
		
		param = duct.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM)
		param.SetValueString(width[0].ToString())
		
		param2 = duct.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM)
		param2.SetValueString(height[0].ToString())

		elements.append(duct.ToDSType(False))

	TransactionManager.Instance.TransactionTaskDone()
	
elif toggle == "11":
	TransactionManager.Instance.EnsureInTransaction(doc)
	for i,x in enumerate(FirstPoint):
		duct = Autodesk.Revit.DB.Mechanical.Duct.Create(doc,systemtype.Id,ducttype.Id,level[0].Id,FirstPoint[i].ToXyz(),SecondPoint[i].ToXyz())
		
		param = duct.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM)
		param.SetValueString(width[i].ToString())
		
		param2 = duct.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM)
		param2.SetValueString(height[i].ToString())

		elements.append(duct.ToDSType(False))

	TransactionManager.Instance.TransactionTaskDone()
	
elif toggle == "011":
	TransactionManager.Instance.EnsureInTransaction(doc)
	for i,x in enumerate(FirstPoint):
		duct = Autodesk.Revit.DB.Mechanical.Duct.Create(doc,systemtype.Id,ducttype.Id,level[i].Id,FirstPoint[i].ToXyz(),SecondPoint[i].ToXyz())
		
		param = duct.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM)
		param.SetValueString(width[i].ToString())
		
		param2 = duct.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM)
		param2.SetValueString(height[i].ToString())

		elements.append(duct.ToDSType(False))

	TransactionManager.Instance.TransactionTaskDone()


OUT = elements

Here is the secret revealed: try it. If it give you an error, it should help you what was wrong (probability a change on the API from 2019 to 2020), look for the solution (probably swap between the new class, take a look on the “what’s new in the 20XX Revit api” in Jeremy Tammik blog).
Most of scripts works in many versions without (big) changes

1 Like