本文主要是介绍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数据 添加(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!