返回介绍

全局字典

发布于 2023-08-09 23:10:34 字数 5297 浏览 0 评论 0 收藏 0

CAD图纸中有个全局字典,用来存放图纸中的全局信息,开发者可以通过在字典存放扩展记录方式存放自己的全局数据,字典已经内置了一些数据,比如:组,多线样式,布局信息,图片定义,Wipout等数据,比如下图:

dict1.png

全局字典类名:MxDrawDictionary,详细信息参考:http://www.mxdraw.com/help/IMxDrawDictionary.htm

得到DWG图的全局字典,c#代码:

// 得到数据库对象.
MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
// 得到全局字典
MxDrawDictionary dict = database.GetNamedObjectsDictionary();

视频演示:

A. 遍历字典

字典中可以再存放字典(嵌套存放),也可以存一个扩展记录,类名:MxDrawXRecord,详细参考:http://www.mxdraw.com/help/IMxDrawXRecord.htm

下面代码,演示了,使用递归方式,如果去遍历字典中所有数据,c#如下

// 遍历字典使用的递归函数。
        public String GetAllDictionaryDataCall(MxDrawDictionary dict)
        {
           
            // 创建一个字典遍历器
            MxDrawDictionaryIterator iter = dict.NewIterator();
            String sOut = "";
            for (; !iter.Done(); iter.Step())
            {
                // 遍历到每个字典,取出名称.
                String sName = iter.Name();
                sOut = sOut + "," + sName;
                MxDrawMcDbObject obj = iter.GetObject();
                if (obj == null)
                    continue;
                if (obj.ObjectName == "McDbDictionary")
                {
                    MxDrawDictionary tmpDict = (MxDrawDictionary)obj;
                    sOut += "," + GetAllDictionaryDataCall(tmpDict);
                }
            }
            return sOut;
        }
        public void GetAllDictionaryData()
        {
            // 得到数据库对象.
            MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
            // 得到全局字典
            MxDrawDictionary dict = database.GetNamedObjectsDictionary();
            String sOut = GetAllDictionaryDataCall(dict);
            
            MessageBox.Show(sOut);
        }

B. 写扩展记录

用户自定义的全局数据,通过扩展记录方式写到DWG图中

下面代码,取到图纸全局字典,然后在字典中放一个用户自己的字典,在字典写一个扩展记录数据

如下c#代码

 public void wirteGlobalVer(String sName, String sVal)
        {
            // 得到CAD数据库
            MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
            // 得到全局字典
            MxDrawDictionary dict = database.GetNamedObjectsDictionary();
            // 得到用户自定义字典,MyExDataDictName是字典名称
            MxDrawDictionary myDict = (MxDrawDictionary)dict.GetAt("MyExDataDictName");
            if (myDict == null)
            {
                // 如果没有,就添加一个字典。
                myDict = (MxDrawDictionary)dict.AddObject("MyExDataDictName", "McDbDictionary");
            }
            // 得到字典中的扩展记录数据。
            MxDrawXRecord rec = (MxDrawXRecord)myDict.GetAt(sName);
            if (rec == null)
            {
                // 如果没有就,添加一个扩展记录.
                rec = myDict.AddXRecord(sName);
            }
            // 创建数据链表.
            MxDrawResbuf res = new MxDrawResbuf();
            // 设置值。
            res.AddString(sVal);
            // 设置扩展记录数据。
            rec.SetXRecordData(res);
        }

执行

 wirteGlobalVer("MyData", "aaaa");

DWG中的数据内容如下:

dict2.png

C. 读扩展记录

上面写的数据,能过如下方式读取,

C#代码:

String readGlobalVar(String sName)
        {
            // 得到CAD数据库
            MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
            // 得到全局字典
            MxDrawDictionary dict = database.GetNamedObjectsDictionary();
            // 得到用户自定义字典,MyExDataDictName是字典名称
            MxDrawDictionary myDict = (MxDrawDictionary)dict.GetAt("MyExDataDictName");
            if (myDict == null)
            {
                // 没有数据。
                return "";
            }
            // 得到字典中的扩展记录数据。
            MxDrawXRecord rec = (MxDrawXRecord)myDict.GetAt(sName);
            if (rec == null)
            {
                // 没有数据。
                return "";
            }
            // 得到记录中的数据链表。
            MxDrawResbuf ret = rec.GetXRecordData();
            if (ret == null)
                return "";
            // 返回写的数据。
            return ret.AtString(0);
        }

调用代码 :

 String sRet = readGlobalVar("MyData");
            if (sRet == "")
            {
                MessageBox.Show("没有数据");
            }
            else
            {
                MessageBox.Show(sRet);
            }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文