【问题标题】:Selecting elements from undocked project browser从未停靠的项目浏览器中选择元素
【发布时间】:2018-02-06 15:10:49
【问题描述】:

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

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

【问题讨论】:

    标签: c# revit-api revit


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嘿杰里米。是的,我认为是这样。当未停靠的项目浏览器处于活动状态时,您无法单击功能区上的按钮。您必须先单击图形视图,但正如您所说,这样做您将失去选择。项目浏览器的行为似乎与此处的“属性”面板不同,因为当该面板是活动视图时,仍然可以单击按钮。
      • 我想知道当图形视图处于活动状态时,您是否可以访问项目浏览器中的“灰色”选项。是否可以通过编程将项目浏览器面板设置为活动视图?我注意到有一个ViewType.ProjectBrowser 成员。也许这样做我可以检索选择
      • 我相信您可以通过 UIDocument ActiveView 属性将项目浏览器设置为活动视图,c.f. revitapidocs.com/2018.1/…
      • 当我尝试这样做时,uiDoc.ActiveView = new FilteredElementCollector(doc).OfClass(typeof(View)).Cast&lt;View&gt;().Where(q =&gt; q.ViewType == ViewType.ProjectBrowser).First(); 它给了我一个异常“无法激活内部视图”。我想这是一个死胡同,我将不得不让用户从窗口中的列表中选择工作表。感谢您的帮助
      猜你喜欢
      • 2016-05-17
      • 2019-02-07
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多