同步操作将从 InspireFunction/IFoxCAD 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
事务管理器是cad .net二次开发过程绕不过去的一个部分,只要是涉及到读写cad数据的地方几乎都推荐在事务里完成。利用事务管理器可以自动的在退出事务的时候执行释放对象等操作,防止程序员不能释放对象,造成cad崩溃。
但是,在日常的使用中,会发现每次开启事务,然后完成的都是差不多的任务,然后每次都要调用commit()函数,每次都要获取到符号表,每次要写模式,读模式等提权降级操作,但是这些操作其实都可以自动完成的,因此 ifoxcad 内裤提供事务管理器类来完成本来需要手工完成的工作,让用户可以更方便的处理事务内的程序。
用事务管理器类可以完成:
事务管理器类的类名为:DBTrans。开启默认的事务管理器写法为:
using (DBTrans tr = new DBTrans())
{
....
}
关于cad提供的原生事务管理器的操作不是本文档的重点,因为那操作起来麻烦,不够集中的将需要在事务内的操作做统一管理。
Ifoxcad 类库的符号表其实是一个符号表的泛型类,直接将符号表和符号表记录包装为一个整体。不用担心,在实际使用的过程中,你几乎不会关心符号表的构成原理。
Ifoxcad 类库里采用如下的符号来表示9大符号表。
符号表名 | 符号表含义 |
---|---|
BlockTable | 块表 |
LayerTable | 图层表 |
DimStyleTable | 标注样式表 |
LinetypeTable | 线型表 |
RegAppTable | 应用程序表 |
TextStyleTable | 字体样式表 |
UcsTable | 坐标系表 |
ViewportTable | 视口表 |
ViewTable | 视图表 |
然后怎么使用呢?使用符号表一共分几步呢?
using (DBTrans tr = new DBTrans()) // 第一步,开启事务
{
var layerTable = tr.LayerTable;// 第二步,获取图层表
} // 事务结束并自动提交
上面是一个获取层表的例子,其他的符号表都是一样的写法,因为这些符号表都是事务管理器的属性。那么获取到符号表之后能做些什么?
using (DBTrans tr = new DBTrans())
{ // 第一步,开启事务
var layerTable = tr.LayerTable;
// 第二步,获取图层表
layerTable.Add("1");// 返回值为ObjectId
// 第三步,向层表里添加一个元素,也就是新建一个图层。
} // 事务结束并自动提交
每个符号表都有Add函数,而且提供了不止一个重载函数。
想要添加和获取符号表内的某个元素非常的简单:
using (DBTrans tr = new DBTrans()) // 第一步,开启事务
{
var layerTable = tr.LayerTable; // 第二步,获取图层表
layerTable.Add("1"); // 第三步,添加名为“1”的图层,即新建图层
ObjectId id = layerTable["1"]; // 第四步,获取图层“1”的id。
} // 事务结束并自动提交
每个符号表都提供了索引形式的获取元素id的写法。
// 两种方式
// 第一种,直接调用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});
// 获取线型表
tr.LinetypeTable["hah"];
其他符号表的操作类同。如果类库没有提供的Add函数的重载,那么Action委托可以完成你想完成的所有事情。
事务管理器类提供了Document
、 Editor
、Database
三个属性来在事务内部处理相关事项。
同时还提供了关于字典的相关属性。
提供了1个泛型 GetObject<T>
函数的重载来根据ObjectId来获取到对象。
扩展字典
SetXRecord
保存扩展数据到字典
GetXRecord
获取扩展数据
对象字典
SetToDictionary
保存数据到字典
GetFromDictionary
从字典获取数据
GetSubDictionary
获取子对象字典
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。