revitapi ironpython ToRoom返回“indexer#object”

时间:2016-08-17 16:07:25

标签: ironpython revit-api

在revit api中我试图访问门的ToRoom / FromRoom属性。 ironpython中的简化代码片段:

fc = FilteredElementCollector(doc)
doors = fc.OfCategory(BuiltInCategory.OST_Doors).WhereElementIsNotElementType().ToElements()

for door in doors:
    froom = door.FromRoom

我的结果是“索引器#对象在0x0000000000035” 我如何从这里访问房间对象?

2 个答案:

答案 0 :(得分:2)

这是一个IronPython / funky Revit API问题。基本上,定义FromRoom的方式,它可以是属性或索引属性。请参阅API documentation for FromRoom

"索引器"你得到的是FromRoom的第二个版本 - 它需要Phase作为参数。所以你基本上可以这样做:

phase = list(doc.Phases)[0]
room = door.FromRoom[phase]

由于FromRoom的文档说它返回

  

The#34; From Room"在项目的最后阶段为门或窗设置。

你可能真的想要这样做:

phase = list(doc.Phases)[-1]  # retrieve the last phase of the project
room = door.FromRoom[phase]

我无法弄清楚如何掌握其他版本的FromRoom ...

答案 1 :(得分:0)

达伦,谢谢你的贡献! 在杰里米回答之后,我研究了同样的方法。 这是代码片段

fc = FilteredElementCollector(doc)
doors = fc.OfCategory( BuiltInCategory.OST_Doors ).WhereElementIsNotElementType()

phases = doc.Phases

phase = phases[phases.Size - 1]

for door in doors:
    try:
        froom = door.FromRoom[phase].Id
    except:
        froom = -1
    try:
        troom = door.ToRoom[phase].Id
    except:
        troom = -1

    TaskDialog.Show("Revit","%s, %s" %(froom, troom))`