XData
是CAD
开放给用户(程序员)的一个功能接口:可以往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
暂无评论内容