2014-02-06 58 views
0

我有點困惑,你是如何訪問的Revit的元素數據,如元素的參數,位置,編號等。如果我有這樣的代碼:訪問的Revit元數據 - 蟒蛇的Revit API

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

它將打印:Autodesk.Revit.DB.FilteredElementCollector對象在0x0000000000000038 [Auto ...]。我從哪裏出發?例如,我如何獲得牆壁位置的回報?

這裏可能有很多,每個項目有多個步驟。我主要在尋找獲取和/或設置新元素數據的一般概念。

有什麼想法?

回答

1

我無法幫助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對象上 - >http://wikihelp.autodesk.com/Revit/enu/2014/Help/3665-Developers/0074-Revit_Ge74/0083-Family_I83/0086-FamilyIn86

0

Revit API文檔指出,FilteredElementCollectorIEnumerable<Element>。所以你實際上有一個列表牆對象。我喜歡把這些東西加到一個Python列表,使他們的工作更輕鬆:

walls = list(collector) 

在幕後,list(collector)會做這樣的事情:

walls = [] 
for w in collector: 
    walls.append(w) 

(注意,這是不是真的怎麼了作品,但有點解釋它)。

您可以使用.NET內部工作通過執行此枚舉collector牆壁:

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

您將要檢查collector.OfClass(FamilySymbol)線是正確的 - 在我的例子文檔時,產生的空列表 - 但也許你有牆壁FamilySymbol s ...

接下來,你想使用牆對象。因此,採取的第一壁:

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

然後用參數的工作......如果你安裝的Revit SDK,你會發現窺探的對象,並發現他們的參數和值的工具。用這個!探索!玩的開心!