C#实战之CAD二次开发007:根据用户输入和选择来插入图块和文字

本文介绍如何使用C#在AutoCAD中实现根据用户输入和选择自动插入图块和文字。通过创建对话框获取用户输入,利用AutoCAD.NET API进行图块和文字的精确放置。
摘要由CSDN通过智能技术生成

需求分析

在打开CAD之后,用户输入一个命令,CAD会弹出一个对话框,然后用户输入文本,点击确定之后,用户在CAD图面上选择要插入的点,然后点击之后则会在点击的地方插入文字和图块。

一、思路

开发环境:cad版本为2010,vs2015
AutoCAD.NET API 专门提供了两个有关的函数来实现对话框,
ShowModalDialog(Form formToShow)函数,所以我们需要创建一个Form类的对象。

二、实现

首先创建一个类库项目,添加acdbmgd.dll和acmgd.dll引用,记得将复制本地改为False,在添加一个窗体,用户设计我们的窗体界面,界面比较简单,如下所示
在这里插入图片描述
确定按钮事件,插入文字部份之前有提到,这里就不在赘述了,插入图块这次使用的是插入外部图块的方法。

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
            Database db = HostApplicationServices.WorkingDatabase;
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

            PromptPointResult ppr = ed.GetPoint("请选择插入点");
            Point3d pt = ppr.Value;

            string CutId = this.textBoxCutId.Text;
            double x = pt.X;
            double y = pt.Y;
            double z = pt.Z;

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                string path = @"D:\cad\";
                BlockTools.InsertBlockFromDwg("ST-GGXHB", path + "GGXHB.dwg", pt, new Scale3d(1)); // 规格型号表格
                
                db.AddToModelSpace(addText(CutId, new Point3d(x + 13.79, y - 6.09, 0), 1.9, "Standard"), "0");
                db.AddToModelSpace(addText("W-" + CutId, new Point3d(x + 43.95, y - 6.09, 0), 1.9, "Standard"), "0");
                db.AddToModelSpace(addText("75", new Point3d(x + 66.86, y - 6.09, 0), 2.0, "Standard"), "0");

                db.AddToModelSpace(addText(CutId + "(50)", new Point3d(x + 13.79, y - 9.83, 0), 1.9, "Standard"), "0");
                db.AddToModelSpace(addText("W-" + CutId + "(50)", new Point3d(x + 43.95, y - 9.83, 0), 1.9, "Standard"), "0");
                db.AddToModelSpace(addText("50", new Point3d(x + 66.86, y - 9.83, 0), 2.0, "Standard"), "0");

                db.AddToModelSpace(addText(CutId + "-K", new Point3d(x + 13.79, y - 13.61, 0), 1.9, "Standard"), "0");

                db.AddToModelSpace(addText(CutId + "(BZ)", new Point3d(x + 13.79, y - 17.4, 0), 1.9, "Standard"), "0");
                trans.Commit();
            }
        }
public static void InsertBlockFromDwg(string BlockName, string filename, Point3d position, Scale3d scale)
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            using (Database db = new Database(false, true))
            {
                using (Transaction trans = doc.TransactionManager.StartTransaction())
                {
                    //如果文件存在
                    if (File.Exists(filename))
                    {
                        db.ReadDwgFile(filename, FileShare.Read, true, null);
                        db.CloseInput(true);
                        string name = BlockName;
                        ObjectId btrId = doc.Database.Insert(name, db, false);
                        //獲取數據庫塊表對象
                        BlockTable bt = (BlockTable)trans.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
                        //打開數據庫模型空間塊表記錄對象
                        BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                        using (BlockReference br = new BlockReference(position, btrId))
                        {
                            br.ScaleFactors = scale;//设置块参照的缩放比例
                            btr.AppendEntity(br);
                            trans.AddNewlyCreatedDBObject(br, true);
                        }
                    }
                    trans.Commit();
                }
            }
        }

最后在类库项目中添加一个命令,名字自定义

        [CommandMethod("AD")]
        public static void AD()
        {
            ModalForm form = new ModalForm(); // 創建對話框
            Application.ShowModalDialog(form); // 顯示對話框
        }

最后打开CAD,输入netload加载项目生成的dll,然后输入ad命令,操作即可。

三、效果

最后实现效果如下
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值