在Revit 2014中选择线's点时绘制线

本文关键字:绘制 Revit 2014 选择 | 更新日期: 2023-09-27 18:13:07

我想弄清楚是否有一种方法以编程方式允许用户在Revit 2014中绘制一条线或调用模型行命令(使用线选项,而不是矩形,圆形等)。我需要用户调用我的命令,该命令显示了一个表单,有一个选项是"绘制路径",如果用户单击该选项,表单应该隐藏/关闭,用户应该能够直接在项目内绘制模型线。当用户结束绘制线条时,表单应该重新显示,并且应该有对绘制线条的引用。

我一整天都在寻找解决方案,但一无所获,我也搜索了如何使用标准Revit命令(如模型行),但唯一的方法似乎是调用PostCommand,将命令添加到队列中,因此命令将在我的命令终止后启动。我还搜索了如何在鼠标下绘制只有起点和定位端点的线,但似乎MouseMove事件在Revit文档上不可用。

真的没有办法让用户画一条线吗??

在Revit 2014中选择线's点时绘制线

我现在正在处理同样的问题。我用系统。在Revit窗口上绘制。

UIApplication m_pUIApp;
System.Drawing.Point m_pt1, m_pt2 = System.Drawing.Point.Empty
void DrawTask(System.Threading.CancellationToken ct)
{
    while (!ct.IsCancellationRequested)
    {
        m_pt2 = Cursor.Position;
        if (m_pt2.X < m_pUIApp.DrawingAreaExtents.Left + 2 ||
            m_pt2.X > m_pUIApp.DrawingAreaExtents.Right - 20 ||
            m_pt2.Y > m_pUIApp.DrawingAreaExtents.Bottom - 20 ||
            m_pt2.Y < m_pUIApp.DrawingAreaExtents.Top + 2)
        {
            System.Threading.Thread.Sleep(20);
            continue;
        }
        if (m_pt1 != System.Drawing.Point.Empty)
            using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
            {
                g.DrawLine(Pens.Black, m_pt1, m_pt2);
            }
        System.Threading.Thread.Sleep(20);
    }
}

然后我调用

m_pt1 = Cursor.Position;
var cts = new System.Threading.CancellationTokenSource();
Task.Run(() => DrawTask(cts.Token))

当我开始点选择和cts.Cancel();时,当我完成或捕获异常。它有一些缺点:如果你平移、缩放或失去Revit焦点,它会变得很奇怪。

我没有尝试过PostCommand方法,但它似乎具有挑战性,因为正如您所说,您的命令必须结束。

我在过去所做的是利用Revit应用程序空闲回调来实现这一点。您可以将对话框打开为非模态,但使用空闲回调。当需要画线时,您可以在空闲回调中打开一个事务,并提示用户按顺序选择点(并在您进行时绘制段)。

它仍然不如常规的行命令好(没有橡皮筋等)-但它可以工作。

你可以在the Building Coder博客上找到一堆关于空闲回调(或外部事件回调,另一种可能性)的文章。