CAD二次开发IFoxCAD框架系列(16)- IFoxCad的架构介绍

主要是提供一个最小化的内核,即 DBTrans、SymbolTable、ResultData、SelectFilter 等基础类,其他的功能都通过扩展方法的方式来实现。

DBTrans类

事务管理器是cad .net二次开发非常重要的一部分,只要涉及到读写cad数据的地方几乎都在事务里完成。利用事务管理器可以自动的在退出事务的时候执行释放对象等操作,防止cad崩溃。

但是,我们会发现每次开启事务,完成的都是差不多的任务,每次都要调用commit(),获取到符号表,需要写模式,读模式等提权降级操作,重复而且繁琐,但这些操作都可以自动完成。因此 ifoxcad 提供事务管理器类来完成这些繁琐的工作,让用户可以更专注于自己的业务功能。

ifox推荐对事务的使用是简洁的,高性能的,因此提出采用一个事务贯穿始终的用法。这是它的一个很重要的思路。

DBTrans类里基本的封装就是Transaction,然后是Document、Database、Editor、符号表、命名字典等,而这些其实都是CAD二次开发关于图元操作经常用到的概念。

在这里插入图片描述

所以使用它,我们可以完成:

  • 原生cad提供的事务管理器的全部操作
  • 方便的符号表操作
  • 方便的基础属性操作
  • 方便的对象获取操作
  • 方便的字典操作

1. 事务开启

特定事务范围

using (DBTrans tr = new DBTrans())
{
  ....
}

或者:
一个事务贯穿始终,新语法的写法,这个是推荐的。

 using var tr = new DBTrans(); 

2. 源码解析

构造函数

我们看下事务开启的源码:

在这里插入图片描述
可以看到,适配各种事务的开启方式,甚至可以直接针对某个图纸文件进行事务的开启。

常见图元操作属性

封装的常用CAD属性如下:
在这里插入图片描述
利用他们可以进行各种图元操作。

块表对象获取

如下是各种块表对象的获取,通过对块表对象的获取来对块表进行各种操作。
在这里插入图片描述

字典对象获取

在这里插入图片描述

事务处理相关函数

在这里插入图片描述

SymbolTable类

主要是为了统一处理9个符号表,Ifoxcad 类库的符号表其实是一个符号表的泛型类,直接将符号表和符号表记录包装为一个整体。

  • BlockTable 块表
  • LayerTable 图层表
  • DimStyleTable 标注样式表
  • LinetypeTable 线型表
  • RegAppTable 应用程序表
  • TextStyleTable 字体样式表
  • UcsTable 坐标系表
  • ViewportTable 视口表
  • ViewTable 视图表

1. 符号表的使用

获取符号表
            using (DBTrans tr = new DBTrans()) // 第一步,开启事务
            {
                var layerTable = tr.LayerTable;// 第二步,获取图层表  
            } // 事务结束并自动提交
符号表中添加对象
 using (DBTrans tr = new DBTrans()) // 第一步,开启事务
 {
     // 第二步,获取图层表
     var layTable = tr.LayerTable;
     //添加图层
     layTable.Add("1");
 } 

获取符号表里的元素

在这里插入图片描述

using (DBTrans tr = new DBTrans()) // 第一步,开启事务
{ 
var layerTable = tr.LayerTable; // 第二步,获取图层表
layerTable.Add("1"); // 第三步,添加名为“1”的图层,即新建图层
ObjectId id = layerTable["1"]; // 第四步,获取图层“1”的id。   
} // 事务结束并自动提交

每个符号表都提供了索引形式的获取元素id的写法。

线型表操作
  using var tr = new DBTrans();
  // 两种方式
  // 第一种,直接调用tr.LinetypeTable.Add("hah")函数,然后对返回值ObjectId做具体的操作。
  // 第二种,直接在Action委托里把相关的操作完成。
  tr.LinetypeTable.Add(
                     "hah",
                     ltt =>
                     {
                         ltt.AsciiDescription = "虚线";
                         ltt.PatternLength = 0.95; //线型的总长度
                         ltt.NumDashes = 4; //组成线型的笔画数目
                         ltt.SetDashLengthAt(0, 0.5); //0.5个单位的划线
                         ltt.SetDashLengthAt(1, -0.25); //0.25个单位的空格
                         ltt.SetDashLengthAt(2, 0); // 一个点
                         ltt.SetDashLengthAt(3, -0.25); //0.25个单位的空格
                     });
  // 这段代码同时演示了 ifoxcad 类库关于符号表的public ObjectId Add(string name, Action<TRecord> action)这个函数的用法。
  // 或者直接调用:
  tr.LinetypeTable.Add("hah", "虚线", 0.95, new double[] { 0.5, -0.25, 0, -0.25 });

今天先简单介绍到这里,后续会给大家更新它的各种用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术闲聊DD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值