鼠标下带有缩略图的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

鼠标下带有缩略图的CAD插入块

似乎Jigging是允许预览的方法。我有三个链接给你。

  • 使用DrawJig对多个图元进行Jig
  • 使用夹具通过.NET旋转AutoCAD图元
  • 使用过渡图形使用.NET模拟AutoCAD的MOVE命令

第一个例子是用多段线创建一个简单的夹具,您可以将其扩展到块。

第二个链接类似,但将旋转应用于混合。这适用于矩形,但也可以修改以适应块。

第三个链接描述了一种不同的方法——AutoCADs瞬态图形界面。必须使用AutoCAD 2009或更高版本才能使用此方法。

最后两个链接来自Through The Interface博客,在那里你可以找到更多的例子,如果你有问题,这是一个很好的起点,尤其是对C#的编码。

您将希望使用AcEdJig类。它提供了预览。您必须编写代码来收集插入点和旋转,并相应地转换块。

这是我在谷歌上搜索的第一个链接,例如使用代码。