C# CAD-Xdata数据 添加(一)

2024-02-17 01:04
文章标签 c# 数据 .net cad netcore xdata

本文主要是介绍C# CAD-Xdata数据 添加(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 运行环境Visual Studio 2022 c# cad2016

一、XData(扩展数据)特定代码值

XData(扩展数据)特定代码值 XData通过一系列DXF组码(DxfCode)存储不同类型的数据,包括但不限于ASCII字符串、已注册应用程序名称、控制字符串、图层信息、二进制数据块、坐标值、方向向量、实数、距离、比例和整数等。

ExtendedDataAsciiString=1000:表示一个ASCII格式的字符串。
ExtendedDataRegAppName=1001:指向已注册应用程序的名称,用于识别或解释相关联的XData。
ExtendedDataControlString = 1002:控制字符串,通常用作分隔符或其他特殊标记用途。
ExtendedDataLayerName = 1003:图层名称信息。
ExtendedDataBinaryChunk = 1004:二进制数据块,用于存储非文本格式数据。
ExtendedDataHandle=1005:句柄,指向数据库中的其他对象。坐标相关:ExtendedDataXCoordinate =1010
ExtendedDataYCoordinate = 1020
ExtendedDataZCoordinate=1030:分别表示笛卡尔坐标系下的X、Y、Z坐标值。
ExtendedDataWorldXCoordinate=1011, ExtendedDataWorldYCoordinate =1021, ExtendedDataWorldZCoordinate =1031:世界坐标系下的绝对坐标X、Y、Z。
ExtendedDataWorldXDisp, ExtendedDataWorldYDisp, ExtendedDataWorldZDisp:世界坐标系下的位移量。
ExtendedDataWorldXDir, ExtendedDataWorldYDir, ExtendedDataWorldZDir:世界坐标系下的方向向量。其他数值类型:ExtendedDataReal=1040:实数类型的数值。
ExtendedDataDist =1041:距离数值,精确的距离测量结果。
ExtendedDataScale=1042:比例数值,例如缩放因子。
整数类型:
ExtendedDataInteger16= 1070:16位整数。
ExtendedDataInteger32=1071:32位整数。ExtendedDataLong=1072:有时也用于表示32位整数,具体取决于上下文。
还有更多其它组码用来表示颜色、点样式、线型等图形属性以及各种布尔值、角度、日期时间等数据类型。

二、新建注册应用程序的名称

当使用XData(扩展数据)存储自定义信息时,包含一个DXF组码为ExtendedDataRegAppName=1001的数据,确保其他软件组件能够根据这个标识来解析相应的数据格式。 

 public static void CreateRegApp(this Document doc, string appName){try{using (var documentLock = doc.LockDocument()){using (Transaction trans = doc.Database.TransactionManager.StartTransaction()){RegAppTable table = (RegAppTable)trans.GetObject(doc.Database.RegAppTableId, OpenMode.ForWrite, false);if (!table.Has(appName)){RegAppTableRecord regAppRec = new RegAppTableRecord();regAppRec.Name = appName;table.Add(regAppRec);trans.AddNewlyCreatedDBObject(regAppRec, true);}trans.Commit();}}}catch (Exception ex){throw ex;}}

三、向选定实体添加扩展数据(XData)

选定的AutoCAD实体上添加包含已注册应用程序标识以及特定ASCII文本信息的扩展数据。

 using (Transaction transaction = db.TransactionManager.StartTransaction()){Entity ent01 = transaction.GetObject(outerId, OpenMode.ForWrite) as Entity;ResultBuffer rb = new ResultBuffer();rb.Add(new TypedValue((int)DxfCode.ExtendedDataRegAppName, "ACAD"));rb.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "作者:John Doe"));ent01.XData = rb;// 构造 ResultBuffer 对象来存储扩展数据transaction.Commit();ed.WriteMessage("\n成功向选中实体添加了 XData。");}

 四、检查是否成功添加了扩展数据(XData)


编写代码检查: 您可以再次通过.NET API读取刚刚设置过XData的实体,并查看其XData属性来验证数据是否已成功添加。

 using (Transaction transaction = db.TransactionManager.StartTransaction()){Entity ent01 = transaction.GetObject(outerId, OpenMode.ForRead) as Entity;// 检查实体是否存在扩展数据if (ent01.XData != null){ResultBuffer rb = ent01.XData; // 获取实体的扩展数据// 遍历ResultBuffer以查看数据foreach (TypedValue tv in rb){switch ((DxfCode)tv.TypeCode){case DxfCode.ExtendedDataRegAppName:string regAppName = tv.ToString();break;case DxfCode.ExtendedDataAsciiString:string asciiData = tv.ToString();ed.WriteMessage("\n找到的ASCII字符串: " + asciiData);break;// 其他类型的DXF组码...}}}else{ed.WriteMessage("\n实体没有扩展数据!");}// 无需在这里提交事务,因为我们只是读取数据}

五、总结:

一、XData(扩展数据)特定代码值 XData通过一系列DXF组码(DxfCode)存储不同类型的数据,包括但不限于ASCII字符串、已注册应用程序名称、控制字符串、图层信息、二进制数据块、坐标值、方向向量、实数、距离、比例和整数等。

二、新建注册应用程序的名称 为了使其他软件组件能够识别并解析自定义的XData格式,可以创建一个已注册的应用程序。提供的C#方法CreateRegApp会检查文档中的RegAppTable是否存在指定名称的应用程序,如果不存在,则创建新的RegAppTableRecord并添加到表中。

三、向选定实体添加扩展数据(XData) 通过.NET API,可以为选定的AutoCAD实体添加包含已注册应用程序标识和特定ASCII文本信息的XData。示例代码中创建了一个ResultBuffer对象,并向其中添加了指向“ACAD”注册应用程序和一个ASCII字符串的TypedValue,然后将该ResultBuffer设置为实体的XData属性。

四、检查是否成功添加了扩展数据(XData) 验证是否成功添加XData的方法是再次读取实体的XData属性。如果实体具有非空的XData属性,则遍历其内容并根据DXF组码解析出已添加的数据,例如在示例中输出找到的ASCII字符串。由于只是读取数据,因此无需提交事务。

//祝大家好运

//感谢大家的点赞,收藏,转发,关注  

这篇关于C# CAD-Xdata数据 添加(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/716228

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口