QCAD dxf 扩展属性

XDataCAD开放给用户(程序员)的一个功能接口:可以往CAD实体上写入/绑定你的个人信息,CAD不会理会/管理你的个人信息,但会保存到DXF文件中。同时你也可以读取这些个人的信息,方便你编程使用。

QCAD读写dxf文件使用的dxflib。如下所示,利用dxflib写入扩展属性。

dw.dxfString(1001,"Point");
dw.dxfString(1002,"{");
dw.dxfString(1000,"代码");
dw.dxfString(1000,"201365845");
dw.dxfString(1002,"}");

QCAD源码中只需在读入和写入DXF时,加入读写扩展属性(自定义属性)即可。

写入属性

//    dw.dxfString(1001,"Point");
//    dw.dxfString(1000,"代码:201365845");
void RDxfExporter::writeCustomProperties(const REntity& p)
{
    QMap<QString, QVariantMap>customProperties=p.getCustomProperties();
    QString kv;
    foreach (QString title, customProperties.keys()) {
        QVariantMap properties=customProperties.value(title);

        dw->dxfString(1001, (const char*)RDxfExporter::escapeUnicode(title));
        foreach (const QString key, properties.keys()) {
            QVariant value=properties.value(key);
            kv=QString("%1:%2").arg(key,value.toString());
            dw->dxfString(1000,(const char*)RDxfExporter::escapeUnicode(kv));
        }
    }
}

读入属性

void RDxfImporter::importXData(QSharedPointer<REntity> entity)
{
    QStringList pJson;
    QString str;
    QPair<int,QVariant>p;
    foreach (const QString group, xData.keys()) {
        QList<QPair<int, QVariant>> properties=xData.value(group);
        for(int i=0;i<properties.size();++i){
            p=properties.at(i);
            str=p.second.toString();
            if(str.contains(':')){
                 pJson=str.split(":");
                 if(pJson.length()>1)
                     entity->setProperty(RPropertyTypeId(group,pJson[0]),pJson[1]);
            }
        }

    }
}

这样就可以在QCAD属性编辑面板中添加自定义扩展属性。
在这里插入图片描述

DXF文件中保存的属性:
在这里插入图片描述

1001
QCAD
1000
age:29
1000
name:xxxxx
1000
sex:boy
1000
\\U+...............................

dxf 文件的存储方式是以编码(组码)+ 数据的形式

DXF组码值 扩展数据内容
1001 XData 的AppID,即分组
1000~1009 字符串(<=255)
1002 XData的控制字符串{}
1010~1059 浮点数

示例:

dw.dxfString(1001,"扩展属性001");
dw.dxfString(1002,"{");
dw.dxfString(1000,"代码");
dw.dxfString(1000,"201365845");
dw.dxfString(1000,"长度");
dw.dxfDouble(1010,"10091.999");
dw.dxfString(1002,"}");

注:接下来就可以 对QCAD对象分组编码扩展属性。

entity->setProperty(RPropertyTypeId(group,key),value);

参考

CAD 扩展数据 https://www.cnblogs.com/xiaowangzi1987/p/13193276.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容