AUTOCAD二次开发系列教程02-创建实体过程的理解

发布时间 2023-05-29 20:51:43作者: jiangyong1995

目录

01案例

02步骤讲解

03关键类理解

04总结

05源码地址


01案例

创建一个圆

using Autodesk.AutoCAD.ApplicationServices.Core;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;

namespace Hello.Cad.App01
{
    public class Create_02
    {
        /// <summary>
        /// CommandMethod特性中的第一个参数'globalName',表示CAD反射读取该特性时,命令行能够显示和执行的名称。
        /// </summary>
        [CommandMethod("create_method")]
        public void MyFunction()
        {
            //由静态对象Application获取文档对象
            var doc = Application.DocumentManager.MdiActiveDocument;

            //模态窗体,调用此函数时,需要锁定文档
            using (doc.LockDocument())
            {
                //当前文档的数据库对象
                var db = doc.Database;

                //开启事务
                using (var host = doc.TransactionManager.StartTransaction())
                {
                    //获取块表
                    using (var blockTable = host.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable)
                    {
                        //获取快表中的块表记录(模型空间)
                        using (var modelspaceRecord = host.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord)
                        {
                            //输入参数
                            var origin = new Point3d(10, 10, 0);
                            var normal = Vector3d.ZAxis;
                            var radius = 100;

                            //调用构造函数来创建圆
                            var cirlce = new Circle(origin, normal, radius);

                            //块表记录,添加该实体
                            var circleId = modelspaceRecord.AppendEntity(cirlce);

                            //事务,记录该实体
                            host.AddNewlyCreatedDBObject(cirlce, true);
                        }
                    }

                    host.Commit();
                }
            }
        }
    }
}

02步骤讲解

a)获取文档对象,锁定文档(如果从模特窗体触发命令)

b)开启新的事务对象(文档或数据库对象均可)

c)获取块表对象

d)获取块表中模型空间的块表记录

e)创建一个园

f)块表记录中添加园这条数据

g)通知事务实体已更新

h)提交事务

03关键类理解

Application

1.概念:应用程序对象,对应当前开启的AutoCAD应用程序的一个实例对象
2.作用:通过它,获取当前窗体的信息;开启一个属于当前窗体的自定义子窗体;获取当前活跃的文档对象;注册窗体事件

Document

1.概念:文档对象,包含模型空间与布局空间
2.作用:用户通过文档来与AutoCAD交互,比如创建、修改实体,打印布局页等

Database

1.概念:数据库对象,每个文档对象的一个属性,使用它实现绘图功能
2.作用:通过它来访问到表与字典对象,进而来操作实体

Transaction

1.概念:事务对象,可以通过文档对象或数据库对象的事务管理器,新建一个新的事务
2.作用:大部分在AutoCAD的操作,只有通过事务才能提交到数据库,从而在文档中显示

BlockTable

1.概念:块表对象,类似于SQL中的一个数据库对象
2.作用:用来管理块表记录对象,支持添加、判断块表记录的功能

BlockTableRecord

1.概念:块表记录,类似于SQL中的一个表,比如模型空间就是一个块表记录实例
2.作用:它能够添加块引用到该对象中,支持对块引用的操作,而一个块表记录是由多个实体构成的,比如模型空间或者一般建立的块引用

04总结

  在AutoCAD中创建一个实体的过程,好比往常用的关系型数据库如SQLSERVER中插入一条数据一样。实体对象是一条数据,模型空间块表记录是一个表,通过开启事务,将数据添加到表中,最后提交,这样数据就能够通过文档来呈现在用户眼中;如有不正确的地方,欢迎大家的指正

05源码地址

https://gitee.com/jiangyong95/BlogCAD