Setting the builtin parameter accessible thru the family editor?

I had a look at it now, but without any luck. It seems that the doc.EditFamily(f) doesn’t like to be called within Dynamo. I tested similar code in Revit Python Shell and it worked without problems. Strangly some very similar workflows for setting shared parameters in families seem to work:

Maybe @Mostafa_El_Ayoubi understand why? It’s probably something about how Dynamo handles transactions.


Here is the python script if you wold like to try:

import clr

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

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

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

doc = DocumentManager.Instance.CurrentDBDocument

class FamilyOption(IFamilyLoadOptions):
	def OnFamilyFound(self,familyInUse,overwriteParameterValues):
		overwriteParameterValues = True
		return True
		
	def OnSharedFamilyFound(self, sharedFamily, familyInUse, FamilySource, overwriteParameterValues):
		overwriteParameterValues = True
		return True
		
#Preparing input from dynamo to revit
f = UnwrapElement(IN[0])
o = IN[1]
OUT = []

famdoc = doc.EditFamily(f)

thisFamily = famdoc.OwnerFamily
parOmniclass = thisFamily.get_Parameter(BuiltInParameter.OMNICLASS_CODE)

TransactionManager.Instance.EnsureInTransaction(famdoc)
parOmniclass.Set(o)
TransactionManager.Instance.TransactionTaskDone()
TransactionManager.Instance.ForceCloseTransaction()

famdoc.LoadFamily(doc, FamilyOption())
famdoc.Close(False)
OUT = 0

Here is the code I used in Revit Python Shell:

import clr

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

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

app = __revit__.Application
uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document

class FamilyOption(IFamilyLoadOptions):
	def OnFamilyFound(self,familyInUse,overwriteParameterValues):
		return True
		
	def OnSharedFamilyFound(self, sharedFamily, familyInUse, FamilySource, overwriteParameterValues):
		return True
		
#Preparing input from dynamo to revit
fec = FilteredElementCollector(doc).OfClass(Family)

for f1 in fec:
	if f1.Name == "NO_Column_CastInPlace_Round":
		f = f1
		break
o = "23.25.30.11.14.11"

famdoc = doc.EditFamily(f)

thisFamily = famdoc.OwnerFamily
parOmniclass = thisFamily.get_Parameter(BuiltInParameter.OMNICLASS_CODE)

t = Transaction(famdoc)
t.Start("Edit o")
parOmniclass.Set(o)
t.Commit()

print famdoc.LoadFamily(doc, FamilyOption())
print famdoc.Close(False)
2 Likes