Working on some code to return a list of all loadable categories (ideally model categories)

I found some python in a tutuorial- but it is returning DB.categories and I need Revit.Elements.Category as the input for my all elements of category node. I poked around a bit in the API docs but I dont know what I am doing at all tbh. Here is my code:

# Import clr and dlls
import System
import clr

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


clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
 
# Retrieve current document
doc = DocumentManager.Instance.CurrentDBDocument

 
# Retrieve all families that are not system families in current doc
fam_types = FilteredElementCollector(doc).OfClass(Family)
 
# Filter the editable families and output result
cats = []
 
for f in fam_types:
    if (f.IsEditable):
        cats.append(f.FamilyCategory)
    
OUT = cats

Hey @J_Sanford !

That node expects the Dynamo “wrapper” around Revit Categories. One way to do that , since ToDSType doesn’t work for categories, is this :

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


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

#Import the Dynamo Revit Nodes
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
 
# Retrieve current document
doc = DocumentManager.Instance.CurrentDBDocument

 
# Retrieve all families that are not system families in current doc
fam_types = FilteredElementCollector(doc).OfClass(Family)
 
# Filter the editable families and output result
cats = []
 
for f in fam_types:
    if (f.IsEditable):
        cats.append(Revit.Elements.Category.ByName(f.FamilyCategory.Name))
    
OUT = cats
4 Likes

Hey- thanks so much! I was able to add to this to filter by model cats and anno cats :slight_smile: thanks to my tinkering around earlier with class attributes, giving me a list of unique model categories and a list of unique annotation categories

# Import clr and dlls
import System
import clr

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)

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


clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
 
# Retrieve current document
doc = DocumentManager.Instance.CurrentDBDocument

 
# Retrieve all families that are not system families in current doc
fam_types = FilteredElementCollector(doc).OfClass(Family)
 
# Filter the editable families and output result
modelcats = []
annocats = []
 
for f in fam_types:
    if (f.IsEditable):
        if f.FamilyCategory.CategoryType == 1:
            if Revit.Elements.Category.ByName(f.FamilyCategory.Name) not in modelcats:
                modelcats.append(Revit.Elements.Category.ByName(f.FamilyCategory.Name))
    if f.FamilyCategory.CategoryType == 2:
        if Revit.Elements.Category.ByName(f.FamilyCategory.Name) not in annocats:
            annocats.append(Revit.Elements.Category.ByName(f.FamilyCategory.Name))
    
OUT = modelcats, annocats
2 Likes