为什么的确选择了光栅,函数SendStringToExecute却无法正常对光栅执行scale命令。看
为什么的确选择了光栅,函数SendStringToExecute却无法正常对光栅执行scale命令。看代码:<p>我在图中插入了一个光栅,为什么在提示选择对象后,我明明选择了光栅,函数SendStringToExecute却无法正常执行。</p><p><br/>但在AutoCAD命令行中直接粘贴同样的 ._scale -93.147,421.096,0 0.6811 能正常缩放。</p><p></p><p>看代码:</p><p> <br/> public static void tt()<br/> {<br/> Document acDoc = Application.DocumentManager.MdiActiveDocument;<br/> Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;<br/> PromptSelectionResult res = ed.GetSelection();<br/> if (res.Status == PromptStatus.OK)<br/> { //如果选择了光栅<br/> acDoc.SendStringToExecute("._scale -93.147,421.096,0 0.6811", true, false, false);<br/> //acDoc.SendStringToExecute("._line 1000,1000,0 1100,1100,0", true, false, false);//这个画直线命令能正常执行。<br/> }<br/> }</p><p></p> 用矩阵变换试过么 注:直接粘贴前需要先选中光栅,然后在粘贴,成功缩放了。 lzh741206发表于2009-9-4 22:44:00static/image/common/back.gif用矩阵变换试过么<p>矩阵变换很麻烦,有命令想直接使用命令更简单</p> lzh741206发表于2009-9-4 22:44:00static/image/common/back.gif用矩阵变换试过么
<p>在CAD中使用矩阵变换还没有试过,请先生指点一二,不胜感激!谢谢!</p> <a href="http://www.mjtd.com/helpcenter/netguide/files/WS1a9193826455f5ff2566ffd511ff6f8c7ca-3ee6.htm">http://www.mjtd.com/helpcenter/netguide/files/WS1a9193826455f5ff2566ffd511ff6f8c7ca-3ee6.htm</a> <p>症结所在:<br/>关键在于执行SendStringToExecute时,在scale后面仍要求选择对象的缘故,但直接粘贴到命令行时为什么不要求选择对象,而能直接成功执行呢</p><p>以下是执行tt命令的过程:</p><p>命令: tt<br/>请选择光栅: 找到 1 个<br/>请选择光栅:<br/>命令: ._scale<br/>选择对象: -93.147,421.096,0 指定对角点: 0.6811 找到 0 个</p><p>(这时res.Status仍然是Ok,说明选择的光栅对象没有丢失)<br/></p> <p>有点无语了。。。</p> 一定要用命令的话,试下下面的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
namespace TlsTest
{
class Class2
{
private static extern int acedCmd(IntPtr vlist);
public static void Command(params object[] args)
{
ResultBuffer rb = new ResultBuffer();
foreach (object val in args)
{
if (val == null)
{
rb.Add(new TypedValue((int)LispDataType.Text, ""));
}
else
{
if (val is string)
rb.Add(new TypedValue((int)LispDataType.Text, val));
else if (val is Point2d)
rb.Add(new TypedValue((int)LispDataType.Point2d, val));
else if (val is Point3d)
rb.Add(new TypedValue((int)LispDataType.Point3d, val));
else if (val is ObjectId)
rb.Add(new TypedValue((int)LispDataType.ObjectId, val));
else if (val is SelectionSet)
rb.Add(new TypedValue((int)LispDataType.SelectionSet, val));
else if (val is double)
rb.Add(new TypedValue((int)LispDataType.Double, val));
else if (val is short)
rb.Add(new TypedValue((int)LispDataType.Int16, val));
else if (val is int)
rb.Add(new TypedValue((int)LispDataType.Int32, val));
else if (val is TypedValue)
rb.Add(val);
}
}
try
{
acedCmd(rb.UnmanagedObject);
}
catch
{ }
finally
{
rb.Dispose();
}
}
public static void tt()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
PromptSelectionResult res = ed.GetSelection();
if (res.Status == PromptStatus.OK)
{
Application.SetSystemVariable("CmdEcho", 0);
Command(
"_.scale",
res.Value,
"",
new Point3d(-93.147, 421.096, 0),
0.6811);
Application.SetSystemVariable("CmdEcho", 1);
}
}
}
}
lzh741206发表于2009-9-5 11:08:00static/image/common/back.gif一定要用命令的话,试下下面的代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;using Autodesk.AutoCAD.Edito
<p>先生,这个方法有效。但是需请教,res.Value 、 "" 这两个参数如何得知,哪里有介绍这方面的知识。看来你掌握的面很宽。</p>
页:
[1]
2