From 0bff4edee2e26c1c7e47aa583eb26f54f5755034 Mon Sep 17 00:00:00 2001 From: cignoni Date: Mon, 25 Oct 2010 13:53:51 +0000 Subject: [PATCH] Added methods for read/write of xml camera in the new documented format. --- wrap/qt/shot_qt.h | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/wrap/qt/shot_qt.h b/wrap/qt/shot_qt.h index bd5a21cf..baec2ff8 100644 --- a/wrap/qt/shot_qt.h +++ b/wrap/qt/shot_qt.h @@ -10,6 +10,48 @@ template bool ReadShotFromQDomNode( ShotType &shot, /// the shot that will contain the read node const QDomNode &node) /// The XML node to be read +{ + if(QString::compare(node.nodeName(),"VCGCamera")==0) + { + QDomNamedNodeMap attr = node.attributes(); + vcg::Point3d tra; + tra[0] = attr.namedItem("TranslationVector").nodeValue().section(' ',0,0).toDouble(); + tra[1] = attr.namedItem("TranslationVector").nodeValue().section(' ',1,1).toDouble(); + tra[2] = attr.namedItem("TranslationVector").nodeValue().section(' ',2,2).toDouble(); + shot.Extrinsics.SetTra(-tra); + + vcg::Matrix44d rot; + QStringList values = attr.namedItem("RotationMatrix").nodeValue().split(" ", QString::SkipEmptyParts); + for(int y = 0; y < 4; y++) + for(int x = 0; x < 4; x++) + rot[y][x] = values[x + 4*y].toDouble(); + shot.Extrinsics.SetRot(rot); + + vcg::Camera &cam = shot.Intrinsics; + cam.FocalMm = attr.namedItem("FocalMm").nodeValue().toDouble(); + cam.ViewportPx.X() = attr.namedItem("ViewportPx").nodeValue().section(' ',0,0).toInt(); + cam.ViewportPx.Y() = attr.namedItem("ViewportPx").nodeValue().section(' ',1,1).toInt(); + cam.CenterPx[0] = attr.namedItem("CenterPx").nodeValue().section(' ',0,0).toInt(); + cam.CenterPx[1] = attr.namedItem("CenterPx").nodeValue().section(' ',1,1).toInt(); + cam.PixelSizeMm[0] = attr.namedItem("PixelSizeMm").nodeValue().section(' ',0,0).toDouble(); + cam.PixelSizeMm[1] = attr.namedItem("PixelSizeMm").nodeValue().section(' ',1,1).toDouble(); + cam.k[0] = attr.namedItem("LensDistortion").nodeValue().section(' ',0,0).toDouble(); + cam.k[1] = attr.namedItem("LensDistortion").nodeValue().section(' ',1,1).toDouble(); + + // scale correction should no more exist !!! + // float scorr = attr.namedItem("ScaleCorr").nodeValue().toDouble(); + // if(scorr != 0.0) { + // cam.PixelSizeMm[0] *= scorr; + // cam.PixelSizeMm[1] *= scorr; + // } + return true; + } + return false; +} + +/// TEXALIGN VERSION +template + bool ReadShotFromOLDXML( ShotType &shot, const QDomNode &node) { if(QString::compare(node.nodeName(),"CamParam")==0) { @@ -48,4 +90,48 @@ template } return false; } + + + +template + QDomElement WriteShotToQDomNode( + const ShotType &shot, /// the shot to be written node + QDomDocument &doc) /// The XML node to be read +{ + + QDomElement shotElem = doc.createElement( "VCGCamera" ); + vcg::Point3d tra = -(shot.Extrinsics.Tra()); + QString str = QString("%1 %2 %3 1").arg(tra[0]).arg(tra[1]).arg(tra[2]); + shotElem.setAttribute("TranslationVector", str); + vcg::Matrix44d rot = shot.Extrinsics.Rot(); + str = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16 ") + .arg(rot[0][0]).arg(rot[0][1]).arg(rot[0][2]).arg(rot[0][3]) + .arg(rot[1][0]).arg(rot[1][1]).arg(rot[1][2]).arg(rot[1][3]) + .arg(rot[2][0]).arg(rot[2][1]).arg(rot[2][2]).arg(rot[2][3]) + .arg(rot[3][0]).arg(rot[3][1]).arg(rot[3][2]).arg(rot[3][3]); + shotElem.setAttribute( "RotationMatrix", str); + + const vcg::Camera &cam = shot.Intrinsics; + + shotElem.setAttribute( "FocalMm", cam.FocalMm); + + str = QString("%1 %2").arg(cam.k[0]).arg(cam.k[1]); + shotElem.setAttribute( "LensDistortion", str); + + str = QString("%1 %2").arg(cam.PixelSizeMm[0]).arg(cam.PixelSizeMm[1]); + shotElem.setAttribute( "PixelSizeMm", str); + + str = QString("%1 %2").arg(cam.ViewportPx[0]).arg(cam.ViewportPx[1]); + shotElem.setAttribute( "ViewportPx", str); + + str = QString("%1 %2").arg((int)(cam.CenterPx[0])).arg((int)(cam.CenterPx[1])); + shotElem.setAttribute( "CenterPx", str); + + //scale correction should no more exist !!! + //str = QString("%1").arg((double) 1); + //shotElem.setAttribute( "ScaleCorr", str); + return shotElem; +} + + #endif // SHOT_QT_H