访问revit图元数据-python revit api

访问revit图元数据-python revit api,python,element,revit-api,Python,Element,Revit Api,对于如何访问Revit的图元数据(例如图元的参数、位置、Id等),我有点困惑。。如果我有此代码: collector = FilteredElementCollector(doc) collector.OfCategory(BuiltInCategory.OST_Walls) walls = collector.OfClass(FamilySymbol) return walls 它将在0x0000000000000038[自动…]处打印:Autodesk.Revit.DB.FilteredE

对于如何访问Revit的图元数据(例如图元的参数、位置、Id等),我有点困惑。。如果我有此代码:

collector = FilteredElementCollector(doc)
collector.OfCategory(BuiltInCategory.OST_Walls)
walls = collector.OfClass(FamilySymbol)
return walls
它将在0x0000000000000038[自动…]处打印:Autodesk.Revit.DB.FilteredElementCollector对象。我该怎么办?例如,如何返回墙的位置

这里可能有很多,每个项目都有多个步骤。我主要寻找获取和/或设置新元素数据的一般概念


有什么想法吗?

我无法使用Python,但我非常熟悉Revit的API+C

您正在使用收集器列出项目上的所有墙。您想要(获取位置)的是这些墙的FamilyInstance对象

在C#中是这样的:

new FilteredElementCollector(uidoc.Document).OfClass(FamilyInstance).ToElements();
接下来,应循环结果以获取每个单独的图元,并将其转换为墙:

foreach (Wall i in instances)
{
   var location = i.Location as LocationCurve;

   // The Curve element is a Line - 2 points defining it's position
   var p0 = location.Curve.GetEndPoint(0);
   var p1 = location.Curve.GetEndPoint(1);
}

您需要的大部分信息都是关于此FamilyInstance对象的->

Revit API文档指出,
FilterDeleteCollector
是一个
IEnumerable
。实际上,您有一个墙对象列表。我喜欢将这些添加到python列表中,以便更轻松地使用它们:

walls = list(collector)
在幕后,
list(collector)
将执行以下操作:

walls = []
for w in collector:
    walls.append(w)
(注意,这并不是它真正的工作原理,但在某种程度上解释了它)

您可以使用.NET内部工作来枚举
收集器中的墙,方法如下:

enumerator = collector.GetEnumerator()
walls = []
while not enumerator.IsDone():
    walls.append(enumerator.Current)
    enumerator.MoveNext()
您需要检查类(FamilySymbol)
的收集器行是否正确-在我的示例文档中,该行生成了一个空列表-但可能您确实有
FamilySymbol
s的墙

接下来,要使用墙对象。因此,以第一堵墙为例:

wall = walls[0]
interior_type_parameter = wall.Parameter['Interior Type']
然后使用参数。。。如果安装Revit SDK,您将找到一个用于探查对象并查找其参数和值的工具。用这个!探索!玩得开心