ソースを参照

Make position editable

Johannes Kreutz 2 年 前
コミット
97f631e075

+ 80 - 56
trackpoint-app/gui/EditWidget.ui

@@ -104,21 +104,21 @@
           <string>POSITIONS</string>
          </property>
          <layout class="QGridLayout" name="gridLayout_2">
-          <item row="0" column="0">
-           <widget class="QLabel" name="anchorLabel">
+          <item row="1" column="3">
+           <widget class="QLabel" name="normalX">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-              <horstretch>0</horstretch>
+              <horstretch>2</horstretch>
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
             <property name="text">
-             <string>Anchor point</string>
+             <string>-</string>
             </property>
            </widget>
           </item>
-          <item row="2" column="0">
-           <widget class="QLabel" name="anchorYLabel">
+          <item row="3" column="0">
+           <widget class="QLabel" name="anchorZLabel">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
@@ -126,12 +126,12 @@
              </sizepolicy>
             </property>
             <property name="text">
-             <string>Y:</string>
+             <string>Z:</string>
             </property>
            </widget>
           </item>
-          <item row="0" column="2">
-           <widget class="QLabel" name="normalLabel">
+          <item row="2" column="2">
+           <widget class="QLabel" name="normalYLabel">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
@@ -139,12 +139,12 @@
              </sizepolicy>
             </property>
             <property name="text">
-             <string>Normal vector</string>
+             <string>Y:</string>
             </property>
            </widget>
           </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="anchorXLabel">
+          <item row="3" column="2">
+           <widget class="QLabel" name="normalZLabel">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
@@ -152,12 +152,12 @@
              </sizepolicy>
             </property>
             <property name="text">
-             <string>X:</string>
+             <string>Z:</string>
             </property>
            </widget>
           </item>
-          <item row="3" column="0">
-           <widget class="QLabel" name="anchorZLabel">
+          <item row="2" column="0">
+           <widget class="QLabel" name="anchorYLabel">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
@@ -165,12 +165,12 @@
              </sizepolicy>
             </property>
             <property name="text">
-             <string>Z:</string>
+             <string>Y:</string>
             </property>
            </widget>
           </item>
-          <item row="1" column="1">
-           <widget class="QLabel" name="anchorX">
+          <item row="0" column="0" colspan="2">
+           <widget class="QLabel" name="anchorLabel">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
@@ -178,12 +178,12 @@
              </sizepolicy>
             </property>
             <property name="text">
-             <string>-</string>
+             <string>Anchor point</string>
             </property>
            </widget>
           </item>
-          <item row="2" column="1">
-           <widget class="QLabel" name="anchorY">
+          <item row="0" column="2" colspan="2">
+           <widget class="QLabel" name="normalLabel">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
@@ -191,12 +191,12 @@
              </sizepolicy>
             </property>
             <property name="text">
-             <string>-</string>
+             <string>Normal vector</string>
             </property>
            </widget>
           </item>
-          <item row="3" column="1">
-           <widget class="QLabel" name="anchorZ">
+          <item row="2" column="3">
+           <widget class="QLabel" name="normalY">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
@@ -212,7 +212,7 @@
            <widget class="QLabel" name="normalXLabel">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-              <horstretch>0</horstretch>
+              <horstretch>1</horstretch>
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
@@ -221,21 +221,21 @@
             </property>
            </widget>
           </item>
-          <item row="1" column="3">
-           <widget class="QLabel" name="normalX">
+          <item row="1" column="0">
+           <widget class="QLabel" name="anchorXLabel">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-              <horstretch>0</horstretch>
+              <horstretch>1</horstretch>
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
             <property name="text">
-             <string>-</string>
+             <string>X:</string>
             </property>
            </widget>
           </item>
-          <item row="2" column="2">
-           <widget class="QLabel" name="normalYLabel">
+          <item row="3" column="3">
+           <widget class="QLabel" name="normalZ">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
@@ -243,46 +243,70 @@
              </sizepolicy>
             </property>
             <property name="text">
-             <string>Y:</string>
+             <string>-</string>
             </property>
            </widget>
           </item>
-          <item row="3" column="2">
-           <widget class="QLabel" name="normalZLabel">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
+          <item row="2" column="1">
+           <widget class="QDoubleSpinBox" name="anchorY">
+            <property name="readOnly">
+             <bool>true</bool>
             </property>
-            <property name="text">
-             <string>Z:</string>
+            <property name="decimals">
+             <number>6</number>
+            </property>
+            <property name="minimum">
+             <double>-1000000.000000000000000</double>
+            </property>
+            <property name="maximum">
+             <double>1000000.000000000000000</double>
+            </property>
+            <property name="singleStep">
+             <double>0.100000000000000</double>
             </property>
            </widget>
           </item>
-          <item row="2" column="3">
-           <widget class="QLabel" name="normalY">
+          <item row="1" column="1">
+           <widget class="QDoubleSpinBox" name="anchorX">
             <property name="sizePolicy">
-             <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-              <horstretch>0</horstretch>
+             <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+              <horstretch>2</horstretch>
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
-            <property name="text">
-             <string>-</string>
+            <property name="readOnly">
+             <bool>true</bool>
+            </property>
+            <property name="decimals">
+             <number>6</number>
+            </property>
+            <property name="minimum">
+             <double>-1000000.000000000000000</double>
+            </property>
+            <property name="maximum">
+             <double>1000000.000000000000000</double>
+            </property>
+            <property name="singleStep">
+             <double>0.100000000000000</double>
             </property>
            </widget>
           </item>
-          <item row="3" column="3">
-           <widget class="QLabel" name="normalZ">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
+          <item row="3" column="1">
+           <widget class="QDoubleSpinBox" name="anchorZ">
+            <property name="readOnly">
+             <bool>true</bool>
             </property>
-            <property name="text">
-             <string>-</string>
+            <property name="decimals">
+             <number>6</number>
+            </property>
+            <property name="minimum">
+             <double>-1000000.000000000000000</double>
+            </property>
+            <property name="maximum">
+             <double>1000000.000000000000000</double>
+            </property>
+            <property name="singleStep">
+             <double>0.100000000000000</double>
             </property>
            </widget>
           </item>

+ 2 - 0
trackpoint-app/include/EditWidget.hpp

@@ -46,6 +46,8 @@ private slots:
   void setActionPointSettings(std::string identifier);
   void deleteCurrentTrackPoint();
   void exportProject();
+  void changePositions();
+  void setPositionEditing(bool mode);
 
 private:
   Ui::EditWidget* ui;

+ 1 - 0
trackpoint-app/include/TrackPoint.hpp

@@ -13,6 +13,7 @@ public:
   osg::Vec3 getNormalModifier();
   osg::Vec3 getTrackPoint();
   void updateNormalModifier(osg::Vec3 normalModifier);
+  void updatePositions(osg::Vec3 origin);
 
 protected:
   osg::ref_ptr<osg::MatrixTransform> _translationGroup;

+ 28 - 7
trackpoint-app/src/EditWidget.cpp

@@ -21,6 +21,9 @@ EditWidget::EditWidget(QWidget* parent): QWidget(parent), ui(new Ui::EditWidget)
   QObject::connect(ui->selectionToolButton, &QToolButton::clicked, this, [=](){ this->selectTool(SelectionTool); });
   QObject::connect(ui->tabWidget, &QTabWidget::currentChanged, this, &EditWidget::tabChanged);
   // Modifiers
+  QObject::connect(ui->anchorX, &QDoubleSpinBox::valueChanged, this, &EditWidget::changePositions);
+  QObject::connect(ui->anchorY, &QDoubleSpinBox::valueChanged, this, &EditWidget::changePositions);
+  QObject::connect(ui->anchorZ, &QDoubleSpinBox::valueChanged, this, &EditWidget::changePositions);
   QObject::connect(ui->normalModX, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
   QObject::connect(ui->normalModY, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
   QObject::connect(ui->normalModZ, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
@@ -49,9 +52,9 @@ EditWidget::~EditWidget() {
 }
 
 void EditWidget::updatePositions(osg::Vec3 point) {
-  ui->anchorX->setText(QString::number(point.x()));
-  ui->anchorY->setText(QString::number(point.y()));
-  ui->anchorZ->setText(QString::number(point.z()));
+  ui->anchorX->setValue(point.x());
+  ui->anchorY->setValue(point.y());
+  ui->anchorZ->setValue(point.z());
 }
 
 void EditWidget::updateNormals(osg::Vec3 normal) {
@@ -62,9 +65,9 @@ void EditWidget::updateNormals(osg::Vec3 normal) {
 
 void EditWidget::invalidatePositions() {
   ui->deleteTrackPoint->setEnabled(false);
-  ui->anchorX->setText("-");
-  ui->anchorY->setText("-");
-  ui->anchorZ->setText("-");
+  ui->anchorX->setValue(0.0f);
+  ui->anchorY->setValue(0.0f);
+  ui->anchorZ->setValue(0.0f);
   ui->normalX->setText("-");
   ui->normalY->setText("-");
   ui->normalZ->setText("-");
@@ -170,14 +173,16 @@ void EditWidget::selectTool(Tool tool) {
       ui->insertionToolButton->setChecked(true);
       ui->selectionToolButton->setChecked(false);
       MainWindow::getInstance()->getOsgWidget()->getPicker()->setSelection(true);
-      invalidatePositions();
       resetAllSettings();
+      invalidatePositions();
+      setPositionEditing(true);
       break;
     }
     case SelectionTool: {
       ui->insertionToolButton->setChecked(false);
       ui->selectionToolButton->setChecked(true);
       MainWindow::getInstance()->getOsgWidget()->getPicker()->setSelection(false);
+      setPositionEditing(false);
       break;
     }
   }
@@ -371,3 +376,19 @@ void EditWidget::exportProject() {
   std::string exportFile = fileName.toUtf8().constData();
   MainWindow::getInstance()->getStore()->exportProject(exportFile, settings);
 }
+
+void EditWidget::changePositions() {
+  osg::Vec3 origin = osg::Vec3(ui->anchorX->value(), ui->anchorY->value(), ui->anchorZ->value());
+  if (selectedPoint >= 0) {
+    ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
+    MainWindow::getInstance()->getStore()->getTrackPointById(selectedPoint, activeTrackingSystem)->updatePositions(origin);
+    MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
+    MainWindow::getInstance()->getStore()->projectModified();
+  }
+}
+
+void EditWidget::setPositionEditing(bool mode) {
+  ui->anchorX->setReadOnly(mode);
+  ui->anchorY->setReadOnly(mode);
+  ui->anchorZ->setReadOnly(mode);
+}

+ 5 - 1
trackpoint-app/src/TrackPoint.cpp

@@ -17,7 +17,7 @@ osg::Vec3 TrackPoint::getTranslation() {
 osg::Vec3 TrackPoint::getRotation() {
   osg::Vec3 start = osg::Vec3(0.0f, 0.0f, 1.0f);
   osg::Matrix modifierRotation = osg::Matrix::rotate(_normalModifier.x() * M_PI / 180, osg::Vec3(1.0f, 0.0f, 0.0f), _normalModifier.y() * M_PI / 180, osg::Vec3(0.0f, 1.0f, 0.0f), _normalModifier.z() * M_PI / 180, osg::Vec3(0.0f, 0.0f, 1.0f));
-  osg::Vec3 finalNormal = modifierRotation.preMult(normal);
+  osg::Vec3 finalNormal = modifierRotation.preMult(_normal);
 
   // From https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
   osg::Quat quat = osg::Quat(0.0f, 0.0f, 0.0f, 0.0f);
@@ -57,3 +57,7 @@ osg::Vec3 TrackPoint::getTrackPoint() {
 void TrackPoint::updateNormalModifier(osg::Vec3 normalModifier) {
   _normalModifier = normalModifier;
 }
+
+void TrackPoint::updatePositions(osg::Vec3 origin) {
+  _origin = origin;
+}