微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – CAD在鼠标下插入带缩略图的块

我需要通过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是允许预览的方式.我有三个链接给你.

> Jigging multiple entities with the DrawJig
> Using a jig to rotate an AutoCAD entity via .NET
> Using transient graphics to simulate AutoCAD’s MOVE command using .NET

一个是使用折线创建简单夹具的示例 – 您可以将其扩展为块.

第二个链接类似,但将旋转应用于混合.这适用于矩形,但可以再次修改以容纳块.

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

最后两个链接来自Through the Interface博客,在那里您可以找到更多示例,如果您遇到问题,尤其是编码C#,这是一个非常好的起点.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐