2016-08-17 2 views
1

In revit api versuche ich, auf die ToRoom/FromRoom-Eigenschaften für Türen zuzugreifen. der vereinfachte Code-Schnipsel in Ironpython:revitapi ironpython ToRoom gibt "indexer # object" zurück

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

for door in doors: 
    froom = door.FromRoom 

mein Ergebnis ist ein „Indexer # Objekt bei 0x0000000000035“ , wie kann ich den Raum Objekt zugreifen von hier aus?

+0

Ich fürchte, ich weiß nicht die Antwort auf Ihre Frage. Es sieht gut für mich aus. Ihr Aufruf an ToElements ist jedoch unnötig und ineffizient. Der Filterelementkollektor selbst ist bereits iterierbar. ToElements erstellt eine Kopie der gesamten Sammlung. Hier ist eine detaillierte Diskussion über die ähnliche Ineffizienz von ToElementIds: http://thebuildingcoder.typepad.com/blog/2012/12/toelementids-performance.html –

+0

Bitte beachten Sie, dass die gleiche Frage auch im Thread revit api Diskussionsforum diskutiert wird http://forums.autodesk.com/t5/revit-api/toroom-fromroom-python-issue/mp/6507328 –

+0

Jeremy danke für den Hinweis bezüglich des gefilterten Element-Kollektors. – user3460882

Antwort

1

Dies ist ein IronPython/funky Revit API-Problem. Grundsätzlich ist die Art, wie FromRoom definiert ist, entweder eine Eigenschaft oder eine indizierte Eigenschaft. Siehe API documentation for FromRoom.

Der "Indexer", den Sie erhalten, ist die zweite Version von FromRoom - es ist ein Phase als Argument. So kann man im Grunde tun:

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

Da die Dokumentation für FromRoom sagt, es gibt

Die „From Room“ gesetzt für die Tür oder das Fenster in der letzten Phase des Projektes.

Sie wahrscheinlich dies wollen tatsächlich tun:

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

ich nicht in der Lage war, herauszufinden, wie halten, die andere Version von FromRoom ...

+0

Danke, Thomas! Der Entwickler entdeckte dasselbe und teilte seine Arbeitslösung mit demselben Ansatz, den Sie im Revit-API-Diskussionsforum http://forums.autodesk.com/t5/revit-api/toroom-fromroom-python-issue/m-p/6507328 empfehlen –

0

Daren zu erhalten, danke für Ihr Beitrag! nach Jeremys Antwort habe ich den gleichen Ansatz untersucht. Hier ist das Code-Snippet

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))` 
Verwandte Themen