鼠标下带有缩略图的CAD插入块
本文关键字:CAD 插入 略图 鼠标 | 更新日期: 2023-09-27 18:26:00
我需要通过C#插件将外部DWG插入到AutoCAD图形中。我需要向用户"询问"插入块的插入点和旋转。到目前为止,我一直使用一个调用命令"._-insert"的lisp函数,该命令在鼠标下提供块的缩略图,允许用户单击到图形中以设置插入点,并允许用户从该点再单击一次以设置旋转。现在我想避免使用Lisp或AutoCAD的低级别API,因为我需要一个在各种CAD环境中运行的解决方案。我发现的是这样的东西:
public static void InsertDwg(string dwgName)
{
CADAPI.ApplicationServices.Document doc = CADAPI.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
CADDB.Database db = doc.Database;
CADAPI.EditorInput.Editor ed = doc.Editor;
CADDB.ObjectId ObjId;
using (CADDB.Transaction trx = db.TransactionManager.StartTransaction())
{
CADDB.BlockTable bt = db.BlockTableId.GetObject(CADDB.OpenMode.ForRead) as CADDB.BlockTable;
CADDB.BlockTableRecord btrMs = bt[CADDB.BlockTableRecord.ModelSpace].GetObject(CADDB.OpenMode.ForWrite) as CADDB.BlockTableRecord;
using (CADDB.Database dbInsert = new CADDB.Database(false, true))
{
dbInsert.ReadDwgFile(dwgName, CADDB.FileOpenMode.OpenForReadAndAllShare, true, string.Empty);
ObjId = db.Insert(Path.GetFileNameWithoutExtension(dwgName), dbInsert, true);
}
CADAPI.EditorInput.PromptPointOptions ppo = new CADAPI.EditorInput.PromptPointOptions("'nInsertion Point");
CADAPI.EditorInput.PromptAngleOptions ppa = new CADAPI.EditorInput.PromptAngleOptions("'nInsert Rotation");
CADAPI.EditorInput.PromptPointResult ppr;
ppr = ed.GetPoint(ppo);
CADAPI.EditorInput.PromptDoubleResult ppd = ed.GetAngle(ppa);
if (ppr.Status == CADAPI.EditorInput.PromptStatus.OK)
{
CADGEOM.Point3d insertPt = ppr.Value;
CADDB.BlockReference bref = new CADDB.BlockReference(insertPt, ObjId);
btrMs.AppendEntity(bref);
trx.AddNewlyCreatedDBObject(bref, true);
trx.Commit();
}
}
}
但我有两个问题:主要的一点是鼠标下面没有预览。第二,用户需要点击3次而不是2次来设置插入点和旋转。
有没有什么方法可以不使用某种SendCommand
来做所有这些事情?TIA
似乎Jigging是允许预览的方法。我有三个链接给你。
- 使用DrawJig对多个图元进行Jig
- 使用夹具通过.NET旋转AutoCAD图元
- 使用过渡图形使用.NET模拟AutoCAD的MOVE命令
第一个例子是用多段线创建一个简单的夹具,您可以将其扩展到块。
第二个链接类似,但将旋转应用于混合。这适用于矩形,但也可以修改以适应块。
第三个链接描述了一种不同的方法——AutoCADs瞬态图形界面。必须使用AutoCAD 2009或更高版本才能使用此方法。
最后两个链接来自Through The Interface博客,在那里你可以找到更多的例子,如果你有问题,这是一个很好的起点,尤其是对C#的编码。
您将希望使用AcEdJig类。它提供了预览。您必须编写代码来收集插入点和旋转,并相应地转换块。
这是我在谷歌上搜索的第一个链接,例如使用代码。