0
爲什麼下面的代碼在RevitPython Shell中作爲腳本工作,但在添加到模塊時將錯誤作爲宏拋出?這個想法是收集門,查詢他們的主人對象的防火等級和框架細節,然後將他們對準門。修復python宏與腳本
錯誤是「無類型沒有屬性設置()」。所以它一定是拋出這個錯誤的門元素。但是,爲什麼代碼非常相似(只是修改doc的定義)作爲腳本而不是宏來執行?
def updateDoors(self):
doc = self.Document
doors = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).WhereElementIsNotElementType().ToElements()
t = Transaction(doc, 'Door Update')
t.Start()
for d in doors:
wallRating = "---"
doorRating = "---"
doorNumber = "---"
wallFr = "---"
wallH = "---"
wallJ = "---"
if d.Host is not None and d is not None:
wallTypeId = d.Host.GetTypeId()
wall = doc.GetElement(wallTypeId)
if wall.LookupParameter('Fire Rating') is not None:
wallFr = wall.LookupParameter('Fire Rating').AsString()
# Get Door Jamb from the wall
if wall.LookupParameter('Frame Jamb') is not None:
wallJ = wall.LookupParameter('Frame Jamb').AsString()
# Get Door Head from the wall
if wall.LookupParameter('Frame Head') is not None:
wallH = wall.LookupParameter('Frame Head').AsString()
if str(wallFr) == '':
d.LookupParameter('Fire Rating-Instance').Set('--')
if str(wallFr) == '0':
d.LookupParameter('Fire Rating-Instance').Set('--')
if str(wallFr) == '1':
d.LookupParameter('Fire Rating-Instance').Set('45')
if str(wallFr) == '2':
d.LookupParameter('Fire Rating-Instance').Set('90')
if str(wallFr) == '3':
d.LookupParameter('Fire Rating-Instance').Set('120')
if d.LookupParameter('Over ride wall assigned details').AsValueString() == 'No':
d.LookupParameter('Jamb').Set(wallJ)
d.LookupParameter('Head').Set(wallH)
t.Commit()
謝謝傑里米。是的,其目的是從牆系中收集「類型」參數並將它們分配給門的「實例」參數。我的調試器運行時會引發錯誤,所以我重新啓動了機器。現在這個腳本工作...調試101? –
除了設置「門框」和「頭部」參數之外,一切都很好地工作。錯誤是「多個目標可以匹配」。讓我相信門系列或實例名爲'head'和'jamb'有多個參數 - 雖然通過元素搜索,但我並不認爲這是事實。我正努力讓調試器運行而不會崩潰。我需要看看這個。 –
祝賀前進。是的,當您通過顯示名稱(不推薦!)選擇參數時,可以爲同一名稱獲取多個值。閱讀更多內容以及如何在此處應對:http://thebuildingcoder.typepad.com/blog/2015/06/cnc-direct-export-wall-parts-to-dxf-and-sat.html#2015.2 –