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

时间:2018-01-25 07:59:04

标签: c# revit-api revit

我正在制作一个复制所选工作表的插件,并以某种方式对其进行编辑。我使用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;
        }
    }
}

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

2 个答案:

答案 0 :(得分:0)

我与Revit开发团队讨论了这个问题,他们希望仔细研究一下这个问题。你能提供full minimal reproducible case吗?在这种情况下,我想不需要任何模型,只需要完整的加载项代码和详细的逐步说明来重现问题。谢谢!

答案 1 :(得分:0)

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