EditWidget.cpp 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. // Include own headers
  2. #include "EditWidget.hpp"
  3. #include "../gui/ui_EditWidget.h"
  4. // Include modules
  5. #include "OSGWidget.hpp"
  6. #include "PickHandler.hpp"
  7. #include "TrackPointRenderer.hpp"
  8. // Include dependencies
  9. #include <QFileDialog>
  10. EditWidget::EditWidget(QWidget* parent): QWidget(parent), ui(new Ui::EditWidget) {
  11. ui->setupUi(this);
  12. ui->insertionToolButton->setCheckable(true);
  13. ui->insertionToolButton->setChecked(true);
  14. QObject::connect(ui->insertionToolButton, &QToolButton::clicked, this, [=](){ this->selectTool(InsertionTool); });
  15. ui->selectionToolButton->setCheckable(true);
  16. QObject::connect(ui->selectionToolButton, &QToolButton::clicked, this, [=](){ this->selectTool(SelectionTool); });
  17. // Modifiers
  18. QObject::connect(ui->normalModX, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
  19. QObject::connect(ui->normalModY, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
  20. QObject::connect(ui->normalModZ, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
  21. QObject::connect(ui->modifierReset, &QPushButton::clicked, this, &EditWidget::resetNormalModifier);
  22. // OptiTrack settings
  23. QObject::connect(ui->optiTrackLength, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateOptiTrackSettings);
  24. QObject::connect(ui->optiTrackRadius, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateOptiTrackSettings);
  25. QObject::connect(ui->optiTrackLoadDefaults, &QPushButton::clicked, this, &EditWidget::resetOptiTrackSettings);
  26. // Delete button
  27. QObject::connect(ui->deleteTrackPoint, &QPushButton::clicked, this, &EditWidget::deleteCurrentTrackPoint);
  28. // Export button
  29. QObject::connect(ui->exportButton, &QPushButton::clicked, this, &EditWidget::exportProject);
  30. }
  31. EditWidget::~EditWidget() {
  32. delete ui;
  33. }
  34. void EditWidget::updatePositions(osg::Vec3 point) {
  35. ui->anchorX->setText(QString::number(point.x()));
  36. ui->anchorY->setText(QString::number(point.y()));
  37. ui->anchorZ->setText(QString::number(point.z()));
  38. }
  39. void EditWidget::updateNormals(osg::Vec3 normal) {
  40. ui->normalX->setText(QString::number(normal.x()));
  41. ui->normalY->setText(QString::number(normal.y()));
  42. ui->normalZ->setText(QString::number(normal.z()));
  43. }
  44. void EditWidget::invalidatePositions() {
  45. ui->deleteTrackPoint->setEnabled(false);
  46. ui->anchorX->setText("-");
  47. ui->anchorY->setText("-");
  48. ui->anchorZ->setText("-");
  49. ui->normalX->setText("-");
  50. ui->normalY->setText("-");
  51. ui->normalZ->setText("-");
  52. }
  53. ActiveTrackingSystem EditWidget::getSelectedTrackingSystem() {
  54. switch(ui->tabWidget->currentIndex()) {
  55. case 0: {
  56. return OptiTrack;
  57. }
  58. case 1: {
  59. return EMFTrack;
  60. }
  61. case 2: {
  62. return SteamVRTrack;
  63. }
  64. default: {
  65. return ActionPoints;
  66. }
  67. }
  68. }
  69. void EditWidget::setSelection(int id) {
  70. selectedPoint = id;
  71. ui->deleteTrackPoint->setEnabled(true);
  72. switch(ui->tabWidget->currentIndex()) {
  73. case 0: {
  74. OptiTrackPoint* point = MainWindow::getInstance()->getStore()->getOptiTrackPoints()[id];
  75. updatePositions(point->getTranslation());
  76. updateNormals(point->getNormal());
  77. setNormalModifier(point->getNormalModifier());
  78. setOptiTrackSettings(point->getLength(), point->getRadius());
  79. break;
  80. }
  81. case 1: {
  82. break;
  83. }
  84. case 2: {
  85. break;
  86. }
  87. default: {
  88. break;
  89. }
  90. }
  91. }
  92. int EditWidget::getSelectedPoint() {
  93. return selectedPoint;
  94. }
  95. void EditWidget::updateTrackpointCount() {
  96. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  97. int count = MainWindow::getInstance()->getStore()->getCount(activeTrackingSystem);
  98. switch(activeTrackingSystem) {
  99. case OptiTrack: {
  100. QString countString("TRACKPOINTS SET: ");
  101. countString.append(QString::number(count));
  102. ui->optiTrackCount->setText(countString);
  103. break;
  104. }
  105. case EMFTrack: {
  106. break;
  107. }
  108. case SteamVRTrack: {
  109. break;
  110. }
  111. case ActionPoints: {
  112. break;
  113. }
  114. }
  115. }
  116. void EditWidget::showEvent(QShowEvent* event) {
  117. QWidget::showEvent(event);
  118. resetOptiTrackSettings();
  119. }
  120. void EditWidget::selectTool(Tool tool) {
  121. switch(tool) {
  122. case InsertionTool: {
  123. ui->insertionToolButton->setChecked(true);
  124. ui->selectionToolButton->setChecked(false);
  125. MainWindow::getInstance()->getOsgWidget()->getPicker()->setSelection(true);
  126. invalidatePositions();
  127. resetNormalModifier();
  128. resetOptiTrackSettings();
  129. selectedPoint = -1;
  130. break;
  131. }
  132. case SelectionTool: {
  133. ui->insertionToolButton->setChecked(false);
  134. ui->selectionToolButton->setChecked(true);
  135. MainWindow::getInstance()->getOsgWidget()->getPicker()->setSelection(false);
  136. break;
  137. }
  138. }
  139. }
  140. void EditWidget::updateNormalModifier() {
  141. osg::Vec3 modifier = osg::Vec3(ui->normalModX->value(), ui->normalModY->value(), ui->normalModZ->value());
  142. if (selectedPoint < 0) {
  143. MainWindow::getInstance()->getStore()->updateNormalModifier(modifier);
  144. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  145. } else {
  146. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  147. MainWindow::getInstance()->getStore()->getTrackPointById(selectedPoint, activeTrackingSystem)->updateNormalModifier(modifier);
  148. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  149. }
  150. }
  151. void EditWidget::resetNormalModifier() {
  152. osg::Vec3 modifier = osg::Vec3(0.0f, 0.0f, 0.0f);
  153. ui->normalModX->setValue(0.0f);
  154. ui->normalModY->setValue(0.0f);
  155. ui->normalModZ->setValue(0.0f);
  156. if (selectedPoint < 0) {
  157. MainWindow::getInstance()->getStore()->updateNormalModifier(modifier);
  158. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  159. } else {
  160. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  161. MainWindow::getInstance()->getStore()->getTrackPointById(selectedPoint, activeTrackingSystem)->updateNormalModifier(modifier);
  162. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  163. }
  164. }
  165. void EditWidget::setNormalModifier(osg::Vec3 normalModifier) {
  166. ui->normalModX->setValue(normalModifier.x());
  167. ui->normalModY->setValue(normalModifier.y());
  168. ui->normalModZ->setValue(normalModifier.z());
  169. }
  170. void EditWidget::updateOptiTrackSettings() {
  171. OptiTrackSettings settings = {ui->optiTrackLength->value(), ui->optiTrackRadius->value()};
  172. if (selectedPoint < 0) {
  173. MainWindow::getInstance()->getStore()->updateOptiTrackSettings(settings);
  174. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  175. } else {
  176. MainWindow::getInstance()->getStore()->getOptiTrackPoints()[selectedPoint]->updateOptiTrackSettings(settings);
  177. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(OptiTrack);
  178. }
  179. }
  180. void EditWidget::resetOptiTrackSettings() {
  181. OptiTrackSettings settings = {OPTITRACK_DEFAULT_LENGTH, OPTITRACK_DEFAULT_RADIUS};
  182. ui->optiTrackLength->setValue(OPTITRACK_DEFAULT_LENGTH);
  183. ui->optiTrackRadius->setValue(OPTITRACK_DEFAULT_RADIUS);
  184. if (selectedPoint < 0) {
  185. MainWindow::getInstance()->getStore()->updateOptiTrackSettings(settings);
  186. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  187. } else {
  188. MainWindow::getInstance()->getStore()->getOptiTrackPoints()[selectedPoint]->updateOptiTrackSettings(settings);
  189. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(OptiTrack);
  190. }
  191. }
  192. void EditWidget::setOptiTrackSettings(double length, double radius) {
  193. ui->optiTrackLength->setValue(length);
  194. ui->optiTrackRadius->setValue(radius);
  195. }
  196. void EditWidget::deleteCurrentTrackPoint() {
  197. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  198. MainWindow::getInstance()->getStore()->removeTrackPoint(selectedPoint, activeTrackingSystem);
  199. selectedPoint = -1;
  200. switch(activeTrackingSystem) {
  201. case OptiTrack: {
  202. resetOptiTrackSettings();
  203. break;
  204. }
  205. case EMFTrack: {
  206. break;
  207. }
  208. case SteamVRTrack: {
  209. break;
  210. }
  211. case ActionPoints: {
  212. break;
  213. }
  214. }
  215. resetNormalModifier();
  216. invalidatePositions();
  217. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(OptiTrack);
  218. }
  219. void EditWidget::exportProject() {
  220. Qt::CheckState optiTrackSelected = ui->optiTrackCkeckbox->checkState();
  221. Qt::CheckState emfTrackSelected = ui->emfTrackCheckbox->checkState();
  222. Qt::CheckState steamVrTrackSelected = ui->steamVrCheckbox->checkState();
  223. ExportSettings settings = {optiTrackSelected == Qt::Checked, emfTrackSelected == Qt::Checked, steamVrTrackSelected == Qt::Checked};
  224. QString fileName = QFileDialog::getSaveFileName(this, tr("Export your TrackpointApp Project"), "", tr("3MF Files (*.3mf)"));
  225. std::string exportFile = fileName.toUtf8().constData();
  226. MainWindow::getInstance()->getStore()->exportProject(exportFile, settings);
  227. }