]> Creatis software - clitk.git/commitdiff
Modified the string output of 4x4 matrix, now public for use in other
authorSimon Rit <simon.rit@creatis.insa-lyon.fr>
Wed, 8 Feb 2012 18:52:16 +0000 (19:52 +0100)
committerSimon Rit <simon.rit@creatis.insa-lyon.fr>
Thu, 9 Feb 2012 08:39:28 +0000 (09:39 +0100)
parts of the code

vv/vvMainWindow.cxx
vv/vvMainWindow.h

index b102e6234c62fee01ba7f9c683bce3f07d9c998a..d210d118bf2ae5c71ed4e215964130ed02d065f4 100644 (file)
@@ -1279,20 +1279,29 @@ QString vvMainWindow::GetSizeInBytes(unsigned long size)
 //------------------------------------------------------------------------------
 
 //------------------------------------------------------------------------------
-QString vvMainWindow::Get4x4MatrixDoubleAsString(vtkSmartPointer<vtkMatrix4x4> matrix)
+QString vvMainWindow::Get4x4MatrixDoubleAsString(vtkSmartPointer<vtkMatrix4x4> matrix, const int precision)
 {
   std::ostringstream strmatrix;
 
+  // Figure out the number of digits of the integer part of the largest absolute value
+  // for each column
+  unsigned width[4];
+  for (unsigned int j = 0; j < 4; j++){
+    double absmax = 0.;
+    for (unsigned int i = 0; i < 4; i++)
+      absmax = std::max(absmax, vnl_math_abs(matrix->GetElement(i, j)));
+    unsigned ndigits = (unsigned)std::max(0.,std::log10(absmax))+1;
+    width[j] = precision+ndigits+3;
+  }
+
+  // Output with correct width, aligned to the right
   for (unsigned int i = 0; i < 4; i++) {
     for (unsigned int j = 0; j < 4; j++) {
-      strmatrix.flags(ios::showpos);
-      strmatrix.width(10);
-      strmatrix.precision(3);
       strmatrix.setf(ios::fixed,ios::floatfield);
+      strmatrix.precision(precision);
       strmatrix.fill(' ');
-      strmatrix << std::left << matrix->GetElement(i, j);
-      //strmatrix.width(10);
-      strmatrix << " ";
+      strmatrix.width(width[j]);
+      strmatrix << std::right << matrix->GetElement(i, j);
     }
     strmatrix << std::endl;
   }
index 23ee6f414f84a1200382bc1431715c605aadef8f..1650571b26032c0766dfb7d1f7bbbb2db4aaa90a 100644 (file)
@@ -64,6 +64,7 @@ class vvMainWindow: public vvMainWindowBase,
   void SaveCurrentStateAs(const std::string& stateFile);
   void ReadSavedStateFile(const std::string& stateFile);
        void LinkAllImages();
+  QString Get4x4MatrixDoubleAsString(vtkSmartPointer<vtkMatrix4x4> matrix, const int precision=3);
 
   virtual void UpdateCurrentSlicer();
   virtual QTabWidget * GetTab();
@@ -194,7 +195,6 @@ private:
   QString GetSizeInBytes(unsigned long size);
   QString GetVectorDoubleAsString(std::vector<double> vectorDouble);
   QString GetVectorIntAsString(std::vector<int> vectorInt);
-  QString Get4x4MatrixDoubleAsString(vtkSmartPointer<vtkMatrix4x4> matrix);
   int GetSlicerIndexFromItem(QTreeWidgetItem* item);
   QTreeWidgetItem* GetItemFromSlicerManager(vvSlicerManager* sm);
   void SaveScreenshot(QVTKWidget *widget);