当前位置: 首页 > news >正文

Json的应用实例——cad 二次开发c#

以下是一个使用AutoCAD C#.NET API实现你需求的示例代码,代码实现了提示用户选择一个实体,将一些字符串变量及其对应的值组成JSON格式数据存储到实体的扩展数据(XData)中,并在弹出窗口中显示该实体的所有扩展数据信息。

效果如下:

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;public class AcadXDataSample
{[Autodesk.AutoCAD.Runtime.CommandMethod("xx")]public void Josn设置XDATA(){Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;// 提示用户选择一个实体PromptEntityOptions promptEntityOptions = new PromptEntityOptions("\n请选择一个实体: ");PromptEntityResult promptEntityResult = ed.GetEntity(promptEntityOptions);if (promptEntityResult.Status != PromptStatus.OK){return;}// 定义数据键值对Dictionary<string, string> dataDict = new Dictionary<string, string>{{ "权利人", "XX公司" },{ "性质", "集体" },{ "面积", "100㎡" },{ "联系电话", "66-6666" }};string jsonData = JsonConvert.SerializeObject(dataDict);string regAppName = "[土地登记卡]";// 注册应用程序名称(保持不变)using (Transaction trans = db.TransactionManager.StartTransaction()){RegAppTable regAppTable = trans.GetObject(db.RegAppTableId, OpenMode.ForRead) as RegAppTable;if (!regAppTable.Has(regAppName)){regAppTable.UpgradeOpen();RegAppTableRecord regAppRecord = new RegAppTableRecord();regAppRecord.Name = regAppName;regAppTable.Add(regAppRecord);trans.AddNewlyCreatedDBObject(regAppRecord, true);}trans.Commit();}// 写入XDatausing (Transaction trans = db.TransactionManager.StartTransaction()){try{Entity entity = trans.GetObject(promptEntityResult.ObjectId, OpenMode.ForWrite) as Entity;if (entity != null && !entity.IsErased && entity.IsWriteEnabled){ResultBuffer rb = new ResultBuffer(new TypedValue((int)DxfCode.ExtendedDataRegAppName, regAppName), // 组码1001new TypedValue((int)DxfCode.ExtendedDataAsciiString, jsonData)   // 组码1000);entity.XData = rb;trans.Commit();ed.WriteMessage("\n扩展数据已成功写入实体。");}else{MessageBox.Show("实体不可写或已被删除。");trans.Abort();}}catch (Exception ex){trans.Abort();MessageBox.Show($"存储扩展数据时出错: {ex.Message}");}}}[CommandMethod("xxx")]public void 显示XDATA(){Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;PromptEntityOptions promptEntityOptions = new PromptEntityOptions("\n请选择一个实体: ");PromptEntityResult promptEntityResult = ed.GetEntity(promptEntityOptions);if (promptEntityResult.Status != PromptStatus.OK) return;using (Transaction trans = db.TransactionManager.StartTransaction()){try{Entity entity = trans.GetObject(promptEntityResult.ObjectId, OpenMode.ForRead) as Entity;if (entity != null && entity.XData != null){StringBuilder sb = new StringBuilder();//sb.AppendLine("实体的扩展数据信息:");foreach (TypedValue tv in entity.XData){// 处理(组码不是1000)的扩展数据if (tv.TypeCode != (int)DxfCode.ExtendedDataAsciiString){sb.AppendLine($"{tv.Value}\n");//sb.AppendLine($"类型码: {tv.TypeCode}, 原始值: {tv.Value}");}// 仅针对 ASCII 字符串(组码1000)尝试解析JSONif (tv.TypeCode == (int)DxfCode.ExtendedDataAsciiString){//sb.AppendLine($"类型码: {tv.TypeCode}");string stringValue = tv.Value.ToString();// 尝试解析JSONbool isJson = false;try{var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(stringValue);if (dict != null && dict.Count > 0){isJson = true;//sb.AppendLine("解析为JSON:");foreach (var item in dict){sb.AppendLine($"{item.Key}:{item.Value}");}}}catch { /* 忽略解析错误 */ }// 非JSON的纯文本直接显示if (!isJson){sb.AppendLine("文本内容:");sb.AppendLine($"  {stringValue}");}}}// 显示结果string result = sb.ToString();MessageBox.Show(result, "实体扩展数据信息");ed.WriteMessage("\n" + result);}trans.Commit();}catch (Exception ex){trans.Abort();string errorMsg = $"读取扩展数据时出错: {ex.Message}";MessageBox.Show(errorMsg);ed.WriteMessage("\n" + errorMsg);}}}[CommandMethod("scxx")]public void 删除XDATA(){}[CommandMethod("scsy")]public void 删除所有XDATA(){}
}


http://www.mrgr.cn/news/95374.html

相关文章:

  • C++ 语法之数组指针
  • VideoHelper 油猴脚本,重塑你的视频观看体验
  • 警告warning: variable ‘**‘ set but not used [-Wunused-but-set-variable]的解决办法
  • 触动精灵对某东cookie读取并解密--记lua调用C语言
  • Python学习第二十二天
  • 论文阅读:Attention is all you need
  • 【实操】Mybatis-plus2.x升级到3.x
  • 蓝桥杯 之 数论
  • Halcon算子 二维码识别、案例
  • 对敏捷研发的反思,是否真是灵丹妙药?
  • STM32八股【1】-----启动流程和startup文件理解
  • 『 C++ 』线程与原子操作:高效并发编程的利器
  • 深度解读DeepSeek:源码解读 DeepSeek-V3
  • STM32八股【2】-----ARM架构
  • 面试康复训练-SQL语句
  • 如何为在线游戏选择合适的游戏盾?
  • 【数据结构】栈(Stack)、队列(Queue)、双端队列(Deque) —— 有码有图有真相
  • Maven安装与环境配置
  • 经典笔试题 小于 n 的最大整数 贪心 回溯 剪枝 全排列
  • 【yolo】使用 Netron 可视化深度学习模型:从 YOLOv1 到 YOLOv8 的探索