From 05b970a6465f7ca1f33a360232eb4612ef7bfce4 Mon Sep 17 00:00:00 2001
From: Karsten Rink <karsten.rink@ufz.de>
Date: Tue, 20 Sep 2011 11:09:04 +0200
Subject: [PATCH] included tranlation option into GUI; removed multi-mesh from
 FEM Read and re-inserted adding the mesh into global mesh vector into
 files0.cpp

---
 VtkVis/VtkCompositeSelectionFilter.cpp |   2 +-
 VtkVis/VtkVisPipelineItem.cpp          |  13 ++
 VtkVis/VtkVisPipelineItem.h            |   3 +
 VtkVis/VtkVisTabWidget.cpp             |  45 +++++-
 VtkVis/VtkVisTabWidget.h               |   6 +
 VtkVis/VtkVisTabWidgetBase.ui          | 200 ++++++++++++++++++++++---
 6 files changed, 246 insertions(+), 23 deletions(-)

diff --git a/VtkVis/VtkCompositeSelectionFilter.cpp b/VtkVis/VtkCompositeSelectionFilter.cpp
index 1a40325c7ea..91b3e627339 100644
--- a/VtkVis/VtkCompositeSelectionFilter.cpp
+++ b/VtkVis/VtkCompositeSelectionFilter.cpp
@@ -22,7 +22,7 @@ VtkCompositeSelectionFilter::VtkCompositeSelectionFilter( vtkAlgorithm* inputAlg
 
 void VtkCompositeSelectionFilter::init()
 {
-	const char* filter_name = std::string("Selection").c_str();
+	const char* filter_name("Selection");
 	double thresholdLower(0.0), thresholdUpper(1.0);
 	this->_inputDataObjectType = VTK_UNSTRUCTURED_GRID;
 	this->_outputDataObjectType = VTK_UNSTRUCTURED_GRID;
diff --git a/VtkVis/VtkVisPipelineItem.cpp b/VtkVis/VtkVisPipelineItem.cpp
index 9e4977abbb4..37f1dd0b2ee 100644
--- a/VtkVis/VtkVisPipelineItem.cpp
+++ b/VtkVis/VtkVisPipelineItem.cpp
@@ -535,6 +535,19 @@ void VtkVisPipelineItem::setScale(double x, double y, double z) const
 
 }
 
+void VtkVisPipelineItem::setTranslation(double x, double y, double z) const
+{
+	if (this->transformFilter())
+	{
+		vtkTransform* transform =
+			static_cast<vtkTransform*>(this->transformFilter()->GetTransform());
+		transform->Identity();
+		transform->Translate(x, y, z);
+		this->transformFilter()->Modified();
+	}
+
+}
+
 void VtkVisPipelineItem::setScaleOnChildren(double x, double y, double z) const
 {
 	for (int i = 0; i < this->childCount(); ++i)
diff --git a/VtkVis/VtkVisPipelineItem.h b/VtkVis/VtkVisPipelineItem.h
index c3b12ff1699..a1dc8bb3ad8 100644
--- a/VtkVis/VtkVisPipelineItem.h
+++ b/VtkVis/VtkVisPipelineItem.h
@@ -100,6 +100,9 @@ public:
 	/// @brief Sets the geometry and data scaling.
 	void setScale(double x, double y, double z) const;
 
+	/// @brief Translates the item in vis-space.
+	void setTranslation(double x, double y, double z) const;
+
 	/// @brief Sets the geometry and date scaling recursively on all children of
 	/// this item.
 	void setScaleOnChildren(double x, double y, double z) const;
diff --git a/VtkVis/VtkVisTabWidget.cpp b/VtkVis/VtkVisTabWidget.cpp
index f84bc6ed5d7..5c4510bd6c9 100644
--- a/VtkVis/VtkVisTabWidget.cpp
+++ b/VtkVis/VtkVisTabWidget.cpp
@@ -35,6 +35,10 @@ VtkVisTabWidget::VtkVisTabWidget( QWidget* parent /*= 0*/ )
 
 	this->scaleZ->setValidator(new QDoubleValidator(0, 100, 8, this));
 
+	this->transX->setValidator(new QDoubleValidator(this));
+	this->transY->setValidator(new QDoubleValidator(this));
+	this->transZ->setValidator(new QDoubleValidator(this));
+
 	connect(this->vtkVisPipelineView, SIGNAL(requestViewUpdate()),
 		this, SIGNAL(requestViewUpdate()));
 
@@ -56,16 +60,33 @@ void VtkVisTabWidget::setActiveItem( VtkVisPipelineItem* item )
 		if (actor)
 		{
 			actorPropertiesGroupBox->setEnabled(true);
+			transformTabWidget->setEnabled(true);
 			vtkProperty* vtkProps = actor->GetProperty();
 			diffuseColorPickerButton->setColor(vtkProps->GetDiffuseColor());
 			visibleEdgesCheckBox->setChecked(vtkProps->GetEdgeVisibility());
 			edgeColorPickerButton->setColor(vtkProps->GetEdgeColor());
 			opacitySlider->setValue((int)(vtkProps->GetOpacity() * 100.0));
 			vtkTransform* transform = 
-				static_cast<vtkTransform*>(_item->transformFilter()->GetTransform());
+			static_cast<vtkTransform*>(_item->transformFilter()->GetTransform());
+			//signals off
 			double scale[3];
 			transform->GetScale(scale);
-			scaleZ->setText(QString::number(scale[2]));
+			double* trans = transform->GetPosition();
+
+			//switch signals off for just filling in text-boxes after clicking on an item
+			this->scaleZ->blockSignals(true);
+			this->transX->blockSignals(true);
+			this->transY->blockSignals(true);
+			this->transZ->blockSignals(true);
+			this->scaleZ->setText(QString::number(scale[2]));
+			this->transX->setText(QString::number(trans[0]));
+			this->transY->setText(QString::number(trans[1]));
+			this->transZ->setText(QString::number(trans[2]));
+			this->scaleZ->blockSignals(false);
+			this->transX->blockSignals(false);
+			this->transY->blockSignals(false);
+			this->transZ->blockSignals(false);
+			//switch signals back on
 
 			this->buildScalarArrayComboBox(_item);
 
@@ -82,7 +103,10 @@ void VtkVisTabWidget::setActiveItem( VtkVisPipelineItem* item )
 			}
 		}
 		else
+		{
 			actorPropertiesGroupBox->setEnabled(false);
+			transformTabWidget->setEnabled(false);
+		}
 
 		this->buildProportiesDialog(item);
 		
@@ -110,6 +134,7 @@ void VtkVisTabWidget::setActiveItem( VtkVisPipelineItem* item )
 	else
 	{
 		actorPropertiesGroupBox->setEnabled(false);
+		transformTabWidget->setEnabled(false);
 		this->activeScalarComboBox->clear();
 	}
 
@@ -179,6 +204,22 @@ void VtkVisTabWidget::on_scaleZ_textChanged(const QString &text)
 	}
 }
 
+void VtkVisTabWidget::translateItem()
+{
+	bool okX(true), okY(true), okZ(true);
+	double trans[3];
+
+	trans[0] = transX->text().toDouble(&okX);
+	trans[1] = transY->text().toDouble(&okY);
+	trans[2] = transZ->text().toDouble(&okZ);
+
+	if (okX && okY && okZ)
+	{
+		_item->setTranslation(trans[0], trans[1], trans[2]);
+		emit requestViewUpdate();
+	}
+}
+
 void VtkVisTabWidget::buildProportiesDialog(VtkVisPipelineItem* item)
 {
 	QFormLayout* layout = static_cast<QFormLayout*>(this->scrollAreaWidgetContents->layout());
diff --git a/VtkVis/VtkVisTabWidget.h b/VtkVis/VtkVisTabWidget.h
index 513da64b249..23204c48d0f 100644
--- a/VtkVis/VtkVisTabWidget.h
+++ b/VtkVis/VtkVisTabWidget.h
@@ -34,6 +34,9 @@ protected slots:
 	void on_edgeColorPickerButton_colorPicked(QColor color);
 	void on_opacitySlider_sliderMoved(int value);
 	void on_scaleZ_textChanged(const QString &text);
+	void on_transX_textChanged(const QString &text) { this->translateItem(); };
+	void on_transY_textChanged(const QString &text) { this->translateItem(); };
+	void on_transZ_textChanged(const QString &text) { this->translateItem(); };
 
 	void SetActiveAttributeOnItem(const QString &name);
 
@@ -43,6 +46,9 @@ private:
 
 	/// Reads the scalar arrays of the given vtk-object and constructs content for the scalar array selection box.
 	void buildScalarArrayComboBox(VtkVisPipelineItem* item);
+
+	void translateItem();
+
 	VtkVisPipelineItem* _item;
 
 signals:
diff --git a/VtkVis/VtkVisTabWidgetBase.ui b/VtkVis/VtkVisTabWidgetBase.ui
index 07be0bde26e..5bad5ace50b 100644
--- a/VtkVis/VtkVisTabWidgetBase.ui
+++ b/VtkVis/VtkVisTabWidgetBase.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>279</width>
-    <height>741</height>
+    <width>259</width>
+    <height>677</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -55,7 +55,7 @@
          <property name="minimumSize">
           <size>
            <width>0</width>
-           <height>200</height>
+           <height>180</height>
           </size>
          </property>
          <property name="title">
@@ -113,23 +113,6 @@
             </property>
            </widget>
           </item>
-          <item row="5" column="0">
-           <widget class="QLabel" name="label_3">
-            <property name="text">
-             <string>Scaling Factor</string>
-            </property>
-           </widget>
-          </item>
-          <item row="5" column="1">
-           <widget class="QLineEdit" name="scaleZ">
-            <property name="text">
-             <string>1</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-           </widget>
-          </item>
           <item row="1" column="1">
            <widget class="QComboBox" name="activeScalarComboBox"/>
           </item>
@@ -143,6 +126,183 @@
          </layout>
         </widget>
        </item>
+       <item>
+        <widget class="QTabWidget" name="transformTabWidget">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>0</width>
+           <height>60</height>
+          </size>
+         </property>
+         <property name="currentIndex">
+          <number>1</number>
+         </property>
+         <widget class="QWidget" name="scalingTab">
+          <attribute name="title">
+           <string>Scaling</string>
+          </attribute>
+          <layout class="QHBoxLayout" name="horizontalLayout_4">
+           <property name="spacing">
+            <number>5</number>
+           </property>
+           <property name="margin">
+            <number>5</number>
+           </property>
+           <item>
+            <layout class="QHBoxLayout" name="horizontalLayout">
+             <property name="spacing">
+              <number>5</number>
+             </property>
+             <property name="sizeConstraint">
+              <enum>QLayout::SetDefaultConstraint</enum>
+             </property>
+             <item>
+              <widget class="QLabel" name="label_3">
+               <property name="text">
+                <string>Scaling Factor</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="scaleZ">
+               <property name="text">
+                <string>1</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+         <widget class="QWidget" name="translationTab">
+          <attribute name="title">
+           <string>Translation</string>
+          </attribute>
+          <layout class="QHBoxLayout" name="horizontalLayout_5">
+           <property name="spacing">
+            <number>5</number>
+           </property>
+           <property name="margin">
+            <number>5</number>
+           </property>
+           <item>
+            <layout class="QHBoxLayout" name="horizontalLayout_2">
+             <property name="spacing">
+              <number>5</number>
+             </property>
+             <item>
+              <widget class="QLabel" name="transXLabel">
+               <property name="sizePolicy">
+                <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+               <property name="text">
+                <string>X</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="transX">
+               <property name="text">
+                <string>0</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <spacer name="horizontalSpacer">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item>
+              <widget class="QLabel" name="transYLabel">
+               <property name="sizePolicy">
+                <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+               <property name="text">
+                <string>Y</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="transY">
+               <property name="text">
+                <string>0</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <spacer name="horizontalSpacer_2">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item>
+              <widget class="QLabel" name="transZLabel">
+               <property name="sizePolicy">
+                <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+               <property name="text">
+                <string>Z</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="transZ">
+               <property name="text">
+                <string>0</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </widget>
+        </widget>
+       </item>
        <item>
         <widget class="QGroupBox" name="filterPropertiesGroupBox">
          <property name="sizePolicy">
-- 
GitLab