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檔案中保存的屬性:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224205.html
標籤:其他
上一篇:cgb2007-京淘day16
下一篇:2020-11-14
