EditWidget.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  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 "OpenScadRenderer.hpp"
  9. // Include dependencies
  10. #include <sstream>
  11. #include <QFileDialog>
  12. EditWidget::EditWidget(QWidget* parent): QWidget(parent), ui(new Ui::EditWidget) {
  13. ui->setupUi(this);
  14. ui->actionPointDoubleIdentifier->setVisible(false);
  15. ui->insertionToolButton->setCheckable(true);
  16. ui->insertionToolButton->setChecked(true);
  17. QObject::connect(ui->insertionToolButton, &QToolButton::clicked, this, [=](){ this->selectTool(InsertionTool); });
  18. ui->selectionToolButton->setCheckable(true);
  19. QObject::connect(ui->selectionToolButton, &QToolButton::clicked, this, [=](){ this->selectTool(SelectionTool); });
  20. QObject::connect(ui->tabWidget, &QTabWidget::currentChanged, this, &EditWidget::tabChanged);
  21. // Modifiers
  22. QObject::connect(ui->anchorX, &QDoubleSpinBox::valueChanged, this, &EditWidget::changePositions);
  23. QObject::connect(ui->anchorY, &QDoubleSpinBox::valueChanged, this, &EditWidget::changePositions);
  24. QObject::connect(ui->anchorZ, &QDoubleSpinBox::valueChanged, this, &EditWidget::changePositions);
  25. QObject::connect(ui->normalModX, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
  26. QObject::connect(ui->normalModY, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
  27. QObject::connect(ui->normalModZ, &QDoubleSpinBox::valueChanged, this, &EditWidget::updateNormalModifier);
  28. QObject::connect(ui->rotateAroundNormal, &QDoubleSpinBox::valueChanged, this, [=](){ this->updateNormalRotation(false); });
  29. QObject::connect(ui->compensation, &QCheckBox::stateChanged, this, [=](){ this->updateCompensation(false); });
  30. QObject::connect(ui->modifierReset, &QPushButton::clicked, this, &EditWidget::resetNormalModifier);
  31. // OptiTrack settings
  32. QObject::connect(ui->optiTrackLength, &QDoubleSpinBox::valueChanged, this, [=](){ this->updateOptiTrackSettings(false); });
  33. QObject::connect(ui->optiTrackRadius, &QDoubleSpinBox::valueChanged, this, [=](){ this->updateOptiTrackSettings(false); });
  34. QObject::connect(ui->optiTrackLoadDefaults, &QPushButton::clicked, this, [=](){ this->updateOptiTrackSettings(true); });
  35. // EMF Track settings
  36. QObject::connect(ui->emfTrackWidth, &QDoubleSpinBox::valueChanged, this, [=](){ this->updateEMFTrackSettings(false); });
  37. QObject::connect(ui->emfTrackHeight, &QDoubleSpinBox::valueChanged, this, [=](){ this->updateEMFTrackSettings(false); });
  38. QObject::connect(ui->emfTrackDepth, &QDoubleSpinBox::valueChanged, this, [=](){ this->updateEMFTrackSettings(false); });
  39. QObject::connect(ui->emfTrackLoadDefaults, &QPushButton::clicked, this, [=](){ this->updateEMFTrackSettings(true); });
  40. // StramVRTrack settings
  41. QObject::connect(ui->steamVrTrackLength, &QDoubleSpinBox::valueChanged, this, [=](){ this->updateSteamVRTrackSettings(false); });
  42. QObject::connect(ui->steamVrTrackLoadDefaults, &QPushButton::clicked, this, [=](){ this->updateSteamVRTrackSettings(true); });
  43. // Action point settings
  44. QObject::connect(ui->actionPointIdentifier, &QLineEdit::textChanged, this, &EditWidget::updateActionPointSettings);
  45. QObject::connect(ui->actionPointLoadDefaults, &QPushButton::clicked, this, &EditWidget::resetActionPointSettings);
  46. // Delete button
  47. QObject::connect(ui->deleteTrackPoint, &QPushButton::clicked, this, &EditWidget::deleteCurrentTrackPoint);
  48. // Export button
  49. QObject::connect(ui->exportButton, &QPushButton::clicked, this, &EditWidget::exportProject);
  50. if (!OpenScadRenderer::openScadAvailable()) {
  51. ui->exportGroup->setEnabled(false);
  52. }
  53. ui->exportProgress->setVisible(false);
  54. ui->exportLabel->setVisible(false);
  55. }
  56. EditWidget::~EditWidget() {
  57. delete ui;
  58. }
  59. void EditWidget::updatePositions(osg::Vec3 point) {
  60. ui->anchorX->setValue(point.x());
  61. ui->anchorY->setValue(point.y());
  62. ui->anchorZ->setValue(point.z());
  63. }
  64. void EditWidget::updateNormals(osg::Vec3 normal) {
  65. ui->normalX->setText(QString::number(normal.x()));
  66. ui->normalY->setText(QString::number(normal.y()));
  67. ui->normalZ->setText(QString::number(normal.z()));
  68. }
  69. void EditWidget::invalidatePositions() {
  70. ui->deleteTrackPoint->setEnabled(false);
  71. ui->anchorX->setValue(0.0f);
  72. ui->anchorY->setValue(0.0f);
  73. ui->anchorZ->setValue(0.0f);
  74. ui->normalX->setText("-");
  75. ui->normalY->setText("-");
  76. ui->normalZ->setText("-");
  77. }
  78. ActiveTrackingSystem EditWidget::getSelectedTrackingSystem() {
  79. switch(ui->tabWidget->currentIndex()) {
  80. case 0: {
  81. return OptiTrack;
  82. }
  83. case 1: {
  84. return EMFTrack;
  85. }
  86. case 2: {
  87. return SteamVRTrack;
  88. }
  89. default: {
  90. return ActionPoints;
  91. }
  92. }
  93. }
  94. void EditWidget::setSelection(int id) {
  95. selectedPoint = id;
  96. ui->deleteTrackPoint->setEnabled(true);
  97. TrackPoint* point;
  98. switch(ui->tabWidget->currentIndex()) {
  99. case 0: {
  100. OptiTrackPoint* optiPoint = MainWindow::getInstance()->getStore()->getOptiTrackPoints()[id];
  101. setOptiTrackSettings(optiPoint->getLength(), optiPoint->getRadius());
  102. point = static_cast<TrackPoint*>(optiPoint);
  103. break;
  104. }
  105. case 1: {
  106. EMFTrackPoint* emfPoint = MainWindow::getInstance()->getStore()->getEMFTrackPoints()[id];
  107. setEMFTrackSettings(emfPoint->getWidth(), emfPoint->getHeight(), emfPoint->getDepth());
  108. point = static_cast<TrackPoint*>(emfPoint);
  109. break;
  110. }
  111. case 2: {
  112. SteamVRTrackPoint* steamVrPoint = MainWindow::getInstance()->getStore()->getSteamVRTrackPoints()[id];
  113. setSteamVRTrackSettings(steamVrPoint->getLength());
  114. point = static_cast<TrackPoint*>(steamVrPoint);
  115. break;
  116. }
  117. default: {
  118. ActionPoint* actionPoint = MainWindow::getInstance()->getStore()->getActionPoints()[id];
  119. setActionPointSettings(actionPoint->getIdentifier());
  120. point = static_cast<TrackPoint*>(actionPoint);
  121. break;
  122. }
  123. }
  124. updatePositions(point->getTranslation());
  125. updateNormals(point->getNormal());
  126. setNormalModifier(point->getNormalModifier());
  127. }
  128. int EditWidget::getSelectedPoint() {
  129. return selectedPoint;
  130. }
  131. void EditWidget::updateTrackpointCount() {
  132. int count;
  133. count = MainWindow::getInstance()->getStore()->getCount(OptiTrack);
  134. {
  135. QString countString("TRACKPOINTS SET: ");
  136. countString.append(QString::number(count));
  137. ui->optiTrackCount->setText(countString);
  138. }
  139. count = MainWindow::getInstance()->getStore()->getCount(EMFTrack);
  140. {
  141. QString countString("TRACKPOINTS SET: ");
  142. countString.append(QString::number(count));
  143. ui->emfTrackCount->setText(countString);
  144. }
  145. count = MainWindow::getInstance()->getStore()->getCount(SteamVRTrack);
  146. {
  147. QString countString("TRACKPOINTS SET: ");
  148. countString.append(QString::number(count));
  149. ui->steamVrTrackCount->setText(countString);
  150. }
  151. count = MainWindow::getInstance()->getStore()->getCount(ActionPoints);
  152. {
  153. QString countString("ACTION POINTS SET: ");
  154. countString.append(QString::number(count));
  155. ui->actionPointCount->setText(countString);
  156. }
  157. }
  158. void EditWidget::showEvent(QShowEvent* event) {
  159. QWidget::showEvent(event);
  160. resetAllSettings();
  161. }
  162. void EditWidget::resetAllSettings() {
  163. selectedPoint = -1;
  164. resetNormalModifier();
  165. updateOptiTrackSettings(true);
  166. updateEMFTrackSettings(true);
  167. updateSteamVRTrackSettings(true);
  168. resetActionPointSettings();
  169. }
  170. void EditWidget::setExportAvailable(bool available) {
  171. ui->exportButton->setVisible(available);
  172. ui->exportProgress->setVisible(!available);
  173. ui->exportLabel->setVisible(!available);
  174. }
  175. void EditWidget::setExportStatus(int jobs, int done) {
  176. ui->exportProgress->setValue(done);
  177. std::stringstream text;
  178. text << "Export running: " << done << " of " << jobs << " finished.";
  179. ui->exportLabel->setText(QString::fromUtf8(text.str().c_str()));
  180. }
  181. void EditWidget::selectTool(Tool tool) {
  182. switch(tool) {
  183. case InsertionTool: {
  184. ui->insertionToolButton->setChecked(true);
  185. ui->selectionToolButton->setChecked(false);
  186. MainWindow::getInstance()->getOsgWidget()->getPicker()->setSelection(true);
  187. resetAllSettings();
  188. invalidatePositions();
  189. setPositionEditing(true);
  190. break;
  191. }
  192. case SelectionTool: {
  193. ui->insertionToolButton->setChecked(false);
  194. ui->selectionToolButton->setChecked(true);
  195. MainWindow::getInstance()->getOsgWidget()->getPicker()->setSelection(false);
  196. setPositionEditing(false);
  197. break;
  198. }
  199. }
  200. }
  201. void EditWidget::tabChanged(int index) {
  202. if (selectedPoint < 0) {
  203. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  204. }
  205. selectedPoint = -1;
  206. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  207. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  208. }
  209. void EditWidget::updateNormalModifier() {
  210. osg::Vec3 modifier = osg::Vec3(ui->normalModX->value(), ui->normalModY->value(), ui->normalModZ->value());
  211. if (selectedPoint < 0) {
  212. MainWindow::getInstance()->getStore()->updateNormalModifier(modifier);
  213. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  214. } else {
  215. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  216. MainWindow::getInstance()->getStore()->getTrackPointById(selectedPoint, activeTrackingSystem)->updateNormalModifier(modifier);
  217. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  218. MainWindow::getInstance()->getStore()->projectModified();
  219. }
  220. }
  221. void EditWidget::resetNormalModifier() {
  222. osg::Vec3 modifier = osg::Vec3(0.0f, 0.0f, 0.0f);
  223. ui->normalModX->setValue(0.0f);
  224. ui->normalModY->setValue(0.0f);
  225. ui->normalModZ->setValue(0.0f);
  226. if (selectedPoint < 0) {
  227. MainWindow::getInstance()->getStore()->updateNormalModifier(modifier);
  228. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  229. } else {
  230. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  231. MainWindow::getInstance()->getStore()->getTrackPointById(selectedPoint, activeTrackingSystem)->updateNormalModifier(modifier);
  232. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  233. MainWindow::getInstance()->getStore()->projectModified();
  234. }
  235. }
  236. void EditWidget::setNormalModifier(osg::Vec3 normalModifier) {
  237. ui->normalModX->setValue(normalModifier.x());
  238. ui->normalModY->setValue(normalModifier.y());
  239. ui->normalModZ->setValue(normalModifier.z());
  240. }
  241. void EditWidget::updateNormalRotation(bool reset) {
  242. float normalRotation;
  243. if (reset) {
  244. normalRotation = 0.0f;
  245. } else {
  246. normalRotation = ui->rotateAroundNormal->value();
  247. }
  248. if (selectedPoint < 0) {
  249. MainWindow::getInstance()->getStore()->updateNormalRotation(normalRotation);
  250. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  251. } else {
  252. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  253. MainWindow::getInstance()->getStore()->getTrackPointById(selectedPoint, activeTrackingSystem)->updateNormalRotation(normalRotation);
  254. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  255. MainWindow::getInstance()->getStore()->projectModified();
  256. }
  257. }
  258. void EditWidget::setNormalRotation(float normalRotation) {
  259. ui->rotateAroundNormal->value();
  260. }
  261. void EditWidget::updateCompensation(bool reset) {
  262. bool compensation;
  263. if (reset) {
  264. compensation = true;
  265. } else {
  266. compensation = ui->compensation->checkState() == Qt::Checked ? true : false;
  267. }
  268. if (selectedPoint < 0) {
  269. MainWindow::getInstance()->getStore()->updateCompensation(compensation);
  270. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  271. } else {
  272. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  273. MainWindow::getInstance()->getStore()->getTrackPointById(selectedPoint, activeTrackingSystem)->updateCompensation(compensation);
  274. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  275. MainWindow::getInstance()->getStore()->projectModified();
  276. }
  277. }
  278. void EditWidget::setCompensation(bool compensation) {
  279. if (compensation) {
  280. ui->compensation->setCheckState(Qt::Checked);
  281. } else {
  282. ui->compensation->setCheckState(Qt::Unchecked);
  283. }
  284. }
  285. void EditWidget::updateOptiTrackSettings(bool reset) {
  286. OptiTrackSettings settings;
  287. if (reset) {
  288. settings = {OPTITRACK_DEFAULT_LENGTH, OPTITRACK_DEFAULT_RADIUS};
  289. setOptiTrackSettings(OPTITRACK_DEFAULT_LENGTH, OPTITRACK_DEFAULT_RADIUS);
  290. } else {
  291. settings = {ui->optiTrackLength->value(), ui->optiTrackRadius->value()};
  292. }
  293. if (selectedPoint < 0) {
  294. MainWindow::getInstance()->getStore()->updateOptiTrackSettings(settings);
  295. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  296. } else {
  297. MainWindow::getInstance()->getStore()->getOptiTrackPoints()[selectedPoint]->updateOptiTrackSettings(settings);
  298. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(OptiTrack);
  299. MainWindow::getInstance()->getStore()->projectModified();
  300. }
  301. }
  302. void EditWidget::setOptiTrackSettings(double length, double radius) {
  303. ui->optiTrackLength->setValue(length);
  304. ui->optiTrackRadius->setValue(radius);
  305. }
  306. void EditWidget::updateEMFTrackSettings(bool reset) {
  307. EMFTrackSettings settings;
  308. if (reset) {
  309. settings = {EMFTRACK_DEFAULT_WIDTH, EMFTRACK_DEFAULT_HEIGHT, EMFTRACK_DEFAULT_DEPTH};
  310. setEMFTrackSettings(EMFTRACK_DEFAULT_WIDTH, EMFTRACK_DEFAULT_HEIGHT, EMFTRACK_DEFAULT_DEPTH);
  311. } else {
  312. settings = {ui->emfTrackWidth->value(), ui->emfTrackHeight->value(), ui->emfTrackDepth->value()};
  313. }
  314. if (selectedPoint < 0) {
  315. MainWindow::getInstance()->getStore()->updateEMFTrackSettings(settings);
  316. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  317. } else {
  318. MainWindow::getInstance()->getStore()->getEMFTrackPoints()[selectedPoint]->updateEMFTrackSettings(settings);
  319. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(EMFTrack);
  320. MainWindow::getInstance()->getStore()->projectModified();
  321. }
  322. }
  323. void EditWidget::setEMFTrackSettings(double width, double height, double depth) {
  324. ui->emfTrackWidth->setValue(width);
  325. ui->emfTrackHeight->setValue(height);
  326. ui->emfTrackDepth->setValue(depth);
  327. }
  328. void EditWidget::updateSteamVRTrackSettings(bool reset) {
  329. SteamVRTrackSettings settings;
  330. if (reset) {
  331. settings = {STEAMVR_DEFAULT_LENGTH};
  332. setSteamVRTrackSettings(STEAMVR_DEFAULT_LENGTH);
  333. } else {
  334. settings = {ui->steamVrTrackLength->value()};
  335. }
  336. if (selectedPoint < 0) {
  337. MainWindow::getInstance()->getStore()->updateSteamVRTrackSettings(settings);
  338. MainWindow::getInstance()->getOsgWidget()->getPicker()->updateRenderer();
  339. } else {
  340. MainWindow::getInstance()->getStore()->getSteamVRTrackPoints()[selectedPoint]->updateSteamVRTrackSettings(settings);
  341. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(SteamVRTrack);
  342. MainWindow::getInstance()->getStore()->projectModified();
  343. }
  344. }
  345. void EditWidget::setSteamVRTrackSettings(double length) {
  346. ui->steamVrTrackLength->setValue(length);
  347. }
  348. void EditWidget::updateActionPointSettings(QString qinput) {
  349. std::string input = qinput.toUtf8().constData();
  350. if (MainWindow::getInstance()->getStore()->actionPointIdentifierInUse(input, selectedPoint) > 0) {
  351. ui->actionPointDoubleIdentifier->setVisible(true);
  352. } else {
  353. ui->actionPointDoubleIdentifier->setVisible(false);
  354. QString qtext = ui->actionPointIdentifier->text();
  355. ActionPointSettings settings = {qtext.toUtf8().constData()};
  356. if (selectedPoint < 0) {
  357. MainWindow::getInstance()->getStore()->updateActionPointSettings(settings);
  358. } else {
  359. MainWindow::getInstance()->getStore()->getActionPoints()[selectedPoint]->updateActionPointSettings(settings);
  360. MainWindow::getInstance()->getStore()->projectModified();
  361. }
  362. }
  363. }
  364. void EditWidget::resetActionPointSettings() {
  365. int iterator = 0;
  366. ActionPointSettings settings;
  367. std::string candidate;
  368. while (true) {
  369. candidate = "point";
  370. candidate += std::to_string(iterator);
  371. unsigned int result = MainWindow::getInstance()->getStore()->actionPointIdentifierInUse(candidate, selectedPoint);
  372. if (result == 0) {
  373. settings = {candidate};
  374. break;
  375. }
  376. iterator++;
  377. }
  378. ui->actionPointIdentifier->setText(QString::fromStdString(candidate));
  379. if (selectedPoint < 0) {
  380. MainWindow::getInstance()->getStore()->updateActionPointSettings(settings);
  381. } else {
  382. MainWindow::getInstance()->getStore()->getActionPoints()[selectedPoint]->updateActionPointSettings(settings);
  383. MainWindow::getInstance()->getStore()->projectModified();
  384. }
  385. }
  386. void EditWidget::setActionPointSettings(std::string identifier) {
  387. ui->actionPointIdentifier->setText(QString::fromStdString(identifier));
  388. if (MainWindow::getInstance()->getStore()->actionPointIdentifierInUse(identifier, selectedPoint) > 0) {
  389. ui->actionPointDoubleIdentifier->setVisible(true);
  390. } else {
  391. ui->actionPointDoubleIdentifier->setVisible(false);
  392. }
  393. }
  394. void EditWidget::deleteCurrentTrackPoint() {
  395. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  396. MainWindow::getInstance()->getStore()->removeTrackPoint(selectedPoint, activeTrackingSystem);
  397. selectedPoint = -1;
  398. switch(activeTrackingSystem) {
  399. case OptiTrack: {
  400. updateOptiTrackSettings(true);
  401. break;
  402. }
  403. case EMFTrack: {
  404. updateEMFTrackSettings(true);
  405. break;
  406. }
  407. case SteamVRTrack: {
  408. updateSteamVRTrackSettings(true);
  409. break;
  410. }
  411. case ActionPoints: {
  412. resetActionPointSettings();
  413. break;
  414. }
  415. }
  416. resetNormalModifier();
  417. invalidatePositions();
  418. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  419. }
  420. void EditWidget::exportProject() {
  421. Qt::CheckState optiTrackSelected = ui->optiTrackCkeckbox->checkState();
  422. Qt::CheckState emfTrackSelected = ui->emfTrackCheckbox->checkState();
  423. Qt::CheckState steamVrTrackSelected = ui->steamVrCheckbox->checkState();
  424. ExportSettings settings = {optiTrackSelected == Qt::Checked, emfTrackSelected == Qt::Checked, steamVrTrackSelected == Qt::Checked};
  425. QString fileName = QFileDialog::getSaveFileName(this, tr("Export your TrackpointApp Project"), "", tr("3MF Files (*.3mf)"));
  426. std::string exportFile = fileName.toUtf8().constData();
  427. MainWindow::getInstance()->getStore()->exportProject(exportFile, settings);
  428. }
  429. void EditWidget::changePositions() {
  430. osg::Vec3 origin = osg::Vec3(ui->anchorX->value(), ui->anchorY->value(), ui->anchorZ->value());
  431. if (selectedPoint >= 0) {
  432. ActiveTrackingSystem activeTrackingSystem = getSelectedTrackingSystem();
  433. MainWindow::getInstance()->getStore()->getTrackPointById(selectedPoint, activeTrackingSystem)->updatePositions(origin);
  434. MainWindow::getInstance()->getOsgWidget()->getPointRenderer()->render(activeTrackingSystem);
  435. MainWindow::getInstance()->getStore()->projectModified();
  436. }
  437. }
  438. void EditWidget::setPositionEditing(bool mode) {
  439. ui->anchorX->setReadOnly(mode);
  440. ui->anchorY->setReadOnly(mode);
  441. ui->anchorZ->setReadOnly(mode);
  442. }