首页 > 其他分享 >AUTOCAD二次开发系列教程02-创建实体过程的理解

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

时间:2023-05-29 20:55:08浏览次数:42  
标签:02 AutoCAD AUTOCAD 对象 块表 var 文档 二次开发 using

目录

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

标签:02,AutoCAD,AUTOCAD,对象,块表,var,文档,二次开发,using
From: https://www.cnblogs.com/looufly/p/17440711.html

相关文章

  • 2023ciscn-misc-国粹复现
    说明:此题给出的两个图片,a.png及k.png是分别表示的x坐标和y坐标。然后再用此坐标对题目进行画图,从而得出flag但是由于本人的代码技术有限只能借鉴大佬们的代码然后对其进行分析学习。importnumpyasnpfromPILimportImage classtest():   def__init__(self):......
  • 2023盘古石决赛 物联网 Robot
    其实是一道非常简单的IoT分析题,甚至没有分析的成分,但是比赛过程中出的意外太多了,思路偏了,导致没能出题,而赛后复盘一下就明白了,完全是个简单题,所以写个博客警醒一下自己。个人感觉这道题完全算不上物联网的题,靠搜就可以做出来,只是当时做出来第一道题之后,以为要靠解包才能做,加上st......
  • 20230529 模拟赛订正
    A.xorontree在一棵\(n\)个点的树上,第\(i\)个点初始点权\(w_i\),有\(q\)次操作:0uv:\(v\tow_u\)1x:查询\(w_x\operatorname{xor}w_y\)的最大值,其中\(y\)是\(x\)的祖先(包括\(x\))\(n,q\le10^5\),TL=2s,ML=128MB.在考场上先是绞尽脑汁想到一个时间复杂度......
  • hdu 5102(队列+节点扩展)
    TheK-thDistanceTimeLimit:8000/4000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)ProblemDescriptionGivenatree,whichhasnnodeintotal.Definethedistancebetweentwonodeuandvisthenumberofedgeontheirunique......
  • C/C++家谱管理系统[2023-05-29]
    C/C++家谱管理系统[2023-05-29]题目8:家谱管理系统(1~3人)[问题描述]实现具有下列功能的家谱管理系统1).输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2).......
  • AI2023更新了,最新illustrator 2023新功能
    AI2023更新了,最新illustrator2023新功能有哪些呢?体验从Web和移动图形到徽标、图标、插图、包装设计和广告牌的一切。享受Illustrator的创作自由。Illustrator2023是一款矢量设计应用程序,可让您创建用于大幅面打印(例如广告牌)的数字图形或图像,无论在何处使用,它们看起来都清晰......
  • 2023创建谷歌账号显示此号码无法用于验证_国内手机无法注册谷歌Gmail账号的解决办法
    为什么经常出现国内手机号码无法验证注册谷歌账号的问题呢?来回注册每次都显示网络正在核验中,请重试,返回上一步注册谷歌账号,还是显示此电话号码无法用于验证。注册谷歌账号手机号验证成功个人认为最主要的原因有两点:注册IP和手机所在国家不一致,导致国内手机无法用于谷歌账号注册的......
  • 艾媒金榜|2023年中国信创数据库企业TOP15
    数据库是一种用于存储和管理拥有固定格式和结构数据的仓库型数据管理系统。数据库处于IT架构的核心位置,是连接上层应用和底层基础资源的重要枢纽,向上是各种应用的支撑引擎,向下调动计算、网络、存储等基础资源。在信息化时代,数据库已经逐渐应用于各行各业。本次上榜的企业分别为:人......
  • Adobe Acrobat DC 2021 中文直装版 win/mac版
    AdobeAcrobatDC2021是一款功能强大的PDF编辑软件。它提供了多种编辑PDF的工具,如创建、编辑、转换和签署PDF文件等。该软件还可以将PDF转换为其他文件格式,如Word、Excel、PowerPoint、图像等。AdobeAcrobatDC2021还支持OCR(光学字符识别)技术,可以将扫描的文档转换......
  • C语言课程设计题目[2023-05-29]
    C语言课程设计题目[2023-05-29]C语言课程设计题目一、设计要求与设计报告设计要求1.任意选定以下一个题目完成2.模块化程序设计3.锯齿型程序书写格式4.必须上机调试通过设计报告格式1.设计目的2.总体设计(程序设计组成框图、流程图)3.详细设计(模块功能说明(如函数功能、入......