Message 1 of 8
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
When I call `familyDoc.LoadFamily(doc, FamilyLoadOptions())` in Revit 2024 I get following error:
TypeError: interface takes exactly one
argument [' File "«string›", line 97, in
<module>\n']
This code used to work, but the method seems to no longer accept the second argument, which doesn't seems correct. Is this my bug or a bug in Revit 2024 Python API or maybe a API change, or am I missing something else??
----
I originally posted the question with more context in dynamobim forums:
Entire source code:
import sys
import clr
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
## Input parameters
familyName = IN[0]
family = UnwrapElement(IN[1])
## Test if family already contains the parameter
def familyHasParameter(family, parameterName):
currentParams = family.FamilyManager.GetParameters()
for k in range(len(currentParams)):
if currentParams[k].Definition.Name == parameterName:
return True
return False
## Get Family document from family instance
def getFamilyDoc(fam, doc):
if isinstance(fam, Autodesk.Revit.DB.FamilyInstance):
return (Document.EditFamily(doc, fam.Symbol.Family))
else:
if fam.IsInPlace == False:
return (Document.EditFamily(doc, fam))
## Implementation of family load options - always override existing family
class FamilyLoadOptions(IFamilyLoadOptions):
def OnFamilyFound(self, familyInUse, overwriteParameterValues):
overwriteParameterValues = True
return True
def OnSharedFamilyFound(self, sharedFamily, familyInUse, source, overwriteParameterValues):
source = FamilySource.Family
overwriteParameterValues = True
return True
###########################################################
TransactionManager.Instance.TransactionTaskDone()
TransactionManager.Instance.ForceCloseTransaction()
doc = DocumentManager.Instance.CurrentDBDocument
print("-- Editing family: " + familyName)
familyDoc = getFamilyDoc(family, doc)
TransactionManager.Instance.EnsureInTransaction(doc)
trans = Transaction(familyDoc, "Edit family params")
trans.Start()
parameterName = "TEST"
groupTypeId = Autodesk.Revit.DB.GroupTypeId.Data
specTypeId = Autodesk.Revit.DB.SpecTypeId.Current
isInstance = True
if familyHasParameter(familyDoc, parameterName):
print(("-- Parameter already exists on family: " + parameterName))
else:
print(("-- Adding parameter to family: " + parameterName))
familyDoc.FamilyManager.AddParameter(parameterName, groupTypeId, specTypeId, isInstance)
trans.Commit()
trans.Dispose()
TransactionManager.Instance.TransactionTaskDone()
TransactionManager.Instance.ForceCloseTransaction()
print("-- Saving family to project")
familyDoc.LoadFamily(doc, FamilyLoadOptions())
TransactionManager.Instance.TransactionTaskDone()
TransactionManager.Instance.ForceCloseTransaction()
Solved! Go to Solution.
