Create new family parameter

Here is a sample example, assuming that the parameter share file is loaded in Revit

import clr
import sys
import System

#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB

#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
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
app = uiapp.Application

def get_external_def_by_name(para_name):
    global dictsharParaDef
    for group, lst_external_def in dictsharParaDef.items():
        for ext_def in lst_external_def:
            if ext_def.Name == para_name:
                return ext_def
                
lst_shparameter_name = IN[0]
lst_GroupType = IN[1]
lst_is_instance_parameter = IN[2]
# 
result = []

# get all definitions in the SharedParameterFile
spf = app.OpenSharedParameterFile() 
if spf is not None:
    dictsharParaDef = {}
    spfGroups = spf.Groups
    for group in spfGroups:
        setExternalDef = group.Definitions
        dictsharParaDef[group.Name] = setExternalDef
                
if doc.IsFamilyDocument and spf is not None:
    owner_family = doc.OwnerFamily
    famManager = doc.FamilyManager
    TransactionManager.Instance.ForceCloseTransaction()
    TransactionManager.Instance.EnsureInTransaction(doc)
    #
    # add Parameters
    for nameP, groupType, is_instance in zip(lst_shparameter_name, lst_GroupType, lst_is_instance_parameter):
        ext_def = get_external_def_by_name(nameP)
        #
        if ext_def is not None:
            famManager.AddParameter(ext_def, DB.ForgeTypeId(groupType.TypeId), is_instance)
            result.append(f"parameter '{nameP}' added")
        else:
            result.append(f"parameter '{nameP}' failed")
                
    TransactionManager.Instance.TransactionTaskDone()
    
OUT = result

the link mentioned has nothing to do with adding parameters to families…

2 Likes