返回介绍

全局字典

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

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

dict1.png

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

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

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

全局字典在线演示例子:点击此处在线演示

视频演示:

A. 遍历字典

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

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

function GetAllDictionaryDataCall(dict) {
    // 创建一个字典遍历器
    var iter = dict.NewIterator();
    var sOut = "";
    for (; !iter.Done(); iter.Step())
    {
        // 遍历到每个字典,取出名称.
        var sName = iter.Name();
        sOut = sOut + "," + sName;
        var obj = iter.GetObject();
        if (obj == null)
            continue;
        if (obj.ObjectName == "McDbDictionary")
        {
            var tmpDict = obj;
            sOut += "," + GetAllDictionaryDataCall(tmpDict);
        }
    }
    return sOut;
    
}

执行

    // 得到数据库对象.    
    var database = mxOcx.GetDatabase();
    // 得到全局字典
    var dict = database.GetNamedObjectsDictionary();
    var sOut = GetAllDictionaryDataCall(dict);
    
    alert(sOut);

B. 写扩展记录

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

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

如下js代码

function wirteGlobalVer(sName, sVal) {

    // 得到CAD数据库
    var database = mxOcx.GetDatabase();
    // 得到全局字典
    var dict = database.GetNamedObjectsDictionary();
    // 得到用户自定义字典,MyExDataDictName是字典名称
    var myDict = dict.GetAt("MyExDataDictName");
    if (myDict == null)
    {
        // 如果没有,就添加一个字典。
        myDict = dict.AddObject("MyExDataDictName", "McDbDictionary");
    }
    // 得到字典中的扩展记录数据。


    var rec =myDict.GetAt(sName);
    if (rec == null)
    {
        // 如果没有就,添加一个扩展记录.
        rec = myDict.AddXRecord(sName);
    }
    // 创建数据链表.
    var res = mxOcx.NewResbuf();
    // 设置值。
    res.AddString(sVal);
    // 设置扩展记录数据。
    rec.SetXRecordData(res);
    
}

执行

 wirteGlobalVer("MyData", "aaaa");
 alert("写入成功");

DWG中的数据内容如下:

dict2.png

C. 读扩展记录

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

js代码:

function readGlobalVar(sName) {

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

}

调用代码 :

var sRet = readGlobalVar("MyData");
if (sRet == "")
{
    alert("没有数据")
}
else
{
    alert(sRet);
}

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

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

发布评论

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