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

打印 上一主题 下一主题

主题 529|帖子 529|积分 1587

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

事件管理器是cad .net二次开辟非常重要的一部分,只要涉及到读写cad数据的地方几乎都在事件里完成。利用事件管理器可以自动的在退失事件的时间实行释放对象等操纵,防止cad崩溃。
但是,我们会发现每次开启事件,完成的都是差不多的使命,每次都要调用commit(),获取到符号表,须要写模式,读模式等提权降级操纵,重复而且繁琐,但这些操纵都可以自动完成。因此 ifoxcad 提供事件管理器类来完成这些繁琐的工作,让用户可以更专注于自己的业务功能。
ifox推荐对事件的利用是轻巧的,高性能的,因此提出采用一个事件贯穿始终的用法。这是它的一个很重要的思路。
DBTrans类里基本的封装就是Transaction,然后是Document、Database、Editor、符号表、定名字典等,而这些其实都是CAD二次开辟关于图元操纵常常用到的概念。

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


  • 原生cad提供的事件管理器的全部操纵
  • 方便的符号表操纵
  • 方便的底子属性操纵
  • 方便的对象获取操纵
  • 方便的字典操纵
1. 事件开启

特定事件范围
  1. using (DBTrans tr = new DBTrans())
  2. {
  3.   ....
  4. }
复制代码
或者:
一个事件贯穿始终,新语法的写法,这个是推荐的。
  1. using var tr = new DBTrans();
复制代码
2. 源码解析

构造函数

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

可以看到,适配各种事件的开启方式,甚至可以直接针对某个图纸文件举行事件的开启。
常见图元操纵属性

封装的常用CAD属性如下:

利用他们可以举行各种图元操纵。
块表对象获取

如下是各种块表对象的获取,通过对块表对象的获取来对块表举行各种操纵。

字典对象获取


事件处理相关函数


SymbolTable类

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


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

获取符号表

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

  1. using (DBTrans tr = new DBTrans()) // 第一步,开启事务
  2. {
  3.      // 第二步,获取图层表
  4.      var layTable = tr.LayerTable;
  5.      //添加图层
  6.      layTable.Add("1");
  7. }
复制代码
获取符号表里的元素


  1. using (DBTrans tr = new DBTrans()) // 第一步,开启事务
  2. {
  3. var layerTable = tr.LayerTable; // 第二步,获取图层表
  4. layerTable.Add("1"); // 第三步,添加名为“1”的图层,即新建图层
  5. ObjectId id = layerTable["1"]; // 第四步,获取图层“1”的id。   
  6. } // 事务结束并自动提交
复制代码
每个符号表都提供了索引情势的获取元素id的写法。
线型表操纵

  1.   using var tr = new DBTrans();
  2. // 两种方式  // 第一种,直接调用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 });
复制代码
今天先简单介绍到这里,后续会给大家更新它的各种用法。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表