-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathGetCategory.py
More file actions
38 lines (34 loc) · 1.32 KB
/
GetCategory.py
File metadata and controls
38 lines (34 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import System
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
def getCategory(item):
if not item:
return None
objtype = item.GetType().ToString()
returnID = None
returnCat = None
returnBic = None
if objtype == "Autodesk.Revit.DB.ViewSchedule": returnID = item.Definition.CategoryId
elif objtype == "Autodesk.Revit.DB.Family": returnID = item.FamilyCategoryId
elif objtype == "Autodesk.Revit.DB.GraphicsStyle": returnID = item.GraphicsStyleCategory.Id
elif objtype == "Revit.Application.Document":
if item.IsFamilyDocument:
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
returnID = DocumentManager.Instance.CurrentDBDocument.OwnerFamily.FamilyCategoryId
elif objtype == "Autodesk.Revit.DB.Category":
if item.Parent: returnID = item.Parent.Id
elif hasattr(item, "Category"): returnID = item.Category.Id
if returnID:
returnBic = System.Enum.ToObject(BuiltInCategory, returnID.IntegerValue)
try: returnCat = Revit.Elements.Category.ById(returnID.IntegerValue)
except: pass
return returnCat, returnBic
items = UnwrapElement(IN[0])
if isinstance(IN[0], list): OUT = map(list, zip(*[GetCategory(x) for x in items]))
else: OUT = GetCategory(items)