Change Family Category

Hello
Here is a solution with Python

image

import clr
import sys
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB 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.Value = False
		return True

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

toDoList = lambda x : x if hasattr(x, '__iter__') else [x]
FamTypes = toDoList(UnwrapElement(IN[0]))
catToSet = UnwrapElement(IN[1])
out = []

opts = FamilyOption()
for familySymb in FamTypes:
	TransactionManager.Instance.ForceCloseTransaction()
	family = familySymb.Family
	famDoc =  doc.EditFamily(family)
	result = "Failed"
	ownerFamily = famDoc.OwnerFamily 
	if ownerFamily.IsAppropriateCategoryId(catToSet.Id):
		ownerFamily.FamilyCategoryId = catToSet.Id
		result = "Success"
	out.append(result)	
	famInProj = famDoc.LoadFamily(doc, opts)	
	famDoc.Close(False)	
	famDoc.Dispose()
	
OUT = out

`
Please note that such a change of category (structure to model generic) has an impact on existing instances

`

8 Likes