从未停靠的项目浏览器中选择元素



我正在研究一个插件,它可以复制选定的工作表并以某种方式对其进行编辑。我通过使用ICollection<ElementId> selectedIds = uiDoc.Selection.GetElementIds();
获得选择当项目浏览器停靠时,这工作得很好,但由于某种原因,当它没有停靠时它不起作用。
有没有办法在未停靠的项目浏览器中访问选择?我试过使用

DockablePane projectBrowser = new DockablePane(DockablePanes.BuiltInDockablePanes.ProjectBrowser);但我找不到任何成员从那里访问选择。

我做了以下小测试插件来演示:

using System.Collections.Generic;
using System.Linq;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
namespace Test
{
    [TransactionAttribute(TransactionMode.Manual)]
    [RegenerationAttribute(RegenerationOption.Manual)]
    public class Test : IExternalCommand
    {
        public Result Execute(
        ExternalCommandData commandData,
        ref string message,
        ElementSet elements)
        {
            UIApplication uiApp = commandData.Application;
            UIDocument uiDoc = uiApp.ActiveUIDocument;
            Document doc = uiDoc.Document;
            ICollection<ElementId> selectedIds = uiDoc.Selection.GetElementIds();
            int count = selectedIds.Count();
            if (count != 0)
            {
                TaskDialog.Show("test", "Selection: " + count.ToString() + " elements.");
            }
            else
            {
                TaskDialog.Show("test", "No selection");
            }
            return Result.Succeeded;
        }
    }
}

在停靠的项目浏览器中,它返回您选择的元素数,但当它取消停靠时,它不起作用。否则是否可以访问此选择?

我与Revit开发团队讨论了这个问题,他们想仔细研究这个问题。您能否提供一个完整的最小可重现案例?在这种情况下,我想不需要模型,只需要完整的加载项代码和详细的分步说明即可重现问题。谢谢!

后来,

开发团队的另一个答案是:我认为这与浏览器停靠或未停靠的事实无关。这很可能与浏览器是否为活动视图有关(仅保存浏览器中的选择(。如果在图形视图中单击(在停靠的浏览器之外(,则会清除选择。如果在浏览器中单击(停靠或取消停靠( - 将恢复选择以包含在浏览器中选择的项目。

最新更新