]> Creatis software - clitk.git/blobdiff - vv/vv.cxx
dicom structure in cmd line
[clitk.git] / vv / vv.cxx
index 13a513e576f1e026f5a30cf1ccf6226fad63f59e..f3011e687e4e1fd32d77ac89de32ae8fb278cb03 100644 (file)
--- a/vv/vv.cxx
+++ b/vv/vv.cxx
@@ -30,6 +30,8 @@
 
 #include "clitkIO.h"
 #include "vvMainWindow.h"
+#include "vvReadState.h"
+#include "vvToolsList.h"
 #include <vtkFileOutputWindow.h>
 #include <vtkSmartPointer.h>
 #include <itkFileOutputWindow.h>
@@ -61,7 +63,7 @@ std::string create_timed_string()
 }
 
 //------------------------------------------------------------------------------
-#ifdef _WIN32\r
+#ifdef _WIN32
 int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowCmd)
 {
   int argc = __argc;
@@ -75,6 +77,23 @@ int main( int argc, char** argv )
 
   QApplication app( argc, argv );
   Q_INIT_RESOURCE(vvIcons);
+  
+  // 
+  // ATTENTION: RĂ´mulo Pinho - 05/08/2011
+  // Forcing the locale of the application is necessary
+  // because QT initialization changes it to the locale
+  // of the language of the system. This can cause 
+  // inconsistencies when, e.g., reading float values
+  // from DICOM fields with gdcm, since the decimal
+  // point may be changed for a comma (as in French).
+  // In practice, functions such as scanf and its
+  // variations are directly affected.
+  // https://bugreports.qt.nokia.com//browse/QTBUG-15247?page=com.atlassian.jira.plugin.system.issuetabpanels%253Achangehistory-tabpanel
+  //
+#ifndef _WIN32
+  std::string old_locale = setlocale(LC_NUMERIC, NULL);
+  setlocale(LC_NUMERIC, "POSIX");
+#endif
 
   vvMainWindow window;
 
@@ -93,6 +112,7 @@ int main( int argc, char** argv )
   int n_image_loaded=0;
   std::string win(""), lev("");
 
+       bool link_images = false;
   if (argc >1) {
     for (int i = 1; i < argc; i++) {
       std::string current = argv[i];
@@ -114,6 +134,10 @@ int main( int argc, char** argv )
           if (!n_image_loaded) load_image_first_error();
           window.AddROI(n_image_loaded-1,argv[i+1]);
           i++; //skip roi name
+        } else if (current=="--contour") {
+          if (!n_image_loaded) load_image_first_error();
+          window.AddDCStructContour(n_image_loaded-1,argv[i+1]);
+          i++; //skip roi name
         } else if (current=="--fusion") {
           if (!n_image_loaded) load_image_first_error();
           window.AddFusionImage(n_image_loaded-1,argv[i+1]);
@@ -125,7 +149,10 @@ int main( int argc, char** argv )
           parse_mode=P_WINDOW;
         } else if (current == "--level") {
           parse_mode=P_LEVEL;
-        } else if (current == "--log") {
+        } else if (current == "--linkall") {
+                                       link_images = true;
+                               }
+                               else if (current == "--log") {
           std::string log_dir = QDir::tempPath().toStdString() + std::string("/vv-log");
 
           if(itksys::SystemTools::FileExists(log_dir.c_str()) &&
@@ -150,7 +177,14 @@ int main( int argc, char** argv )
           vtk_log->FlushOn();
           vtk_log->AppendOn();
           vtkOutputWindow::SetInstance(vtk_log);
+        } else if (current == "--state") {
+          //window.ReadSavedStateFile(argv[i+1]);
+          vvReadState read_state;
+          read_state.Run(&window, argv[i+1]);
+          n_image_loaded += read_state.GetNumberOfImages();
+          i++;
         }
+        
       } else if (parse_mode == P_SEQUENCE) {
         sequence_filenames.push_back(current);
       } else if (parse_mode == P_WINDOW) {
@@ -174,9 +208,19 @@ int main( int argc, char** argv )
   }
 
   if(win!="" && lev!="") {
-    window.WindowLevelChanged(atof(win.c_str()), atof(lev.c_str()), 6, 0);
+    window.SetWindowLevel(atof(win.c_str()), atof(lev.c_str()));
     window.ApplyWindowLevelToAllImages();
   }
 
-  return app.exec();
+       if (link_images)
+               window.LinkAllImages();
+
+  int ret = app.exec();
+  
+#ifndef _WIN32
+  // restoring the locale, just to be clean...
+  setlocale(LC_NUMERIC, old_locale.c_str());
+#endif
+
+  return ret;
 }