]> Creatis software - clitk.git/commitdiff
Merge branch 'master' into OpenGL2 OpenGL2
authortbaudier <thomas.baudier@creatis.insa-lyon.fr>
Thu, 26 Jan 2017 11:01:57 +0000 (12:01 +0100)
committertbaudier <thomas.baudier@creatis.insa-lyon.fr>
Thu, 26 Jan 2017 11:01:57 +0000 (12:01 +0100)
.travis.yml
travis/travis_build_qt.sh
vv/qt_ui/vvLandmarksPanel.ui
vv/vvLandmarks.cxx
vv/vvLandmarks.h
vv/vvLandmarksPanel.cxx
vv/vvLandmarksPanel.h
vv/vvMainWindow.cxx
vv/vvSlicerManager.cxx
vv/vvSlicerManager.h

index 53f56fd8757515257a7ff7ab2683322bdc317345..43121daaaa0db0ed2a643632919ceff961416c2c 100644 (file)
@@ -52,8 +52,8 @@ install:
 - if test $TRAVIS_OS_NAME == linux; then sudo apt-get -y install libgdcm2-dev libpq-dev; fi
 - if test $TRAVIS_OS_NAME == linux; then if [[ "$QT_VERSION" == "5.5.1" ]] ; then QTDIR="/opt/qt55" && PATH="$PATH:$QTDIR/bin" && qt55-env.sh ; fi; fi
 - if test $TRAVIS_OS_NAME == osx ; then export HOMEBREW_QT_VERSION=$(brew list --versions qt | rev | cut -d' ' -f1 | rev); fi
-- if test $TRAVIS_OS_NAME == osx ; then ln -s /usr/local/Cellar/qt5/$HOMEBREW_QT_VERSION/mkspecs /usr/local/mkspecs; fi
-- if test $TRAVIS_OS_NAME == osx ; then ln -s /usr/local/Cellar/qt5/$HOMEBREW_QT_VERSION/plugins /usr/local/plugins; fi
+- if test $TRAVIS_OS_NAME == osx ; then if [[ "$QT_VERSION" == "5.5.1" ]] ; then ln -s /usr/local/Cellar/qt@5.5/5.5.1/mkspecs /usr/local/mkspecs; fi; fi
+- if test $TRAVIS_OS_NAME == osx ; then if [[ "$QT_VERSION" == "5.5.1" ]] ; then ln -s /usr/local/Cellar/qt@5.5/5.5.1/plugins /usr/local/plugins; fi; fi
 - if test $TRAVIS_OS_NAME == osx ; then qmake -v; fi
 
 cache:
index 2bd9a3181a08ce843463aed1bb771c793d6a64ab..455eb73e3eda55320375a1d9865c5b707a58a96f 100755 (executable)
@@ -13,9 +13,9 @@ elif [ "$QT_VERSION" == "5.5.1" ]; then
   if test $TRAVIS_OS_NAME == linux ; then sudo apt-get update -qq; fi
   if test $TRAVIS_OS_NAME == linux ; then sudo apt-get -y --force-yes install qt55tools; fi
   
-  if test $TRAVIS_OS_NAME == osx ; then brew install qt5; fi
-  if test $TRAVIS_OS_NAME == osx ; then brew link qt5 --force; fi
-  if test $TRAVIS_OS_NAME == osx ; then brew linkapps qt5; fi
+  if test $TRAVIS_OS_NAME == osx ; then brew install qt@5.5; fi
+  if test $TRAVIS_OS_NAME == osx ; then brew link qt@5.5 --force; fi
+  if test $TRAVIS_OS_NAME == osx ; then brew linkapps qt@5.5; fi
 fi
 
 
index 9337b52c96c3c8207add01903bb37cdf393bfb73..8744627113d32d94945be5ae599fb61e25863493 100644 (file)
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>325</width>
+    <width>382</width>
     <height>214</height>
    </rect>
   </property>
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0" colspan="-1">
-    <widget class="QLabel" name="nameLabel">
-     <property name="text">
-      <string>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;CurrentImage :&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-     </property>
-    </widget>
-   </item>
    <item row="1" column="0" colspan="2">
     <widget class="QLabel" name="label">
      <property name="text">
@@ -139,6 +129,27 @@ p, li { white-space: pre-wrap; }
      </property>
     </widget>
    </item>
+   <item row="0" column="0" colspan="5">
+    <widget class="QLabel" name="nameLabel">
+     <property name="text">
+      <string>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;CurrentImage :&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="3" colspan="2">
+    <widget class="QPushButton" name="updateTransformButton">
+     <property name="text">
+      <string>Update Coords.</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../vvIcons.qrc">
+       <normaloff>:/common/icons/rotateright.png</normaloff>:/common/icons/rotateright.png</iconset>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <resources>
index dc38cd228f69b27981960e24b220bf3fafa5c4eb..528669d0768977144760d2e8e77895087e186f22 100644 (file)
 vvLandmarks::vvLandmarks(int size)
 {
   mLandmarks.resize(size);
+  mLandmarksInitial.resize(size);
   mFilenames.resize(0);
   mTime = 0;
 
   for (int i = 0; i < size; i++) {
     mLandmarks[i].resize(0);
+    mLandmarksInitial[i].resize(0);
     vtkPoints *points = vtkPoints::New();
     mPoints.push_back(points);
     mIds.push_back(vtkFloatArray::New());
@@ -79,6 +81,7 @@ void vvLandmarks::AddLandmark(float x,float y,float z,float t,double value)
   point.coordinates[3] = t;
   point.pixel_value=value;
   mLandmarks[mTime].push_back(point);
+  mLandmarksInitial[mTime].push_back(point);
 
   idPoint = mPoints[int(t)]->InsertNextPoint(x,y,z);
   std::string str_vtkIdType;       // string which will contain the result
@@ -103,6 +106,27 @@ void vvLandmarks::AddLandmark(float x,float y,float z,float t,double value)
 }
 //--------------------------------------------------------------------
 
+//--------------------------------------------------------------------
+void vvLandmarks::TransformUpdate(vtkAbstractTransform* transform)
+{
+  //For all Time, For all landmarks, I apply the transform
+  for(int time=0; time<mLandmarks.size(); ++time)
+  {
+    for(int landmark=0; landmark<mLandmarks[time].size(); ++landmark)
+    {
+      double ptBeforeTransform[3], ptAfterTransform[3];
+      ptBeforeTransform[0]= mLandmarksInitial[time][landmark].coordinates[0];
+      ptBeforeTransform[1]= mLandmarksInitial[time][landmark].coordinates[1];
+      ptBeforeTransform[2]= mLandmarksInitial[time][landmark].coordinates[2];
+      transform->TransformPoint(ptBeforeTransform, ptAfterTransform);
+
+      mLandmarks[time][landmark].coordinates[0]= ptAfterTransform[0];
+      mLandmarks[time][landmark].coordinates[1]= ptAfterTransform[1];
+      mLandmarks[time][landmark].coordinates[2]= ptAfterTransform[2];
+    }
+  }
+}
+//--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
 void vvLandmarks::RemoveLastLandmark()
@@ -110,6 +134,7 @@ void vvLandmarks::RemoveLastLandmark()
   mPoints[mTime]->SetNumberOfPoints(mPoints[mTime]->GetNumberOfPoints()-1);
   //  mText.pop_back();
   mLandmarks[mTime].pop_back();
+  mLandmarksInitial[mTime].pop_back();
   mIds[mTime]->RemoveLastTuple();
   mLabels[mTime]->SetNumberOfValues(mLabels[mTime]->GetNumberOfValues()-1);
   mLabels[mTime]->Modified();
@@ -148,6 +173,7 @@ void vvLandmarks::RemoveLandmarkWithLabel(vtkStdString label, int time)
   mPolyData->Modified();
 
   mLandmarks[t].erase(mLandmarks[t].begin() + index);
+  mLandmarksInitial[t].erase(mLandmarksInitial[t].begin() + index);
   mIds[t]->RemoveLastTuple();
 }
 //--------------------------------------------------------------------
@@ -175,6 +201,7 @@ void vvLandmarks::RemoveLandmark(int index)
   mPolyData->Modified();
 
   mLandmarks[t].erase(mLandmarks[t].begin() + index);
+  mLandmarksInitial[t].erase(mLandmarksInitial[t].begin() + index);
   mIds[t]->RemoveLastTuple();
 }
 //--------------------------------------------------------------------
@@ -184,6 +211,7 @@ void vvLandmarks::RemoveAll()
 {
   for (unsigned int i = 0; i < mLandmarks.size(); i++) {
     mLandmarks[i].clear();
+    mLandmarksInitial[i].clear();
     mPoints[i]->SetNumberOfPoints(0);
     mLabels[i]->SetNumberOfValues(0);
     mIds[i]->SetNumberOfValues(0);
@@ -195,6 +223,7 @@ void vvLandmarks::RemoveAll()
 void vvLandmarks::ChangeComments(int index, std::string comments)
 {
   mLandmarks[mTime][index].comments = comments;
+  mLandmarksInitial[mTime][index].comments = comments;
 }
 //--------------------------------------------------------------------
 
@@ -242,6 +271,7 @@ bool vvLandmarks::LoadTxtFile(std::vector<std::string> filenames)
   mFilenames = filenames;
   for (unsigned int i = 0; i < mPoints.size(); i++) {
     mLandmarks[i].clear();
+    mLandmarksInitial[i].clear();
     mPoints[i]->SetNumberOfPoints(0);
   }
 
@@ -333,6 +363,7 @@ bool vvLandmarks::LoadTxtFile(std::vector<std::string> filenames)
         }
         //      DD(point.comments);
         mLandmarks[int(point.coordinates[3])].push_back(point);
+        mLandmarksInitial[int(point.coordinates[3])].push_back(point);
         mIds[int(point.coordinates[3])]->InsertNextTuple1(0.55);
         idPoint = mPoints[int(point.coordinates[3])]->InsertNextPoint(
                                                             point.coordinates[0],point.coordinates[1],point.coordinates[2]);
@@ -361,6 +392,7 @@ bool vvLandmarks::LoadPtsFile(std::vector<std::string> filenames)
   for (unsigned int i = 0; i < mPoints.size(); i++) {
     mPoints[i]->SetNumberOfPoints(0);
     mLandmarks[i].clear();
+    mLandmarksInitial[i].clear();
   }
 
   int err = 0;
@@ -415,6 +447,7 @@ bool vvLandmarks::LoadPtsFile(std::vector<std::string> filenames)
 
         //      DD(point.comments);
         mLandmarks[int(point.coordinates[3])].push_back(point);
+        mLandmarksInitial[int(point.coordinates[3])].push_back(point);
         mIds[int(point.coordinates[3])]->InsertNextTuple1(0.55);
         idPoint = mPoints[int(point.coordinates[3])]->InsertNextPoint(
                                                             point.coordinates[0],point.coordinates[1],point.coordinates[2]);
@@ -455,16 +488,16 @@ void vvLandmarks::SaveFile(std::string filename)
       std::stringstream out;
       out.imbue(std::locale("C")); //This is to specify that the dot is to be used as the decimal separator
       out << i << " "
-          << mLandmarks[t][i].coordinates[0] << " "
-          << mLandmarks[t][i].coordinates[1] << " "
-          << mLandmarks[t][i].coordinates[2] << " "
-          << mLandmarks[t][i].coordinates[3] << " "
-          << mLandmarks[t][i].pixel_value << " ";
+          << mLandmarksInitial[t][i].coordinates[0] << " "
+          << mLandmarksInitial[t][i].coordinates[1] << " "
+          << mLandmarksInitial[t][i].coordinates[2] << " "
+          << mLandmarksInitial[t][i].coordinates[3] << " "
+          << mLandmarksInitial[t][i].pixel_value << " ";
       fileContent += out.str();
-      if (mLandmarks[t][i].comments.size() == 0)
+      if (mLandmarksInitial[t][i].comments.size() == 0)
         fileContent += " ";
       else
-        fileContent += mLandmarks[t][i].comments;
+        fileContent += mLandmarksInitial[t][i].comments;
       fileContent += "\n";
     }
   }
index 6f7e91ff99c6635f83303c0e69c7c924a887c745..285b24a741033d30cd8be685d5a88c38d1397bc8 100644 (file)
@@ -25,6 +25,7 @@
 #include "vtkPoints.h"
 #include "vvLandmarksGlyph.h"
 #include "vtkStringArray.h"
+#include <vtkAbstractTransform.h>
 
 //typedef
 struct vvLandmark {
@@ -43,6 +44,7 @@ public :
     void SaveFile(std::string filename);
 
     void AddLandmark(float x,float y,float z,float t,double value);
+    void TransformUpdate(vtkAbstractTransform* transform);
     void RemoveLastLandmark();
     void RemoveLandmarkWithLabel(vtkStdString, int);
     void RemoveLandmark(int index);
@@ -71,6 +73,7 @@ private:
     
     typedef std::vector<vvLandmark> LandmarkContainerType;
     std::vector<LandmarkContainerType> mLandmarks;
+    std::vector<LandmarkContainerType> mLandmarksInitial;
     
     vtkPolyData *mPolyData;
     std::vector<vtkPoints*> mPoints;
index f23631cb1ca734fd41e3e946145c0bb64ceb6563..827e391a474ac637b819392fec8c254cdcbfbf51 100644 (file)
@@ -38,9 +38,11 @@ vvLandmarksPanel::vvLandmarksPanel(QWidget * parent):QWidget(parent)
   tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
   loadButton->setEnabled(0);
   saveButton->setEnabled(0);
+  updateTransformButton->setEnabled(0);
   removeButton->setEnabled(0);
   connect(loadButton, SIGNAL(clicked()),this,SLOT(Load()));
   connect(saveButton, SIGNAL(clicked()),this,SLOT(Save()));
+  connect(updateTransformButton, SIGNAL(clicked()),this,SLOT(UpdateTransform()));
   connect(removeButton, SIGNAL(clicked()),this,SLOT(RemoveSelectedPoints()));
   connect(removeAllButton, SIGNAL(clicked()),this,SLOT(RemoveAllPoints()));
   connect(tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(CommentsChanged(int,int)));
@@ -80,6 +82,12 @@ void vvLandmarksPanel::Save()
   }
 }
 
+void vvLandmarksPanel::UpdateTransform()
+{
+  emit UpdateLandmarkTransform();
+  SetCurrentLandmarks(mCurrentLandmarks,mCurrentLandmarks->GetTime());
+}
+
 void vvLandmarksPanel::SelectPoint()
 { 
   if (tableWidget->rowCount() > 0) {
@@ -181,6 +189,7 @@ void vvLandmarksPanel::SetCurrentLandmarks(vvLandmarks* lm,int time)
     return;
   loadButton->setEnabled(1);
   saveButton->setEnabled(1);
+  updateTransformButton->setEnabled(1);
   removeButton->setEnabled(1);
   mCurrentLandmarks = lm;
   tableWidget->clearContents();
index 01f53994ce67b0c604e8325199a9fca4f21f6f5e..3d9b45cbd38d2020b0cf71accb6fc52ae50685cf 100644 (file)
@@ -44,6 +44,7 @@ public slots:
     void Load();
     bool LoadFromFile(std::vector<std::string> file);
     void Save();
+    void UpdateTransform();
     void RemoveSelectedPoints();
     void RemoveAllPoints();
     void AddPoint();
@@ -52,6 +53,7 @@ public slots:
 signals:
     void UpdateRenderWindows();
     void SelectedPointChanged();
+    void UpdateLandmarkTransform();
 
 private:
     void AddPoint(int);
index e70269cbda681d32292cb37f291d633f65546ed9..a3d2000cbd9da993edcd9adccbd3b1130eaf9358 100644 (file)
@@ -984,6 +984,7 @@ void vvMainWindow::LoadImages(std::vector<std::string> files, vvImageReader::Loa
         connect(mSlicerManagers.back(), SIGNAL(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)),
           this,SLOT(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)));
         connect(mSlicerManagers.back(),SIGNAL(LandmarkAdded()),landmarksPanel,SLOT(AddPoint()));
+        connect(landmarksPanel,SIGNAL(UpdateLandmarkTransform()), mSlicerManagers.back(), SLOT(UpdateLandmark()));
         InitSlicers();
         numberofsuccesulreads++;
       }
@@ -3697,6 +3698,7 @@ vvSlicerManager* vvMainWindow::AddImage(vvImage::Pointer image,std::string filen
   connect(mSlicerManagers.back(), SIGNAL(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)),
     this,SLOT(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)));
   connect(mSlicerManagers.back(), SIGNAL(LandmarkAdded()),landmarksPanel,SLOT(AddPoint()));
+  connect(landmarksPanel,SIGNAL(UpdateLandmarkTransform()), mSlicerManagers.back(), SLOT(UpdateLandmark()));
 
 
 
index e9d1c215fc91b4f6886e74c343bf8c2eddbe5c47..139c8089afc5d8a61d07db22f7d11c75e787a7d8 100644 (file)
@@ -1625,6 +1625,13 @@ void vvSlicerManager::AddLandmarkProfile(float x,float y,float z,float t)
 }
 //----------------------------------------------------------------------------
 
+//----------------------------------------------------------------------------
+void vvSlicerManager::UpdateLandmark()
+{
+    this->GetLandmarks()->TransformUpdate(mSlicers[mSelectedSlicer]->GetConcatenatedTransform()->GetInverse());
+}
+//----------------------------------------------------------------------------
+
 //----------------------------------------------------------------------------
 void vvSlicerManager::PrevImage(int slicer)
 { 
index e80ef485f8e54ea9de07b18957b04db35531b039..0d5c9aee218eacc9be8b615a1ce98608ce8d4eed 100644 (file)
@@ -285,6 +285,7 @@ class vvSlicerManager : public QObject {
 
 public slots:
   void AddLandmark(float x,float y,float z,float t);
+  void UpdateLandmark();
 
 signals :
   void callAddLandmark(float x,float y,float z,float t);