SendStringtoExecute 后的 AutoCAD C# Select 个对象
AutoCAD C# Select objects after SendStringtoExecute
有谁知道如何在 SendStringtoExecute 之后 select 对象?对我来说最好的是 select 使用栅栏或点的对象。
这是我的部分代码:
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 个分区)。
如果有人对实现相同目的有更好的想法,请随时提出建议。
非常感谢你们!
发送要执行的字符串是异步的,这意味着您无法预测它实际执行的时间 运行。通常,您需要调用或使用来自 com 的发送命令。在某些情况下,您可以在编辑器中设置选择,然后 运行 命令。
你为什么不手动计算它们呢?或者您可以使用同步执行的 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" });
}
这是您可以使用的扩展方法。或者只是转换为一种方法。
有谁知道如何在 SendStringtoExecute 之后 select 对象?对我来说最好的是 select 使用栅栏或点的对象。
这是我的部分代码:
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 个分区)。 如果有人对实现相同目的有更好的想法,请随时提出建议。
非常感谢你们!
发送要执行的字符串是异步的,这意味着您无法预测它实际执行的时间 运行。通常,您需要调用或使用来自 com 的发送命令。在某些情况下,您可以在编辑器中设置选择,然后 运行 命令。
你为什么不手动计算它们呢?或者您可以使用同步执行的 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" });
}
这是您可以使用的扩展方法。或者只是转换为一种方法。