C# 如何将元素集合转换为;“当前选择”;在Revit中?

C# 如何将元素集合转换为;“当前选择”;在Revit中?,c#,revit-api,C#,Revit Api,我正在尝试创建一个“智能过滤器”,其工作方式与Revit“过滤器”类似,但可以通过其他方式(例如族类型、工作集、标高,甚至“标记”)对图元进行分组。创建隔离这些参数的集合非常简单,但我似乎无法带着document.selection退出我的程序,因为它被修改为只包含我保留“选中”的元素 我的程序能够操作剩余的“选中”元素,如“在视图中隐藏”、“半色调”或“删除”--但是对结果选择所要执行的可能操作列表太长,无法将它们全部包含在我的对话框表单中--我想要一个选项,只需选择一个单选按钮,上面写着“设

我正在尝试创建一个“智能过滤器”,其工作方式与Revit“过滤器”类似,但可以通过其他方式(例如族类型、工作集、标高,甚至“标记”)对图元进行分组。创建隔离这些参数的集合非常简单,但我似乎无法带着document.selection退出我的程序,因为它被修改为只包含我保留“选中”的元素

我的程序能够操作剩余的“选中”元素,如“在视图中隐藏”、“半色调”或“删除”--但是对结果选择所要执行的可能操作列表太长,无法将它们全部包含在我的对话框表单中--我想要一个选项,只需选择一个单选按钮,上面写着“设置选择”,并让程序与选择中的元素一起退出

我试过:

doc.Selection.Elements.Add(Element *****);
doc.Selection.Elements.Remove(Element *****);
它们返回错误“不在对象实例处”


完成Revit的“过滤器”后,结果是修改的选择。有没有办法在C#Add-in中执行相同的操作?

我认为可能是Revit在引用图元时没有直接查看对象-您尝试过使用elementID吗?或者元素。UniqueID?

您必须在UI文档中执行此操作

SelElementSet selElements = uidoc.Selection.Elements;
selElements.Add(element);

这段代码对我很有用。

哪种版本的Revit?谢谢……真正的关键是SelElementSet……我曾尝试将元素导入到选择中,但变量类型比我所知道的更多。我原始问题中的doc.Selection.Elements实际上与您的示例中的相同。在使用SelElementSet(并确保它是清晰的)之后,我能够在最终选择和.Add(Element)中循环所有我想要的元素。这是正确的答案。UIDocument支持设置选择。如何获得要输入到该选择集中的元素完全取决于您。要按参数值筛选,请查看
FilteredElementCollectors
及其支持的所有筛选器。另外,如果你喜欢,请接受答案。