我在编写脚本时遇到了问题,该脚本让med在我的选择中选择第一个元素。这对我很有用,因为我从明细表中选择了正确的风道末端(在该明细表中,我可以看到要使用的类似风量),并使用从选择中创建类似风量的命令。问题是,当选择了多个元素时,此命令不起作用。因此,我想要列表中的第一个对象。这是我正在尝试的代码:
from Autodesk.Revit.UI.Selection.Selection import SetElementIds
from System.Collections.Generic import List
uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
selection = [ doc.GetElement( elId ) for elId in __revit__.ActiveUIDocument.Selection.GetElementIds() ]
sel=[]
for i in selection:
sel.append(i.Id)
uidoc.Selection.SetElementIds(List[ElementId](sel[0]))
这将返回以下错误消息:
Exception : Microsoft.Scripting.ArgumentTypeException: expected int, got ElementId好的,然后我会试着替换
uidoc.Selection.SetElementIds(List[ElementId](sel[0]))
使用
uidoc.Selection.SetElementIds(List[ElementId](sel[0].IntegerValue))
This seems to work, but selection is not modified
我刚刚开始编写RPS脚本,但我希望有人能告诉我,我在这里做错了什么,即使这是非常明显的。
谢谢。基尔雷
编辑:谢谢你,Jeremy,你为我解决了这个问题!诀窍是生成一个列表,而不是python列表。.Add方法是我没有理解的。
如果有人感兴趣,最后的代码:
from Autodesk.Revit.UI.Selection.Selection import SetElementIds
from System.Collections.Generic import List
from Autodesk.Revit.DB import ElementId
uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
selection = [ doc.GetElement( elId ) for elId in __revit__.ActiveUIDocument.Selection.GetElementIds() ]
sel=[]
for i in selection:
sel.append(i.Id)
ids=List[ElementId](1)
ids.Add(sel[0])
uidoc.Selection.SetElementIds(ids)
发布于 2019-01-24 17:51:17
SetElementIds
接受.NET ICollection<ElementId>
参数,正如您在Revit API documentation中所看到的那样。
您的语句调用.NET List
构造器,该构造器需要一个整数参数来指定要为其分配空间的元素的数量N
:List[ElementId](N)
。
sel[0]
是一个ElementId
,而不是一个整数,这会导致第一个错误。
sel[0].IntegerValue
是一个(非常大且半任意的)整数,因此不会导致错误。但是,您仍然将List
留空,不填充。
您应该初始化单个元素的List
,并添加以下内容:
ids = List[ElementId](1)
ids.Add(sel[0])
https://stackoverflow.com/questions/54325392
复制