zoukankan      html  css  js  c++  java
  • AutoCAD .NET二次开发(四)

    在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 + "
    ";
        }
        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))  		 ;;申报地价
    )
    

      

  • 相关阅读:
    webdav srs相关
    How To Configure WebDAV Access with Apache on Ubuntu 14.04
    ubuntu 编译lighttpd
    srs编译及推流测试
    Compile pciutils (lspci, setpci) in Windows x86,在 Windows x86 平台下编译 pciutils (lspci, setpci)
    mingw MSYS2 区别
    Qt之美(三):隐式共享
    Qt之美(二):元对象
    Qt之美(一):d指针/p指针详解
    C++的栈空间和堆空间
  • 原文地址:https://www.cnblogs.com/liweis/p/4594977.html
Copyright © 2011-2022 走看看