How to get parameters from an instance… here my try based on the book beyond dynamo…
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
clr.AddReference('System')
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
def parametersDataFrame(document,category):
elems = FilteredElementCollector(document).OfCategory(category).WhereElementIsNotElementType()
if list(elems):
par = [x.Parameters for x in elems]
params = [[x for x in y if x.AsElementId().IntegerValue != category] for y in par]
paramNames = [[x.Definition.Name for x in y] for y in params]
header = paramNames[0]
d = {}
for x in header:
d[x] = list()
for pg,ng in zip(params, paramNames):
for p,n in zip(pg,ng):
d[n].append(p)
df = pd.DataFrame(d, columns = header)
df["Instances"] = list(elems)
df["Element Names"] = [x.Name for x in elems]
df["Types"] = [doc.GetElement(x.GetTypeId()) for x in elems]
df["Item"] = [doc.GetElement(x.GetTypeId()).get_Parameter(BuiltInParameter.UNIFORMAT_CODE) for x in elems]
return df
else:
return "No instances of this category exist"
instance = UnwrapElement(IN[0])
snoop = parametersDataFrame(doc, instance)
OUT = snoop
The code is built to take a category as an input, not an element.
To just get the parameters from an element, use element.Parameters. The result will be a list, but if you take one item out and get the documentation, and members directory of the object you should have a good clue on where to go from there.
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
clr.AddReference('System')
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
def parametersDataFrame(document,category):
elems = FilteredElementCollector(document).OfCategory(category).WhereElementIsNotElementType()
if list(elems):
par = [x.Parameters for x in elems]
params = [[x for x in y if x.AsElementId().IntegerValue != category] for y in par]
paramNames = [[x.Definition.Name for x in y] for y in params]
header = paramNames[0]
d = {}
for x in header:
d[x] = list()
for pg,ng in zip(params, paramNames):
for p,n in zip(pg,ng):
d[n].append(p)
df = pd.DataFrame(d, columns = header)
df["Instances"] = list(elems)
df["Element Names"] = [x.Name for x in elems]
df["Types"] = [doc.GetElement(x.GetTypeId()) for x in elems]
df["Item"] = [doc.GetElement(x.GetTypeId()).get_Parameter(BuiltInParameter.UNIFORMAT_CODE) for x in elems]
return df
else:
return "No instances of this category exist"
cat = IN[0]
snoop = parametersDataFrame(doc, cat)
OUT = snoop
you followed the wiki posted by Mr. Jacob, you managed to install pip in Local and not roaming as seen on one of your captures
cordially
christian.stan