How do I define a family parameter in RevitAPI 2024 using python block in DesignScript?

Sure

the code

  • get all doors in project,
  • edit each family,
    - set the parameter ROOM_CALCULATION_POINT
    - reload family in Project
import clr
import sys
import System
from System.Collections.Generic import List
### -------------  Import RevitAPI -----------------------------------------###
clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB

### -------------  Import DocumentManager y TransactionManager -------------###
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *

### ------------- Here all Definitions --------------------------------------###
# tolist() function to ensure that the element is iterable
def tolist(x):
	if hasattr(x,'__iter__'): return x
	else : return [x]

### ------------- Current document and User Interface. ----------------------###
doc =  DocumentManager.Instance.CurrentDBDocument

##class for Load ##		
class FamilyOption(IFamilyLoadOptions) :
	def OnFamilyFound(self, familyInUse, overwriteParameterValues):
		overwriteParameterValues.Value = True
		return True

	def OnSharedFamilyFound(self, sharedFamily, familyInUse, source, overwriteParameterValues):
		overwriteParameterValues.Value = True
		return True	

# Retrieve all the door families in the project
filterDoors = System.Predicate[System.Object](lambda x :x.FamilyCategory.Id == ElementId(BuiltInCategory.OST_Doors))
doorFamilies = List[DB.Element](FilteredElementCollector(doc).OfClass(Family).ToElements()).FindAll(filterDoors)

TransactionManager.Instance.ForceCloseTransaction()

# Loop through each door family
for family in doorFamilies:
	# Open the door family for editing
	familyDoc = doc.EditFamily(family)
	owner_family = familyDoc.OwnerFamily
	TransactionManager.Instance.ForceCloseTransaction()
	TransactionManager.Instance.EnsureInTransaction(familyDoc)
	# Find the parameter you want to change
	parameter = owner_family.get_Parameter(BuiltInParameter.ROOM_CALCULATION_POINT)
	# Update the parameter value
	parameter.Set(1)
	# Load the updated door family back into the project and overwrite the existing version and its parameters
	TransactionManager.Instance.TransactionTaskDone()
	TransactionManager.Instance.ForceCloseTransaction()
	# load to Project and close
	familyDoc.LoadFamily(doc, FamilyOption())
	familyDoc.Close(False)
2 Likes