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 –