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组码值扩展数据内容
1001XData 的AppID,即分组
1000~1009字符串(<=255)
1002XData的控制字符串{}
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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值