关闭

容智睿软件科技

2021-06-28C#/CAD二次开发开发图形创建(2)

2026-01-17 浏览:

2021-06-28C#/CAD二次开发开发图形创建(2)

网络


于 2021-06-28 22:36:26 发布

·

1.3k 阅读

·


0

·

 6

·

CC 4.0 BY-SA版权

文章标签:

#c#

#cad


本文介绍如何使用C#在AutoCAD中绘制直线,涉及CAD对象模型、图形数据库及事务管理等关键技术。通过具体代码示例展示了实体创建、块表操作及事务提交的过程。


ACE-Step


音乐合成

ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言


一键部署运行

代码如下:


using System;

using System.Collections.Generic;

using System.Text;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.ApplicationServices;


namespace _2图形创建

{

    public class LineExam

    {

        [CommandMethod("LineDemo")]

        public void LineDemo()

        {

            //声明一个直线对象

            Line line1 = new Line();

            //声明两个点坐标

            Point3d startPoint = new Point3d(100, 100, 0);

            Point3d endPoint = new Point3d(200, 200, 0);

            //设置属性

            line1.StartPoint = startPoint;

            line1.EndPoint = endPoint;

            //声明图形数据库对象

            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            //开启事务处理

            using (Transaction trans = db.TransactionManager.StartTransaction())

            { 

                //以读的方式打开块表

                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);

                //以写打开块表

                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                //加直线到快表记录

                btr.AppendEntity(line1);

                //更新数据

                trans.AddNewlyCreatedDBObject(line1, true);

                //事物提交

                trans.Commit();

            }

             

        }

        

    }

}

AI写代码

csharp


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

以上代码会在CAD中画一条直线


部分代码解释:


//声明图形数据库对象

Document doc = Application.DocumentManager.MdiActiveDocument;

AI写代码

csharp

1

2

以下转自:https://blog.csdn.net/adliy_happy/article/details/77715524


Doucment对象


Document 对象实际上就是 AutoCAD 图形,它是 DocumentCollection 对象的一部分,并提供访问与 Document 对象相关的 Database 对象。 Database 对象包括所有的图形和大部分非图形的 AutoCAD 对象。

连同 Database 对象一起, Document 对象提供访问图形状态栏(StatusBar),document 对象被打开的窗口(Window),Editor (Editor) 和事务管理器(TransactionManager)的对象。Editor 提供用户以输入形式获取的点、输入字符串或数字值的功能。

事务管理器对象用于访问将多个 database 对象下的单个操作当作一个 transaction 对象。事务可以被嵌套,当用户完成事务时,可以提交或放弃已做的改变。



Database db = doc.Database;

AI写代码

csharp

1

以下转自https://www.cnblogs.com/rliverpool/p/3949606.html


DataBase对象层次


Database 对象包括所有的图形和大部分非图形的 AutoCAD 对象。 被包含在 Database 中的一些对象有实体,符号表,命名字典。实体在 Database 中表示图纸内部的图形对象。直线、圆、圆弧、文本、填充和多段线都是实体的一个例子。用户可以在屏幕上看到一个实体并可以操作它。


用户通过 Document 对象的 Database 成员属性可以访问当前文档的 Database 对象。


Application.DocumentManager.MdiActiveDocument.Database


符号表和字典


符号表和字典对象提供对非图形对象的访问(块、图层、线型、布局等等)。在AutoCAD中的每一个图形都包含9个固定的符号表,然而图形中的字典的数量是可以根据功能和应用程序的使用类型来改变的。新的符号表不能被添加到 Database 中去。


例如,层表 (LayerTable)就是符号表,它包含层表记录,块表也是符号表,它包含块表记录。所有的图形实体 (直线、圆、圆弧等等) 都是属于一个块表记录。默认情况下,每一个图形都为模型空间和图纸空间预定义了块表记录。每一个图纸空间布局都有它自己的块表记录。


字典是一个可以包含任何 AutoCAD 对象或 Xrecord 对象的容器。



   //开启事务处理

            using (Transaction trans = db.TransactionManager.StartTransaction())

AI写代码

csharp

1

2

以上代码未能搜到详解,望告知!


//以读的方式打开块表

BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);

//以写打开块表

BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

AI写代码

csharp

1

2

3

4

以上代码也是一知半解,望告知!

以下转载于:https://blog.csdn.net/zhengxiaotaozz/article/details/110817074


关于BlockTable、BlockTableRecord和BlockReference的区别


1、第一级为DWG文件,可将其视为一个数据库(database)。存储了所有的信息。而块表(BlockTable)就是它的下一级。虽然叫做块表,但是并不意味着只和块有关系,其他元素例如:各种线也是存放在块表中的。


各种dictionary与BlockTable同级。


2、BlockTable的下一级为块表记录(BlockTableRecord),当将一个dwg文件插入进来时就创建了一个块表记录。此时块表记录存放在块表中。


3、当在模型空间中也就是绘图区域中插入了一个块的实例时即产生了BlockReference,即一个块表记录(BlockTableRecord)的引用实例也称之为块引用。


块引用(BlockReference)有位置坐标、角度等等参数。


简单讲BlockTable对应多个BlockTableRecord,一个BlockTableRecord对应多个BlockReference。BlockTableRecord中包含了各种线。


提供组成块的各种线可以创建BlockTableRecord,给一个点就可以根据BlockTableRecord创建BlockReference了。


//加直线到快表记录

btr.AppendEntity(line1);

//更新数据

trans.AddNewlyCreatedDBObject(line1, true);

//事物提交

trans.Commit();

AI写代码

csharp

1

2

3

4

5

6

以上代码也没有找到解释!


以下转载自https://www.cnblogs.com/hyjj/p/5337726.html


在C#中开启事物


1.为什么要开启事务:


举一个简单的例子:在银行业务中,有一条记账原则,即又借有贷。为了保证这种原则,每发生一笔银行业务,就必须保证会计账目上借方科目和贷方科目至少个少一笔,并且这两笔要么同时成功,要么同时失败。


事务是一个单个的工作单元。如果某一个事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久部分。如果事务遇到错误,这时必须进行回滚操作,则所有数据更改均被清除。


2.在C#中开启事务


我们都知道在数据库中如何开启事务,那么如果想通过在C#中开启事务必须借助Transaction类。


您可能感兴趣的与本文相关的镜像

————————————————

版权声明:本文为CSDN博主「徐记荣」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_37638874/article/details/118312677


浏览 awei 主页 关注 投稿量: 粉丝量: 关注量:
标签:
加载中~

推荐文章

智能客服
转人工 ×