从 WinForm 中选取 Revit 元素
Revit Pick element from WinForm
我试图在不关闭窗体的情况下单击按钮时在 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;
}
}
}
这里是 select 元素的表单代码:
private void button1_Click(object sender, EventArgs e)
{
Hide();
SelectionFilter1 selfilter1 = new SelectionFilter1();
pickedRef1 = sel.PickObject(ObjectType.Element, selfilter1, "Select Family instance");
Show();
}
您的 Windows 表单可能不是 运行 作为有效 Revit API 上下文中的模态表单。
因此,您正在尝试从外部访问 Revit 及其 API。这基本上是不可能的。通过使用 external event 存在解决方法。
这个问题目前也在 Revit API discussion forum thread on Revit API with WPF 中讨论。
Revit SDK 示例中提供了官方方法ModelessDialog/ModelessForm_ExternalEvent。
The Building Coder 在 Idling and External Events for Modeless Access and Driving Revit from Outside 的主题组中列出了许多其他讨论和解决方案。
我试图在不关闭窗体的情况下单击按钮时在 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;
}
}
}
这里是 select 元素的表单代码:
private void button1_Click(object sender, EventArgs e)
{
Hide();
SelectionFilter1 selfilter1 = new SelectionFilter1();
pickedRef1 = sel.PickObject(ObjectType.Element, selfilter1, "Select Family instance");
Show();
}
您的 Windows 表单可能不是 运行 作为有效 Revit API 上下文中的模态表单。
因此,您正在尝试从外部访问 Revit 及其 API。这基本上是不可能的。通过使用 external event 存在解决方法。
这个问题目前也在 Revit API discussion forum thread on Revit API with WPF 中讨论。
Revit SDK 示例中提供了官方方法ModelessDialog/ModelessForm_ExternalEvent。
The Building Coder 在 Idling and External Events for Modeless Access and Driving Revit from Outside 的主题组中列出了许多其他讨论和解决方案。