Creating column on a point using NewFamilyInstance

Thank you for your suggestions, @Daan.

I’m using a Python node to do this because I want to create a framed structure based on the number of levels input by the user, as the end product. So, I thought to create the columns in a script and do a for loop for repeating it in the other levels. I’m not sure if there’s an OOTB node that can act in place of a for loop.

Now, if supplying a reference level means passing a level in the arguments for the Create.NewFamilyInstance command, then yes I’m doing it.

import clr 
import sys  
import System 

clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

clr.AddReference("RevitNodes") 

import Revit 
clr.ImportExtensions(Revit.Elements) 
clr.ImportExtensions(Revit.GeometryConversion) 

clr.AddReference("RevitServices") 
import RevitServices 
from RevitServices.Persistence import DocumentManager 
from RevitServices.Transactions import TransactionManager 

clr.AddReference("RevitAPI") 

import Autodesk 
from Autodesk.Revit.DB import * 
from Autodesk.Revit.DB.Structure import *
  

doc = DocumentManager.Instance.CurrentDBDocument 

#Inputs to node

#famtype=UnwrapElement(IN[0])
points =UnwrapElement(IN[1])

columns=FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_StructuralColumns).WhereElementIsElementType().ToElements()#get all column types

levels=FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType().ToElements()

TransactionManager.Instance.EnsureInTransaction(doc)

for column in columns: 
	column_name=column.get_Parameter(BuiltInParameter.ALL_MODEL_FAMILY_NAME).AsString()
	#if column_name=="UC-Universal Columns-Column":
	column_type=column
	
if column_type.IsActive == False:
    column_type.Activate()
    doc.Regenerate()

point = points[0]
    
mycolumn=doc.Create.NewFamilyInstance(XYZ(point.X, point.Y, point.Z), column_type, levels[0], Structure.StructuralType.Column)

TransactionManager.Instance.TransactionTaskDone()

OUT = mycolumn

I should’ve pasted the code in the question also to make it easier to see I guess.

I also added a Transaction.End node after creating the levels but I still get the error.
Another thread suggested connecting the output of the Transaction.End to a dummy input in the python node, so that it’s computed only after the levels are created. That didn’t work too.

Please let me know if I can try something else too.