【问题标题】:Draw line while picking line's points in Revit 2014在 Revit 2014 中选取线的点时绘制线
【发布时间】:2016-04-26 22:19:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net revit-api


    【解决方案1】:

    我现在正在处理同样的问题。我使用 System.Drawing 在 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 焦点,它会变得很奇怪。

    【讨论】:

      【解决方案2】:

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

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

      它仍然不如常规行命令(没有橡皮筋等)好 - 但它有效。

      您可以在The Building Coder 博客上找到大量关于 Idling 回调(或外部事件回调,另一种可能性)的文章。

      【讨论】:

      • 我应该在 Idling 事件中使用 PostCommand 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 2018-12-19
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多