论文部分内容阅读
摘要:本文全面阐述了CAD扩展数据的数据结构及应用程序名称及扩展数据属性值的修改、添加、删除功能的实现。
关键字:CAD、扩展数据、APPID、组码。
中图分类号:C37文献标识码: A
1、概述
随着AutoCAD在基础测绘领域应用日益深入,Autodesk公司在AutoCAD中引入了扩展实体数据的概念,借助扩展实体数据,用户可以很方便地在图形实体中按不同的需求分门别类地存取不同的非图形数据。
本文将对实体扩展数据的结构作详细的分析,并结合实际开发介绍有关扩展数据读取和写入的相关要点。
2、扩展数据的存储结构(结合组码)
扩展数据由 AutoLISP 或 ObjectARX 应用程序创建。下面是一个包含 DXF 格式扩展数据的图元样例。
普通图元定义数据:
AutoCAD扩展实体数据按应用类型分组,形式如下:
应用类型名是存取扩展实体数据的主要依据,它的AutoLISP程序代码如下:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;
AcadApplication app =Application.AcadApplication;
AcadDocument acdDoc= app.ActiveDocument; //获取当前活动状态的CAD文档为本文的示例文档
AcadRegisteredApplication Reg;
AcadRegisteredApplications RegsOrg= acdDoc.RegisteredApplications;//获取当前文档APPID 符号表
Reg = RegsOrg.Add(“NewAppName”);//添加新应用程序名称NewAppName至APPID 符号表中
如果登记成功,该应用类型名就被增加到APPID符号表,并保存在图形文件中。
3、扩展数据的读取
AcadSelectionSet sset = acdDoc.PickfirstSelectionSet; //通过鼠标在acdDoc中得到一个选择集
object XAimType = "";//存储对象扩展数据的组码
object XAimValue = "";//存储对象扩展数据组码对应的值
sset.Item(0).GetXData("", out XAimType, out XAimValue);//获得选择集中第一个对象的扩展数据
监视运行结果如下图所示:
4、扩展数据的写入
4.1、修改已有应用程序名称对应的属性值
以下以修改已有应用程序”SJY”的属性值“航测队“为”DK
ArrayList ArrAimData = new ArrayList((object[])XAimValue);//把組码对应属性值放入ArrayList中
ArrAimData[2] = "SJY";
ArrAimData[3] = "DKY";
//把修改完值的ArrAimType转换给数组ArrType
short[] ArrType = (short[])ArrAimType.ToArray(typeof(short));
//把修改完值的ArrAimData转换给数组ArrData
object[] ArrData = (object[])ArrAimData.ToArray(typeof(object));
sset.Item(0).SetXData(ArrType, ArrData);//修改完成选中对象的扩展数据
监视运行结果如下图所示:
4.2、添加新的应用程序名称及对应的属性值
以下以添加新的应用程序名称” NewAppName”及添加对应字符串类型属性值“New“为例:
Reg = RegsOrg.Add(“NewAppName”);//添加新应用程序名称NewAppName至APPID 符号表中
ArrayList ArrAimType = new ArrayList((short[])XAimType);//把对象的组码值放入ArrayList中
ArrayList ArrAimData = new ArrayList((object[])XAimValue);//把组码对应属性值放入ArrayList中
ArrAimType.Add = "1001";//应用程序名称对应组码参见上述组码一览表必须为1001
ArrAimData.Add = "NewAppName";//应用程序名称按规则都为字符串类型
ArrAimType.Add = "1000";//定义字符串类型属性值参见上述组码一览表必须为1000
ArrAimData.Add = "New";//按设定组码对应数据类型赋字符串类型数据
//把修改完值的ArrAimType转换给数组ArrType
short[] ArrType = (short[])ArrAimType.ToArray(typeof(short));
//把修改完值的ArrAimData转换给数组ArrData
object[] ArrData = (object[])ArrAimData.ToArray(typeof(object));
sset.Item(0).SetXData(ArrType, ArrData);//添加完成选中对象的应用程序名称及属性值
监视运行结果如下图所示:
框选内容即为新添加的应用程序名称、属性值及对应组码
4.3、删除选中对象中不用的应用程序名称及属性值
以下以删除应用程序名称” south”及对应字符串类型属性值“116021“为例:
ArrayList ArrAimType = new ArrayList((short[])XAimType);//把对象的组码值放入ArrayList中
ArrayList ArrAimData = new ArrayList((object[])XAimValue);//把组码对应属性值放入ArrayList中
ArrAimType.Add = "1001";//应用程序名称“south”对应的组码为“1001”
ArrAimData.Add = "south";//指定删除的应用程序名称“south”
//以下框选代码注释掉即可删除上述代码指向应用程序名称(只删除当前操作对象的应用程序名称)
ArrAimType.Add = "1000";
ArrAimData.Add = "116021";
//把修改完值的ArrAimType转换给数组ArrType
short[] ArrType = (short[])ArrAimType.ToArray(typeof(short));
//把修改完值的ArrAimData转换给数组ArrData
object[] ArrData = (object[])ArrAimData.ToArray(typeof(object));
sset.Item(0).SetXData(ArrType, ArrData);//完成删除选中对象的应用程序名称及属性值
监视运行结果如下图所示:
如上图指定应用程序名称“south”及对应属性“116021”已被删除
5、结论
通过上文对扩展数据存储结构、组码的论述以及实例展示扩展数据的读取、修改、添加、删除功能的实现,我们能够快速全面的了解、掌握如何在CAD中实现GIS相关的属性操作功能。
参考文献
[1]谢祖明. 基于CAD数据生产Arcgis制图数据的研究与应用[J]. 测绘与空间地理信息,2012(8).
[2]胡友元,黄杏元. 计算机地图制图[M]. 北京:测绘出版社,1987.
[3]王氏太,王现中,唐诗华等. 数字测图与GIS建库若干问题探讨[J]. 测绘技术装备,2006,8(4).
关键字:CAD、扩展数据、APPID、组码。
中图分类号:C37文献标识码: A
1、概述
随着AutoCAD在基础测绘领域应用日益深入,Autodesk公司在AutoCAD中引入了扩展实体数据的概念,借助扩展实体数据,用户可以很方便地在图形实体中按不同的需求分门别类地存取不同的非图形数据。
本文将对实体扩展数据的结构作详细的分析,并结合实际开发介绍有关扩展数据读取和写入的相关要点。
2、扩展数据的存储结构(结合组码)
扩展数据由 AutoLISP 或 ObjectARX 应用程序创建。下面是一个包含 DXF 格式扩展数据的图元样例。
普通图元定义数据:
AutoCAD扩展实体数据按应用类型分组,形式如下:
应用类型名是存取扩展实体数据的主要依据,它的AutoLISP程序代码如下:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;
AcadApplication app =Application.AcadApplication;
AcadDocument acdDoc= app.ActiveDocument; //获取当前活动状态的CAD文档为本文的示例文档
AcadRegisteredApplication Reg;
AcadRegisteredApplications RegsOrg= acdDoc.RegisteredApplications;//获取当前文档APPID 符号表
Reg = RegsOrg.Add(“NewAppName”);//添加新应用程序名称NewAppName至APPID 符号表中
如果登记成功,该应用类型名就被增加到APPID符号表,并保存在图形文件中。
3、扩展数据的读取
AcadSelectionSet sset = acdDoc.PickfirstSelectionSet; //通过鼠标在acdDoc中得到一个选择集
object XAimType = "";//存储对象扩展数据的组码
object XAimValue = "";//存储对象扩展数据组码对应的值
sset.Item(0).GetXData("", out XAimType, out XAimValue);//获得选择集中第一个对象的扩展数据
监视运行结果如下图所示:
4、扩展数据的写入
4.1、修改已有应用程序名称对应的属性值
以下以修改已有应用程序”SJY”的属性值“航测队“为”DK
ArrayList ArrAimData = new ArrayList((object[])XAimValue);//把組码对应属性值放入ArrayList中
ArrAimData[2] = "SJY";
ArrAimData[3] = "DKY";
//把修改完值的ArrAimType转换给数组ArrType
short[] ArrType = (short[])ArrAimType.ToArray(typeof(short));
//把修改完值的ArrAimData转换给数组ArrData
object[] ArrData = (object[])ArrAimData.ToArray(typeof(object));
sset.Item(0).SetXData(ArrType, ArrData);//修改完成选中对象的扩展数据
监视运行结果如下图所示:
4.2、添加新的应用程序名称及对应的属性值
以下以添加新的应用程序名称” NewAppName”及添加对应字符串类型属性值“New“为例:
Reg = RegsOrg.Add(“NewAppName”);//添加新应用程序名称NewAppName至APPID 符号表中
ArrayList ArrAimType = new ArrayList((short[])XAimType);//把对象的组码值放入ArrayList中
ArrayList ArrAimData = new ArrayList((object[])XAimValue);//把组码对应属性值放入ArrayList中
ArrAimType.Add = "1001";//应用程序名称对应组码参见上述组码一览表必须为1001
ArrAimData.Add = "NewAppName";//应用程序名称按规则都为字符串类型
ArrAimType.Add = "1000";//定义字符串类型属性值参见上述组码一览表必须为1000
ArrAimData.Add = "New";//按设定组码对应数据类型赋字符串类型数据
//把修改完值的ArrAimType转换给数组ArrType
short[] ArrType = (short[])ArrAimType.ToArray(typeof(short));
//把修改完值的ArrAimData转换给数组ArrData
object[] ArrData = (object[])ArrAimData.ToArray(typeof(object));
sset.Item(0).SetXData(ArrType, ArrData);//添加完成选中对象的应用程序名称及属性值
监视运行结果如下图所示:
框选内容即为新添加的应用程序名称、属性值及对应组码
4.3、删除选中对象中不用的应用程序名称及属性值
以下以删除应用程序名称” south”及对应字符串类型属性值“116021“为例:
ArrayList ArrAimType = new ArrayList((short[])XAimType);//把对象的组码值放入ArrayList中
ArrayList ArrAimData = new ArrayList((object[])XAimValue);//把组码对应属性值放入ArrayList中
ArrAimType.Add = "1001";//应用程序名称“south”对应的组码为“1001”
ArrAimData.Add = "south";//指定删除的应用程序名称“south”
//以下框选代码注释掉即可删除上述代码指向应用程序名称(只删除当前操作对象的应用程序名称)
ArrAimType.Add = "1000";
ArrAimData.Add = "116021";
//把修改完值的ArrAimType转换给数组ArrType
short[] ArrType = (short[])ArrAimType.ToArray(typeof(short));
//把修改完值的ArrAimData转换给数组ArrData
object[] ArrData = (object[])ArrAimData.ToArray(typeof(object));
sset.Item(0).SetXData(ArrType, ArrData);//完成删除选中对象的应用程序名称及属性值
监视运行结果如下图所示:
如上图指定应用程序名称“south”及对应属性“116021”已被删除
5、结论
通过上文对扩展数据存储结构、组码的论述以及实例展示扩展数据的读取、修改、添加、删除功能的实现,我们能够快速全面的了解、掌握如何在CAD中实现GIS相关的属性操作功能。
参考文献
[1]谢祖明. 基于CAD数据生产Arcgis制图数据的研究与应用[J]. 测绘与空间地理信息,2012(8).
[2]胡友元,黄杏元. 计算机地图制图[M]. 北京:测绘出版社,1987.
[3]王氏太,王现中,唐诗华等. 数字测图与GIS建库若干问题探讨[J]. 测绘技术装备,2006,8(4).