WinForm中的Revit Pick元素

时间:2018-08-19 14:10:47

标签: c# winforms api revit

我试图在单击按钮而不关闭窗体时在Revit中选择一个对象。 问题是当我单击按钮时我无法与Revit交互。

这是调用表单并将Revit作为所有者传递的主要代码。

IWin32Window revit_window = new JtWindowHandle(ComponentManager.ApplicationWindow);
Process process = Process.GetCurrentProcess();
IntPtr h = process.MainWindowHandle;

form.ShowDialog(revit_window);

public class JtWindowHandle : IWin32Window
{
    IntPtr _hwnd;

    public JtWindowHandle(IntPtr h)
    {
        Debug.Assert(IntPtr.Zero != h, "expected non-null window handle");

        _hwnd = h;
    }

    public IntPtr Handle
    {
        get
        {
            return _hwnd;
        }
    }
}

这是选择元素的表单代码:

private void button1_Click(object sender, EventArgs e)
    {
        Hide();
        SelectionFilter1 selfilter1 = new SelectionFilter1();
        pickedRef1 = sel.PickObject(ObjectType.Element, selfilter1, "Select Family instance");
        Show();

    }

1 个答案:

答案 0 :(得分:1)

您的Windows窗体可能未在有效的Revit API上下文中作为模式窗体运行。

因此,您尝试从外部访问Revit及其API。这基本上是不可能的。通过使用external event存在解决方法。

此问题目前还在Revit API discussion forumRevit API with WPF线程中进行了讨论。

Revit SDK示例ModelessDialog / ModelessForm_ExternalEvent中提供了官方方法。

The Building Coder在Idling and External Events for Modeless Access and Driving Revit from Outside的主题组中列出了许多其他讨论和意见。