diff --git a/src/common/common.pro b/src/common/common.pro index 5d5e43413..d392f6531 100644 --- a/src/common/common.pro +++ b/src/common/common.pro @@ -72,7 +72,8 @@ HEADERS += filterparameter.h \ mlparameter.h \ xmlfilterinfo.h \ mlexception.h \ - ../../../vcglib/wrap/gl/trimesh.h + ../../../vcglib/wrap/gl/trimesh.h \ + meshlabdocumentxml.h SOURCES += filterparameter.cpp \ interfaces.cpp \ filterscript.cpp \ @@ -82,4 +83,5 @@ SOURCES += filterparameter.cpp \ scriptinterface.cpp \ mlparameter.cpp \ xmlfilterinfo.cpp \ - $$GLEWCODE + $$GLEWCODE \ + meshlabdocumentxml.cpp diff --git a/src/common/meshlabdocumentxml.cpp b/src/common/meshlabdocumentxml.cpp new file mode 100644 index 000000000..8eac39de1 --- /dev/null +++ b/src/common/meshlabdocumentxml.cpp @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include "meshmodel.h" +#include "meshlabdocumentxml.h" + +bool MeshDocumentToXMLFile(MeshDocument &md, QString filename) +{ + QFile file(filename); + file.open(QIODevice::WriteOnly); + QTextStream qstream(&file); + QDomDocument doc = MeshDocumentToXML(md); + doc.save(qstream,1); + file.close(); + return true; +} + +QDomElement Matrix44fToXML(vcg::Matrix44f &m, QDomDocument &doc) +{ + QDomElement matrixElem = doc.createElement("MLMatrix44"); + QString Row[4]; + for(int i=0;i<4;++i) + Row[i] =QString("%1 %2 %3 %4\n").arg(m[i][0]).arg(m[i][1]).arg(m[i][2]).arg(m[i][3]); + + matrixElem.setNodeValue(Row[0]+Row[1]+Row[2]+Row[3]); + + return matrixElem; +} + +bool MeshDocumentFromXML(MeshDocument &, QDomDocument &doc) +{ + + return true; +} + +QDomElement MeshModelToXML(MeshModel *mp, QDomDocument &doc) +{ + QDomElement meshElem = doc.createElement("MLMesh"); + meshElem.setAttribute("name",mp->label()); + meshElem.appendChild(Matrix44fToXML(mp->cm.Tr,doc)); + return meshElem; +} + +QDomDocument MeshDocumentToXML(MeshDocument &md) +{ + QDomDocument ddoc("MeshLabDocument"); + QDomElement mgroot = ddoc.createElement("MeshGroup"); + + foreach(MeshModel *mmp, md.meshList) + { + QDomElement meshElem = MeshModelToXML(mmp, ddoc); + mgroot.appendChild(meshElem); + } + ddoc.appendChild(mgroot); + +// tag.setAttribute(QString("name"),(*ii).first); +// RichParameterSet &par=(*ii).second; +// QList::iterator jj; +// RichParameterXMLVisitor v(doc); +// for(jj=par.paramList.begin();jj!=par.paramList.end();++jj) +// { +// (*jj)->accept(v); +// tag.appendChild(v.parElem); +// } +// root.appendChild(tag); +// } +// + return ddoc; +} diff --git a/src/common/meshlabdocumentxml.h b/src/common/meshlabdocumentxml.h new file mode 100644 index 000000000..8626a3a4f --- /dev/null +++ b/src/common/meshlabdocumentxml.h @@ -0,0 +1,7 @@ +#ifndef __MESHLABDOC_XML_H +#define __MESHLABDOC_XML_H + +QDomDocument MeshDocumentToXML(MeshDocument &md); +bool MeshDocumentToXMLFile(MeshDocument &md, QString filename); + +#endif // __MESHLABDOC_XML_H