博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AutoCAD .NET二次开发(四)
阅读量:6432 次
发布时间:2019-06-23

本文共 3342 字,大约阅读时间需要 11 分钟。

在CAD中,属性信息一般是以注记的形式存在,但当属性数据内容较多时,显示就成了问题。扩展属性(Xdata)可以解决这一问题,比如南方Cass中就利用了这一点。我们经常用Lisp来读取操作扩展属性。

查看实体属性信息:

(entget(car(entsel))'("*"))

但我们为了方便与GIS交互,我们得在.NET中来读取、修改CAD文件中实体的扩展属性。本文先只讲解怎么读取扩展属性。

第一步,不管怎么样,都要先打开文件,获取文档,选择对象,获取实体。下面这段代码在测试中肯定会经常用到。

[CommandMethod("GA", CommandFlags.Session)]public void GetAttribute(){    //文档管理器    DocumentCollection acDocMgr = Application.DocumentManager;    //激活的文档    Document acDoc = acDocMgr.MdiActiveDocument;    Database acCurDb = acDoc.Database;    using (acDoc.LockDocument())    {        // 启动事务        using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())        {            // 请求在图形区域选择对象            PromptSelectionResult acSSPrompt = acDoc.Editor.GetSelection();            // 如果提示状态OK,表示已选择对象            if (acSSPrompt.Status == PromptStatus.OK)            {                SelectionSet acSSet = acSSPrompt.Value;                //遍历选择集内的对象                foreach (SelectedObject acSSObj in acSSet)                {                    // 确认返回的是合法的SelectedObject对象                    if (acSSObj != null)                    {                        //获取实体                        Entity acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForWrite) as Entity;                        if (acEnt != null)                        {                            以下是获取扩展属性的代码                            //……                        }                        else                        {                            MessageBoxEx.Show("该实体为空!", "提示");                        }                    }                }                // 保存新对象到数据库                acTrans.Commit();            }        }    }}

下面是获取扩展属性的代码:

if (acEnt.XData != null){    string result = "";    Autodesk.AutoCAD.DatabaseServices.TypedValue[] valueArray = acEnt.XData.AsArray();    for (int i = 0; i < valueArray.Length; i++)    {        result += i + "-" + valueArray[i].TypeCode + "-" + valueArray[i].Value + "\n";    }    Console.WriteLine(result);    System.Windows.Forms.MessageBox.Show(result);}

其实也简单,先判断获取到的实例是否有扩展属性(XData),如果有就调用其AsArray方法,将扩展属性转为TypedValue数组,于常规数据用法一致。然后遍历读取出扩展属性即可。其中,TypeCode即为组码,Value即为属性值。

当然为了用户更好的体验,我们需要将读取出来的属性放在窗体上显示。

附:Cass扩展属性

(-3 ("SOUTH" (1000 . "300000")(1000 . "513434101209JC00140")(1000 . "罗克雄") (1000 . ""))   ;;宗地("QHDM" (1000 . ""))	 ;;区号代码("SJZGBM" (1000 . "")) 	 ;;上级主管部门("FRDBXM" (1000 . "")) 	 ;;法人代表姓名("FRDBZMS" (1000 . ""))  ;;法人代表证明书("FRDBDH" (1000 . "")) 	 ;;法人代表电话("DLRXM" (1000 . "")) 	 ;;代理人姓名("DLRSFZ" (1000 . "")) 	 ;;代理人身份证("DLRDH" (1000 . "")) 	 ;;代理人电话("TXDZ" (1000 . "")) 	 ;;通讯地址("TDZL" (1000 . "")) 	 ;;土地坐落("DONGZHI" (1000 . ""))  ;;东至("NANZHI" (1000 . "")) 	 ;;南至("XIZHI" (1000 . "")) 	 ;;西至("BEIZHI" (1000 . "")) 	 ;;北至("QSLYZM" (1000 . "")) 	 ;;权属来源证明("PZTDYT" (1000 . "")) 	 ;;批准土地用途("TDSYZ" (1000 . "")) 	 ;;土地所有者("SBJZWQS" (1000 . ""))  ;;申报建筑物权属("YBDJH" (1000 . "")) 	 ;;预编地籍号("TDZH" (1000 . "")) 	 ;;土地证号("SHRQ" (1000 . "")) 	 ;;审核日期("DJRQ" (1000 . "")) 	 ;;登记日期("ZZRQ" (1000 . "")) 	 ;;终止日期("DWXZ" (1000 . "")) 	 ;;单位性质("QSXZ" (1000 . "")) 	 ;;权属性质("SYQLX" (1000 . "")) 	 ;;使用权类型("TDDJ" (1000 . ""))  	 ;;土地等级("MPH" (1000 . ""))  	 ;;门牌号("TUFU" (1000 . "3163.13-548.63"))  	 ;;所在图幅("JZMJ" (1040 . 177.157))  	 ;;建筑面积("BDDJ" (1040 . 0.0))   	 ;;标定地价("SBDJ" (1040 . 0.0))  		 ;;申报地价)

  

 

转载于:https://www.cnblogs.com/liweis/p/4594977.html

你可能感兴趣的文章
数据是重要的战略资源,数据同样是产品非常重要的组成部分。淘宝对中国最大的贡献,不只是方便了老百姓购物,而是把中国消费者的消费习惯数据慢慢沉淀下来。...
查看>>
Leetcode Find Minimum in Rotated Sorted Array
查看>>
Python接口测试-使用requests模块发送post请求
查看>>
System.currentTimeMillis()计算方式与时间的单位转换
查看>>
Extra:Variable Types
查看>>
js传参时,没有参数传入,默认值的设置
查看>>
ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程Thread中委托的使用(六)...
查看>>
最新整理知识结构图
查看>>
linux安装mysql
查看>>
flask 2 进阶
查看>>
sentences in movies and teleplays[1]
查看>>
【20181023T1】战争【反向并查集】
查看>>
win7网络共享原来如此简单,WiFi共享精灵开启半天都弱爆了!
查看>>
iOS9 未受信任的企业级开发者
查看>>
paper 40 :鲁棒性robust
查看>>
优化MySchool数据库(事务、视图、索引)
查看>>
使用笔记:TF辅助工具--tensorflow slim(TF-Slim)
查看>>
大话设计模式读书笔记3——单例模式
查看>>
实验三
查看>>
Vue 项目构建
查看>>