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 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