访问revit图元数据python revit api

2024-06-16 10:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

collector = FilteredElementCollector(doc)
collector.OfCategory(BuiltInCategory.OST_Walls)
walls = collector.OfClass(FamilySymbol)
return walls

它将打印:Autodesk.Revit.DB.FilteredElementCollector对象,位于0x0000000000000038[自动…]。从这里我要去哪里?例如,如何返回墙的位置?在

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

有什么想法吗?在


Tags: 数据代码id参数doccollectorostrevit
2条回答

我无法帮助您使用Python,但我对Revit的API+C非常熟悉。在

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

在C中应该是这样的:

new FilteredElementCollector(uidoc.Document).OfClass(FamilyInstance).ToElements();

接下来,应循环结果以获取每个单独的图元并将其转换为墙:

^{pr2}$

您需要的大部分信息都是关于这个FamilyInstance对象->;http://wikihelp.autodesk.com/Revit/enu/2014/Help/3665-Developers/0074-Revit_Ge74/0083-Family_I83/0086-FamilyIn86

Revit API文档指出FilteredElementCollectorIEnumerable<Element>。所以你实际上有一个墙对象的列表。我喜欢将这些添加到python列表中,以便更轻松地使用它们:

walls = list(collector)

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

^{pr2}$

(请注意,这并不是真正的工作原理,但在某种程度上解释了这一点)。在

您可以使用.NET内部工作来枚举collector中的墙,方法是:

enumerator = collector.GetEnumerator()
walls = []
while not enumerator.IsDone():
    walls.append(enumerator.Current)
    enumerator.MoveNext()

{{cds}如果你想在我的文档中找到一个空的{cds}行。。。在

接下来,要使用墙对象。那么,拿第一面墙来说:

wall = walls[0]
interior_type_parameter = wall.Parameter['Interior Type']

然后处理参数。。。如果安装了Revit SDK,您将找到一个用于监视对象并查找其参数和值的工具。用这个!探索!玩得高兴!在

相关问题 更多 >