2016-08-17 2 views
1

を返しますドアのToRoom/FromRoomプロパティにアクセスしようとしています。 IronPythonの中01​​単純化されたコードスニペット:revitapi ironpython ToRoomはRevit APIで "インデクサー#オブジェクト"

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

for door in doors: 
    froom = door.FromRoom 

私の結果は、私がここから部屋のオブジェクトにアクセスする方法を 「0x0000000000035でインデクサ#オブジェクト」とは?

+0

私はあなたの質問に対する答えを知りません。それは大丈夫です。ただし、ToElementsへの呼び出しは不要で非効率です。フィルタリングされた要素コレクタ自体はすでに反復可能です。 ToElementsはコレクション全体のコピーを作成します。 ToElementIdsの同様の非効率性に関する詳細な説明は次のとおりです:http://thebuildingcoder.typepad.com/blog/2012/12/toelementids-performance.html –

+0

同じ質問はRevit APIディスカッションフォーラムのスレッドでも議論されていますのでご注意くださいhttp://forums.autodesk.com/t5/revit-api/toroom-fromroom-python-issue/mp/6507328 –

+0

Jeremyはフィルタリングされた要素コレクタに関するヒントをありがとうございます。 – user3460882

答えて

1

これはIronPython/funky Revit APIの問題です。基本的には、FromRoomの方法が定義されていますが、それはプロパティまたはインデックス付きプロパティのどちらでもかまいません。 API documentation for FromRoomを参照してください。

「インデクサー」はFromRoomの2番目のバージョンです。これは引数としてPhaseをとります。 FromRoomのドキュメントは、それがプロジェクトの最終段階で、ドアや窓のために設定

「部屋から」を返すと言うので

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

:だから、基本的にこれを行うことができます。

あなたはおそらく、実際にこれをしたい:

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

私はFromRoomの他のバージョンのホールドを取得する方法を見つけ出すことができませんでした...

+0

ありがとう、トーマス!開発者は同じことを発見し、Revit APIディスカッションフォーラムで推奨するのと同じアプローチを使用して彼の実用的なソリューションを共有しました。http://forums.autodesk.com/t5/revit-api/toroom-fromroom-python-issue/m-p/6507328 –

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))` 
関連する問題