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

news2024/11/26 23:29:25

主要是提供一个最小化的内核,即 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 });

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握Selenium爬虫的日志管理:调整–log-level选项的用法

介绍 在使用Selenium进行Web数据采集时&#xff0c;日志管理是一个至关重要的部分。日志不仅帮助开发者监控爬虫的运行状态&#xff0c;还能在出现问题时提供有价值的调试信息。Selenium提供了多种日志级别选项&#xff0c;通过调整–log-level参数&#xff0c;开发者可以控制日…

架起高效工作与持续学习之间的桥梁

程序员如何平衡日常编码工作与提升式学习&#xff1f; 在快速迭代的编程世界中&#xff0c;程序员们不仅需要高效完成日常编码任务&#xff0c;还需不断学习新技术、深化专业知识&#xff0c;以应对日益复杂的项目挑战。然而&#xff0c;如何在繁忙琐碎的编码工作与个人成长之…

Facebook的区块链技术:提升数据安全与隐私保护

去中心化的优势 随着数字化时代的快速发展&#xff0c;数据安全和隐私保护已成为全球范围内备受关注的话题。Facebook作为全球最大的社交平台之一&#xff0c;正在积极探索如何通过区块链技术来提升数据的安全性和用户的隐私保护。区块链技术以其去中心化、不可篡改和透明的特…

网络硬盘录像机NVR解決方案:海思3520D模组与全面的NVR方案支持

随着视频监控技术的不断发展&#xff0c;网络硬盘录像机&#xff08;NVR&#xff09;已经成为现代安防系统中不可或缺的一部分。NVR作为视频监控系统的核心设备&#xff0c;不仅负责视频的实时录制和存储&#xff0c;还承担着视频回放、告警触发、远程监控等重要功能。 我们基…

C语言中的⽂件操作

1. 为什么使⽤⽂件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化…

科望医药两年亏损超16亿:大幅收缩成本,核心产品试验数据欠佳

《港湾商业观察》黄懿 6月27日&#xff0c;科望医药集团&#xff08;下称“科望医药”&#xff09;向港交所提交上市申请&#xff0c;中信证券为其独家保荐人。 科望医药是一家处于临床阶段的生物医药公司&#xff0c;利用新一代疗法创新肿瘤治疗。 该公司大有来头&#xff…

【VRPCB】Python+Gurobi求解运输问题建模实践三

采用PythonGurobi求解带有集群回程需求的VRPCB问题 目录 1. 模型1.1 VRPB问题介绍1.2 数学模型1.2.1 模型参数1.2.2 数学模型1.2.3 模型分解 2. 数据结构3. Gurobi源码4. 求解结果参考 1. 模型 1.1 VRPB问题介绍 带有回程需求的VRP问题&#xff08;VRP with Backhauls,VRPB)最…

PTrade常见问题系列23—量化是否支持读写文件?如何实现?

jupyterhub进程异常退出&#xff1f; 1、检查/var/log/jupyterhub.log日志&#xff0c;发现在进程503之前存在QA_DATA的请求URL&#xff0c;该问题是通过终端内帮助文档页面的常见问题说明链接跳转时&#xff0c;存在小概率导致hub进程503的问题&#xff1b; 2、已提交需求202…

高质量翻译对增强游戏对用户情感影响的影响

游戏中的事件往往是游戏中最难忘、最激动人心的时刻。这些事件——无论是戏剧性的情节转折、激烈的战斗&#xff0c;还是发自内心的角色互动——都是为了唤起玩家强烈的情感&#xff0c;让他们深深地投入到游戏中。然而&#xff0c;如果这些事件不能有效地传达给不同语言和文化…

【二分查找】--- 二分模板总结

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 从本博客开始&#xff0c;博主将开始分享二分查找算法的相关知识。 &#x1f3e0; 朴素二分模板 --- 二分查找 &#x1f4cc; 题目内容 二…

【Java日志系列】Log4j日志框架

目录 前言 一、Log4j简介 二、Log4j组件介绍 1. Loggers 2. Appenders 3. Layouts 三、快速入门 1. 入门代码 2. 日志级别 四、配置文件的使用 五、自定义日志输出格式 六、配置不同的Appender 1. 输出到文件 2. 输出到数据库 七、自定义Logger配置 总结 前言…

用 js canvas 做一个优雅的模拟时钟, canvas 教程实例

用 js canvas 做一个优雅的模拟时钟&#xff0c; canvas 教程实例 有很多次&#xff0c;我都想找到一个比较不错的&#xff0c;可以查看模拟时钟的网页。 有时候是想看下距离某个时间点还有多长时间&#xff0c;有时候是想看一下&#xff0c;两个时间点之间的间隔是多少。因为…

迅为i.MX8MM开发板控制GPIO高低电平-使用命令控制GPIO

在文件系统的/sys 目录下给用户提供了许多接口&#xff0c;比如在/sys 下面的 bus 目录&#xff0c;这个目录下放置的都是 和总线相关的&#xff0c;比如 I2C&#xff0c;usb 等。如下图所示&#xff1a; 本章我们需要重点关注下 class 目录&#xff0c;这个目录下放置的是一…

MyBatis-Plus 进阶之条件构造器Wrapper和常用接口

目录 1.wrapper 介绍 1.1什么是 wrapper 2.QueryWrapper 2.1测试前的准备 2.2例1&#xff1a;组装查询条件 2.3例2&#xff1a;组装排序条件 2.4例3&#xff1a;组装删除条件 2.5例4&#xff1a;条件的优先级 2.6例5&#xff1a;组装 select 子句 2.7例6&#xff1a;…

Redis常见的数据类型和应用场景

目录 Redis概述 简介 特点 架构 使用场景 Mermaid图示 Redis数据类型 基础数据类型 扩展数据类型&#xff08;Redis 3.2及以上版本&#xff09; Mermaid图示 String类型详解 定义 内部实现 应用场景 Mermaid图示 List类型详解 定义 内部实现 应用场景 Merma…

旧数据与新系统 —— 重现数据迁移之旅

某天&#xff0c;正做卡呢。突然收到客户通知&#xff1a;不用做了&#xff0c;这系统不要了。 啊? 都搞了好几年&#xff0c;说不要就不要了&#xff0c;客户这么财大气粗&#xff1f; 细问之下&#xff0c;原来变化来源于最新的商业决策——客户收购了一个市场占有率比较大…

基于JSP的社区疫情防控管理信息系统

你好&#xff0c;我是专注于计算机技术研究的学姐。如果你对社区疫情防控管理信息系统感兴趣或有相关需求&#xff0c;欢迎私信交流。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJavaBeansServlet 工具&#xff1a;MyEclipse, Tomcat 系统展示…

仅12%程序员担心被AI取代 62%开发者在使用AI工具

**根据Stack Overflow近日发布的2024年开发者调查报告&#xff0c;只有12%的开发者认为AI威胁到了他们当前的工作&#xff0c;而高达70%的受访者已经将AI工具整合到了自己的工作流程中。**该调查共有超过6.5万名开发者参与&#xff0c;结果显示&#xff0c;使用AI工具的开发者比…

USBCAN-II/II+使用方法以及qt操作介绍

一.USBCAN-II/II介绍 USBCAN-II/II 是一款常用的 USB-CAN 转换器&#xff0c;广泛应用于汽车电子、工业自动化等领域。以下是使用该设备的一般步骤和方法&#xff1a; 1. 硬件连接 连接设备&#xff1a;将 USBCAN-II/II 的 USB 接口连接到计算机的 USB 端口。 连接 CAN 网络…

多功能声学气膜馆:解决城市噪音难题的标杆建筑—轻空间

在现代城市中&#xff0c;噪音污染已成为一个普遍存在且难以解决的问题。随着城市人口的增加和交通的繁忙&#xff0c;如何为市民提供一个安静、舒适的活动空间&#xff0c;成为城市规划者和建筑设计师亟待解决的挑战。多功能声学气膜馆&#xff0c;作为一种创新的建筑形式&…