2

我在编写让 med 选择我选择的第一个元素的脚本时遇到问题。这对我很有用,因为我从时间表中选择了正确的 Air Terminal(在那里我可以看到我想要使用的类似气流),并从选择中使用命令 Create Similar。The trouble is that this command does not work when multiple elements are selected. 因此,我想要列表中的第一个对象。这是我正在尝试的代码:

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]))

这将返回以下错误消息:

异常:Microsoft.Scripting.ArgumentTypeException:预期的 int,得到 ElementId 好的,然后我会尝试替换

uidoc.Selection.SetElementIds(List[ElementId](sel[0]))

uidoc.Selection.SetElementIds(List[ElementId](sel[0].IntegerValue))

这似乎有效,但未修改选择

我刚刚开始编写 RPS 脚本,但我希望有人能告诉我我在这里做错了什么,即使它很明显。

谢谢你。凯尔

编辑:谢谢杰里米,为我解决了这个问题!诀窍是生成一个列表,而不是 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)
4

1 回答 1

1

SetElementIds采用 .NETICollection<ElementId>参数,您可以从Revit API 文档中看到。

您的语句调用 .NETList构造函数,该构造函数需要一个 integrer 参数,指定N要分配空间的元素数量: List[ElementId](N)

sel[0]是一个ElementId,而不是一个整数,这会导致第一个错误。

sel[0].IntegerValue是一个(非常大且半任意的)整数,因此不会导致错误。然而,你仍然留下List空的、无人居住的地方。

您应该为单个元素初始化List并添加:

ids = List[ElementId](1)
ids.Add(sel[0])
于 2019-01-24T17:51:17.167 回答