许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  我的CAD操作方式:基于CAD 2014和ObjectARX基础操作实现

我的CAD操作方式:基于CAD 2014和ObjectARX基础操作实现

阅读数 2
点赞 0
article_banner

在这里插入图片描述
cad 操作方式以及解析:

   1):新建一个 类  库,NetFramework 框架选择3.5,添加AutoCAD 2008的两个dll引用:acmgd.dll,acdbmgd.dll。(在安装目录下能找到)

2):添加命名空间

Autodesk.AutoCAD.ApplicationServices; //CAD实体

Autodesk.AutoCAD.EditorInput;//命令栏

Autodesk.AutoCAD.Runtime;//运行时,如设置 指令

Autodesk.AutoCAD.DatabaseServices;//数据库服务

  1. 获取当前文档,数据库,和命令栏
  2. 启一个事务,获取模型空间的所有块表记录;
  3. 遍历块表记录的所有对象,判定是否为单行文本,如果是则在命令栏输出文本内容。
  4. 编译和运行

打开CAD,输入netload 加载编译的dll,输入指令:sss,即可看到运行效果

解析 单行文本替换:

using (Database blkDb = new Database(false, true))
                    {
                        //read drawing 
                        blkDb.ReadDwgFile(ThisAppPath, System.IO.FileShare.Read, true, null);
                        blkDb.CloseInput(true);
                        #region 处理替换数据
                        using (Transaction Bst = blkDb.TransactionManager.StartTransaction())
                        {
                            BlockTable btY = (BlockTable)Bst.GetObject(blkDb.BlockTableId, OpenMode.ForRead);
                            BlockTableRecord btrY = (BlockTableRecord)Bst.GetObject(btY[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                            foreach (ObjectId btrId in btrY)///替换对应的数据
                            {
                                Entity baseEntity = (Entity)Bst.GetObject(btrId, OpenMode.ForWrite);///获取当前正在处理的
                                if (baseEntity.GetType() == typeof(DBText))
                                {
                                    DBText ThisText = (DBText)baseEntity;
                                    if (ThisText.TextString == "05-07-1")
                                    {
                                        ThisText.TextString = "这个是测试清除";
                                    }
                                    if (ThisText.TextString == "TIN-23046")
                                    {
                                        ThisText.TextString = "这是测试清除";
                                    }
                                } 
                            }
                            Bst.Commit();
                        }
  }

拷贝数据到已经打开的文件里

[CommandMethod("InsertOut")]
        //插入外面的块文件
        public static void InsertOut()
        {
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            //PromptPointResult ppr = ed.GetPoint("选择插入点");
            //Point3d pt = ppr.Value;//获取到插入点 
            Point3d pt;                   //utility.WriteToEditor(pt.ToString());
            DBOP dal = new DBOP();
            List<FileSet> listFiles = new List<FileSet>();
            listFiles = dal.Query().ToList();
            if (listFiles != null)
            {
                for (int i = 0; i < listFiles.Count; i++)
                {
                    pt = new Point3d(800 * i, 300, 300);//获取到插入点                      
                    string ThisAppPath = $"{Environment.CurrentDirectory}\\modelFile\\{listFiles[i].FileName}"; 
                    using (Database blkDb = new Database(false, true))
                    {
                        //read drawing 
                        blkDb.ReadDwgFile(ThisAppPath, System.IO.FileShare.Read, true, null);
                        blkDb.CloseInput(true);
                        #region 处理替换数据
                        using (Transaction Bst = blkDb.TransactionManager.StartTransaction())
                        {
                            BlockTable btY = (BlockTable)Bst.GetObject(blkDb.BlockTableId, OpenMode.ForRead);
                            BlockTableRecord btrY = (BlockTableRecord)Bst.GetObject(btY[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                            foreach (ObjectId btrId in btrY)///替换对应的数据
                            {
                                Entity baseEntity = (Entity)Bst.GetObject(btrId, OpenMode.ForWrite);///获取当前正在处理的
                                if (baseEntity.GetType() == typeof(DBText))
                                {
                                    DBText ThisText = (DBText)baseEntity;
                                    if (ThisText.TextString == "05-07-1")
                                    {
                                        ThisText.TextString = "这个是测试清除";
                                    }
                                    if (ThisText.TextString == "TIN-23046")
                                    {
                                        ThisText.TextString = "这是测试清除";
                                    }
                                } 
                            }
                            Bst.Commit();
                        }
                        #endregion 
                        using (DocumentLock docLock = doc.LockDocument())//多文档要先这样,否则报至命错误 
                        {
                            using (Transaction t = doc.TransactionManager.StartTransaction())
                            {
                                string name = $"a{i}";//aa是不与blockPath文件中的任何块重名的字符串
                                                      //insert it as a new block 
                                ObjectId idBTR = doc.Database.Insert(name, blkDb, false);
                                //create a ref to the block 
                                BlockTable bt = (BlockTable)t.GetObject(doc.Database.BlockTableId, OpenMode.ForRead); 
                                BlockTableRecord btr = (BlockTableRecord)t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                                using (BlockReference bref = new BlockReference(pt, idBTR)) //pt是一个Point3D坐标,这里是插入进当前dwg文件中
                                { 
                                    btr.AppendEntity(bref);
                                    t.AddNewlyCreatedDBObject(bref, true);
                                }
                               
                                t.Commit();
                            }
                        }
                    }
                }
            }

        }

创建dll

   l链接文件:

 command "netload" "https://www.gofarlic.com\test\CAD\CAD控件Test\CadCommand\CadCommand\CadCommand\bin\Debug\CadCommand.dll"



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空