Not sure - I’ll set the enable disable to an input though…
Ran out of time - so I’ll have to look into this Monday.
Not sure - I’ll set the enable disable to an input though…
Ran out of time - so I’ll have to look into this Monday.
Had this issue - thanks to this thread was reminded of the Forge Type ID! (Facepalm!) Thanks for the help!
So in PY Node to create family parameters (Text in this case) this is working:
import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitServices')
import Autodesk.Revit.DB as DB
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
# Input from Dynamo: list of parameter names
param_names = IN[0] or []
# Revit context
doc = DocumentManager.Instance.CurrentDBDocument
family_manager = doc.FamilyManager
# Known built-in names to avoid
reserved_names = {
"NAME", "COMMENTS", "TYPE", "ID", "ADDRESS", "CLASS", "CATEGORY", "LEVEL"
}
results = []
# Check if parameter exists
def parameter_exists(name):
for p in family_manager.Parameters:
if p.Definition and p.Definition.Name.lower() == name.lower():
return True
return False
# Add parameter using Revit 2024+/2025-compliant API (ForgeTypeId)
def create_parameter(name):
clean_name = name.strip()
if not clean_name:
return "Skipped: empty name"
if clean_name.upper() in reserved_names:
clean_name += "_Custom"
if parameter_exists(clean_name):
return "Already exists: " + clean_name
try:
param = family_manager.AddParameter(
clean_name,
DB.GroupTypeId.Text, # Parameter group
DB.SpecTypeId.String.Text, # Forge SpecType for text
False # False = Type parameter
)
return "Created: " + clean_name
except Exception as e:
return "Error creating '" + clean_name + "': " + str(e)
# Run only in family document
if not doc.IsFamilyDocument:
OUT = ["Not a family document."]
else:
TransactionManager.Instance.EnsureInTransaction(doc)
for name in param_names:
results.append(create_parameter(name))
TransactionManager.Instance.TransactionTaskDone()
OUT = results