AutoCAD C#在SendStringtoExecute之后选择对象

时间:2015-02-16 04:15:26

标签: c# autocad autocad-plugin

有人知道如何在SendStringtoExecute之后选择对象吗?对我来说最好的是使用栅栏或点选择对象。

这是我的代码的一部分:

foreach (ObjectId objId in NormalblkTblRec)
{
    if (objId.ObjectClass.Name == "AcDbArc")
    {
        Entity en1 = (Entity)trans.GetObject(objId, OpenMode.ForWrite);
        Arc arcs = (Arc)(Object)en1;
        Point3d[] arcpoints = new Point3d[] { arcs.StartPoint, arcs.EndPoint };
        Point3dCollection arcptcol = new Point3dCollection(arcpoints);
        doc.SendStringToExecute("_DIVIDE" + "\n", true, false, false);
        ed.SelectFence(arcptcol);
    }

}

上述代码不起作用。 此代码的目的是获取每个弧的划分坐标(例如,10个划分)。 如果有人有更好的想法做同样的目的随意建议。

非常感谢!

2 个答案:

答案 0 :(得分:0)

要执行的发送字符串是异步的,这意味着您将无法预测它何时会实际运行。通常,您需要从com中调用或使用send命令。在某些情况下,您可以在编辑器中设置选择,然后运行命令。

答案 1 :(得分:0)

为什么不手动计算它们?或者您可以使用同步执行的com文档对象。

public static void SendCommandSynchronously(this Document doc,string command)
    {
        var acadDoc = doc.AcadDocument;
        acadDoc.GetType().InvokeMember(
            "SendCommand",
            System.Reflection.BindingFlags.InvokeMethod,
            null,
            acadDoc,
            new[] { command + "\n" });
    }

这是您可以使用的扩展方法。或者只是转换为方法。