Browse Source

Disable export and warn user if openscad is unavailable (Closes #13)

Johannes Kreutz 2 years ago
parent
commit
683b3806e4

+ 3 - 3
trackpoint-app/gui/EditWidget.ui

@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>508</width>
-    <height>932</height>
+    <height>914</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -40,7 +40,7 @@
         <x>0</x>
         <y>0</y>
         <width>506</width>
-        <height>930</height>
+        <height>912</height>
        </rect>
       </property>
       <layout class="QVBoxLayout" name="verticalLayout_7">
@@ -555,7 +555,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QGroupBox" name="export_2">
+        <widget class="QGroupBox" name="exportGroup">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
            <horstretch>0</horstretch>

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

@@ -8,5 +8,6 @@
 
 class OpenScadRenderer {
 public:
+  static bool openScadAvailable();
   void renderOptiTrack(std::vector<OptiTrackPoint*> points);
 };

+ 4 - 0
trackpoint-app/src/EditWidget.cpp

@@ -6,6 +6,7 @@
 #include "OSGWidget.hpp"
 #include "PickHandler.hpp"
 #include "TrackPointRenderer.hpp"
+#include "OpenScadRenderer.hpp"
 
 // Include dependencies
 #include <QFileDialog>
@@ -30,6 +31,9 @@ EditWidget::EditWidget(QWidget* parent): QWidget(parent), ui(new Ui::EditWidget)
   QObject::connect(ui->deleteTrackPoint, &QPushButton::clicked, this, &EditWidget::deleteCurrentTrackPoint);
   // Export button
   QObject::connect(ui->exportButton, &QPushButton::clicked, this, &EditWidget::exportProject);
+  if (!OpenScadRenderer::openScadAvailable()) {
+    ui->exportGroup->setEnabled(false);
+  }
 }
 
 EditWidget::~EditWidget() {

+ 11 - 0
trackpoint-app/src/OpenScadRenderer.cpp

@@ -8,6 +8,11 @@
 #include <iostream>
 #include <fstream>
 #include <filesystem>
+#include <cstdio>
+#include <memory>
+#include <stdexcept>
+#include <string>
+#include <array>
 
 const char* openScadBase =
   "$fn = 100;\n"
@@ -15,6 +20,12 @@ const char* openScadBase =
   "translate(translation) rotate(rotation) cylinder(length, radius, radius, false);\n"
   "}\n";
 
+bool OpenScadRenderer::openScadAvailable() {
+  std::string path = openScadPath + " -v";
+  int result = system(path.c_str());
+  return result == 0;
+}
+
 void OpenScadRenderer::renderOptiTrack(std::vector<OptiTrackPoint*> points) {
   std::ofstream scadFile;
   scadFile.open(std::filesystem::temp_directory_path().u8string() + fileDelimiter + "trackpointapp_export_optitrack.scad");

+ 9 - 0
trackpoint-app/src/main.cpp

@@ -1,17 +1,26 @@
 // Include dependencies
 #include <QApplication>
 #include <QSurfaceFormat>
+#include <QMessageBox>
 
 #ifdef INCLUDE_PLUGINS
 #include <QtPlugin>
 Q_IMPORT_PLUGIN (QXcbIntegrationPlugin);
 #endif
 
+// Include modules
 #include "MainWindow.hpp"
+#include "OpenScadRenderer.hpp"
 
 int main(int argc, char** argv) {
     QApplication application(argc, argv);
 
+    if (!OpenScadRenderer::openScadAvailable()) {
+      QMessageBox openScadErrorBox;
+      openScadErrorBox.setText("Unable to find OpenSCAD! Either it is not installed or not in its default location. Exporting will be disabled.");
+      openScadErrorBox.exec();
+    }
+
     QSurfaceFormat format;
     format.setVersion(2, 1);
     format.setProfile(QSurfaceFormat::CompatibilityProfile);