C# CAD读写扩展源码示例:添加XData功能
本资源是一份C#编写的CAD读写扩展程序的源代码片段,主要针对Autodesk AutoCAD环境。C#语言在此场景中被用于与AutoCAD API进行交互,实现对CAD数据的读取和写入操作。以下是关键知识点的详细解析: 1. **项目引用**: - `using`语句包含了对Autodesk AutoCAD运行时(Runtime)、应用程序服务(ApplicationServices)、数据库服务(DatabaseServices)、几何对象处理(Geometry)、编辑输入(EditorInput)以及系统集合(Collections)的引用。这些库提供了一套完整的接口来访问CAD图形数据和进行用户交互。 2. **类定义**: - 类`Class1`被标记为命令类(`CommandClass`),表明它是用于在AutoCAD环境中注册一个命令,可以通过菜单或快捷键调用。类名`Class1`可能代表该命令类的一个实例。 3. **方法:AddXdata()**: - 这个方法名为`AddXdata()`,标记为`[CommandMethod("aaa")]`,表明其是通过特定命令字符串("aaa")调用的。 - 方法中首先获取当前活跃文档的编辑器(Editor),以便进行后续交互操作。 - 使用`PromptEntityOptions`类获取用户输入,提示用户选择需要处理的对象,并捕获结果。 - 如果用户选择不成功(`PromptStatus.OK`未返回),则显示错误消息并结束方法。 - 获取用户选择的对象的`ObjectId`,这是在AutoCAD数据库中的唯一标识符。 - 使用`WorkingDatabase`获取工作数据库,这是与绘图关联的主要数据库。 - 在事务管理器(TransactionManager)中开启一个新的事务(`StartTransaction()`),以确保数据的一致性。 - 将对象从`ObjectId`转换为`Entity`类型,并设置其颜色索引为1。`RegAppTableId`可能是应用程序表的标识符,但具体含义需要结合上下文进一步理解。 - 最后,在事务中执行对实体的更改,这可能是添加、修改或删除XDATA信息(`ent.ColorIndex=1`的操作暗示着可能是对几何对象属性的修改)。 4. **XDATA**: - XDATA(Extended Data)是AutoCAD中用于存储自定义附加数据的一种方式,常用于存储非图形属性如注释、材料信息等。在这个示例中,`AddXdata()`方法可能用于向选定的几何对象添加或更新XDATA。 总结: 这段C#代码展示了如何在AutoCAD中通过C#编程实现与CAD模型的交互,包括用户输入获取、数据库操作、事务管理和对象属性修改。它提供了对CAD对象XDATA功能的扩展,允许开发者为应用程序集成更多的定制功能。理解并利用这个源码片段,可以作为开发基于AutoCAD的插件或扩展应用的基础。
using System.Collections.Generic;
using System.Text;
// 用户添加引用
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using System.Collections;
[assembly: CommandClass(typeof(ClassLibrary2.Class1))]
namespace ClassLibrary2
{
public class Class1
{
// 写扩展记录
[CommandMethod("aaa")]
public void AddXdata()
{
// 加扩展数据
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("添加扩展数据XDATA\n");
PromptEntityOptions entOps = new PromptEntityOptions("请选择要打开的对象\n");
PromptEntityResult entRes;
entRes = ed.GetEntity(entOps);
if (entRes.Status != PromptStatus.OK)
{
ed.WriteMessage("选择对象失败,退出"); return;
}
ObjectId objId = entRes.ObjectId;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity ;
ent.ColorIndex = 1;
RegAppTable appTbl = trans.GetObject(db.RegAppTableId,OpenMode.ForWrite) as RegAppTable ;
if (!appTbl.Has("WUAZ"))
{
RegAppTableRecord appTblRcd = new RegAppTableRecord();
appTblRcd.Name = "WUAZ";
appTbl.Add(appTblRcd);
trans.AddNewlyCreatedDBObject(appTblRcd, true);
}
ResultBuffer resBuf = new ResultBuffer();
resBuf.Add(new TypedValue(1001, "WUAZ"));//注册程序名称
resBuf.Add(new TypedValue(1000 , "武安状"));//姓名
resBuf.Add(new TypedValue(1000 , "河南省地矿局测绘地理信息院"));//部门
resBuf.Add(new TypedValue(1040, 5000.0));//薪水
ent.XData = resBuf;
trans.Commit();
ed.WriteMessage("写扩展记录成功!");
}
}
// 读扩展记录
[CommandMethod("bbb")]
public void GETXDATA()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("获取扩展数据XDATA\n");
PromptEntityOptions entOps = new PromptEntityOptions("请选择要打开的对象\n");
剩余7页未读,继续阅读
- 粉丝: 1
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ExtJS 2.0 入门教程与开发指南
- 基于TMS320F2812的能量回馈调速系统设计
- SIP协议详解:RFC3261与即时消息RFC3428
- DM642与CMOS图像传感器接口设计与实现
- Windows Embedded CE6.0安装与开发环境搭建指南
- Eclipse插件开发入门与实践指南
- IEEE 802.16-2004标准详解:固定无线宽带WiMax技术
- AIX平台上的数据库性能优化实战
- ESXi 4.1全面配置教程:从网络到安全与实用工具详解
- VMware ESXi Installable与vCenter Server 4.1 安装步骤详解
- TI MSP430超低功耗单片机选型与应用指南
- DOS环境下的DEBUG调试工具详细指南
- VMware vCenter Converter 4.2 安装与管理实战指南
- HP QTP与QC结合构建业务组件自动化测试框架
- JsEclipse安装配置全攻略
- Daubechies小波构造及MATLAB实现