从C#.NET调用AutoCAD命令

时间:2015-03-31 14:49:13

标签: c# .net autocad autocad-plugin

我试图编写两种调用AutoCAD的UNDO命令并传入不同参数的方法。第一种方法调用UNDO并传递M,这意味着标记绘图的位置。第二种方法调用UNDO并传递B,这意味着一直撤回到标记位置(如果没有,则返回结束)。到目前为止他们很简单

        /// <summary>
        /// Method to mark the current position of the AutoCAD program
        /// </summary>
        public static void MarkPosition()
        {
            doc.SendStringToExecute("._UNDO M", true, false, true);
        }

        /// <summary>
        /// Method to step AutoCAD back int steps
        /// </summary>
        public static void BigUndo()
        {
            doc.SendStringToExecute("._UNDO B", true, false, true);
        }

这些看似他们应该工作,但由于某种原因他们不会。当我调用MarkPosition()然后调用BigUndo()时,我得到一个错误,说遇到了Start of Group;进入撤消结束以进一步返回。测试我的语法。我将MarkPosition改为

public static void MarkPosition() 
{
    doc.SendStringToExecute("circle 2,2,0 4 ", true, false, true);
}

成功绘制一个圆圈。这意味着我的语法是正确的,但撤消会发生一些奇怪的事情。

3 个答案:

答案 0 :(得分:1)

使用SendCommand时,总是需要一个空格,以确保命令运行。

此外,在AutoCAD 2015(及更新版本)上,您可以使用Editor.Command或Editor.CommandAsync,这要好得多。

http://adndevblog.typepad.com/autocad/2014/04/migration-after-fiber-is-removed-in-autocad-2015.html

答案 1 :(得分:0)

您发送的空间不会被AutoCAD识别为新行。您必须先添加新行,然后将下一个字符发送到另一行,如下所示:

            doc.SendStringToExecute("._UNDO\n", true, false, true);
            doc.SendStringToExecute("M\n", true, false, true);

            doc.SendStringToExecute("._UNDO\n", true, false, true);
            doc.SendStringToExecute("B\n", true, false, true);

答案 2 :(得分:0)

你错过了命令字符串@END的空格。

 doc.SendStringToExecute("._UNDO B", true, false, true); // Instead of this
 doc.SendStringToExecute("._UNDO B ", true, false, true); // use this