Browse Source

removed some files? Better OpenSCAD handling

Martin Herbers 6 years ago
parent
commit
a6c16d0fa3
42 changed files with 63 additions and 1994 deletions
  1. 4 2
      .gitignore
  2. 9 0
      .idea/artifacts/OLIP2_0_jar.xml
  3. 0 382
      .idea/workspace.xml
  4. 0 3
      out/production/OLIP2.0/META-INF/MANIFEST.MF
  5. 0 174
      out/production/OLIP2.0/OpenSCADFiles/acceleration.scad
  6. 0 205
      out/production/OLIP2.0/OpenSCADFiles/flip.scad
  7. 0 171
      out/production/OLIP2.0/OpenSCADFiles/iceFreezing.scad
  8. 0 167
      out/production/OLIP2.0/OpenSCADFiles/iceMelting.scad
  9. 0 217
      out/production/OLIP2.0/OpenSCADFiles/squeeze.scad
  10. 0 145
      out/production/OLIP2.0/OpenSCADFiles/tilt.scad
  11. 0 132
      out/production/OLIP2.0/OpenSCADFiles/weight.scad
  12. BIN
      out/production/OLIP2.0/pictures/acceleration.png
  13. BIN
      out/production/OLIP2.0/pictures/blue.PNG
  14. BIN
      out/production/OLIP2.0/pictures/cog.png
  15. BIN
      out/production/OLIP2.0/pictures/cyan.PNG
  16. BIN
      out/production/OLIP2.0/pictures/flame.png
  17. BIN
      out/production/OLIP2.0/pictures/flip.png
  18. BIN
      out/production/OLIP2.0/pictures/gray.PNG
  19. BIN
      out/production/OLIP2.0/pictures/green.PNG
  20. BIN
      out/production/OLIP2.0/pictures/information-icon-6086.png
  21. BIN
      out/production/OLIP2.0/pictures/lightBlue.PNG
  22. BIN
      out/production/OLIP2.0/pictures/loadingCircle.gif
  23. BIN
      out/production/OLIP2.0/pictures/offline_launch_icons.png
  24. BIN
      out/production/OLIP2.0/pictures/pressure.png
  25. BIN
      out/production/OLIP2.0/pictures/red.PNG
  26. BIN
      out/production/OLIP2.0/pictures/rotation.png
  27. BIN
      out/production/OLIP2.0/pictures/save.png
  28. BIN
      out/production/OLIP2.0/pictures/simpleAcceleration.png
  29. BIN
      out/production/OLIP2.0/pictures/simpleFlip.png
  30. BIN
      out/production/OLIP2.0/pictures/simpleSqueeze.png
  31. BIN
      out/production/OLIP2.0/pictures/simpleTemperatureFreeze.png
  32. BIN
      out/production/OLIP2.0/pictures/simpleTemperatureMelt.png
  33. BIN
      out/production/OLIP2.0/pictures/simpleTilt.png
  34. BIN
      out/production/OLIP2.0/pictures/simpleWeight.png
  35. BIN
      out/production/OLIP2.0/pictures/snowflake.png
  36. BIN
      out/production/OLIP2.0/pictures/temperature.png
  37. BIN
      out/production/OLIP2.0/pictures/tilt.png
  38. BIN
      out/production/OLIP2.0/pictures/weight.png
  39. 0 52
      out/production/OLIP2.0/ui/InformationWindow.fxml
  40. 0 228
      out/production/OLIP2.0/ui/MainWindow.fxml
  41. 0 81
      out/production/OLIP2.0/ui/SettingsWindow.fxml
  42. 50 35
      src/ui/Main.java

+ 4 - 2
.gitignore

@@ -2,8 +2,8 @@
 *.class
 
 #IntelliJ Files
-*/.idea/workspace.xml
-*/.idea/tasks.xml
+.idea/workspace.xml
+.idea/tasks.xml
 
 # Mobile Tools for Java (J2ME)
 .mtj.tmp/
@@ -12,6 +12,8 @@
 *.war
 *.ear
 
+out/
+
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 hs_err_pid*
 

+ 9 - 0
.idea/artifacts/OLIP2_0_jar.xml

@@ -0,0 +1,9 @@
+<component name="ArtifactManager">
+  <artifact type="jar" name="OLIP2.0:jar">
+    <output-path>$PROJECT_DIR$/out/artifacts/OLIP2_0_jar</output-path>
+    <root id="archive" name="OLIP2.0.jar">
+      <element id="module-output" name="OLIP2.0" />
+      <element id="extracted-dir" path="$PROJECT_DIR$/jars/jimStlMeshImporterJFX.jar" path-in-jar="/" />
+    </root>
+  </artifact>
+</component>

+ 0 - 382
.idea/workspace.xml

@@ -1,382 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ChangeListManager">
-    <list default="true" id="96b432d3-fd2a-402d-8f56-fa30254c4197" name="Default" comment="">
-      <change beforePath="$PROJECT_DIR$/src/controller/Export.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/controller/Export.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/pictures/offline_launch_icons.png" beforeDir="false" afterPath="$PROJECT_DIR$/src/pictures/offline_launch_icons.png" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/ui/Main.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/Main.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/ui/SettingsWindow.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/SettingsWindow.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/ui/UIController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/UIController.java" afterDir="false" />
-    </list>
-    <ignored path="$PROJECT_DIR$/out/" />
-    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
-    <option name="TRACKING_ENABLED" value="true" />
-    <option name="SHOW_DIALOG" value="false" />
-    <option name="HIGHLIGHT_CONFLICTS" value="true" />
-    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
-    <option name="LAST_RESOLUTION" value="IGNORE" />
-  </component>
-  <component name="FileEditorManager">
-    <leaf>
-      <file leaf-file-name="Controller.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/controller/Controller.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="153">
-              <caret line="13" column="13" selection-start-line="13" selection-start-column="13" selection-end-line="13" selection-end-column="13" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Export.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/controller/Export.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="4080">
-              <caret line="259" column="32" selection-start-line="259" selection-start-column="32" selection-end-line="259" selection-end-column="32" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="SettingsController.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/controller/SettingsController.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="153">
-              <caret line="16" column="13" selection-start-line="16" selection-start-column="13" selection-end-line="16" selection-end-column="13" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Instructions.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/model/Instructions.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="153">
-              <caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Settings.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/model/Settings.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="153">
-              <caret line="9" column="13" selection-start-line="9" selection-start-column="13" selection-end-line="9" selection-end-column="13" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Specifications.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/model/Specifications.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="340">
-              <caret line="21" column="13" selection-start-line="21" selection-start-column="13" selection-end-line="21" selection-end-column="13" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Main.java" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/src/ui/Main.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="527">
-              <caret line="82" selection-start-line="82" selection-end-line="82" />
-              <folding>
-                <element signature="e#16423#17075#0" expanded="true" />
-                <element signature="e#17074#17075#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="SettingsWindow.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/ui/SettingsWindow.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="393">
-              <caret line="47" column="25" selection-start-line="47" selection-start-column="25" selection-end-line="47" selection-end-column="25" />
-              <folding>
-                <element signature="imports" expanded="true" />
-                <element signature="e#2434#2842#0" expanded="true" />
-                <element signature="e#2841#2842#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="UIController.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/ui/UIController.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="17">
-              <caret line="1" selection-start-line="1" selection-end-line="1" />
-              <folding>
-                <element signature="imports" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-    </leaf>
-  </component>
-  <component name="Git.Settings">
-    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
-  </component>
-  <component name="IdeDocumentHistory">
-    <option name="CHANGED_PATHS">
-      <list>
-        <option value="$PROJECT_DIR$/src/controller/Export.java" />
-        <option value="$PROJECT_DIR$/src/ui/SettingsWindow.java" />
-        <option value="$PROJECT_DIR$/src/ui/UIController.java" />
-        <option value="$PROJECT_DIR$/src/ui/Main.java" />
-      </list>
-    </option>
-  </component>
-  <component name="ProjectFrameBounds" extendedState="6">
-    <option name="x" value="700" />
-    <option name="y" value="-33" />
-    <option name="width" value="3864" />
-    <option name="height" value="2124" />
-  </component>
-  <component name="ProjectView">
-    <navigator proportions="" version="1">
-      <foldersAlwaysOnTop value="true" />
-    </navigator>
-    <panes>
-      <pane id="ProjectPane">
-        <subPane>
-          <expand>
-            <path>
-              <item name="OLIP" type="b2602c69:ProjectViewProjectNode" />
-              <item name="OLIP" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="OLIP" type="b2602c69:ProjectViewProjectNode" />
-              <item name="OLIP" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="OLIP" type="b2602c69:ProjectViewProjectNode" />
-              <item name="OLIP" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="controller" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="OLIP" type="b2602c69:ProjectViewProjectNode" />
-              <item name="OLIP" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="model" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="OLIP" type="b2602c69:ProjectViewProjectNode" />
-              <item name="OLIP" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="ui" type="462c0819:PsiDirectoryNode" />
-            </path>
-          </expand>
-          <select />
-        </subPane>
-      </pane>
-      <pane id="Scope" />
-      <pane id="PackagesPane" />
-      <pane id="AndroidView" />
-    </panes>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
-  </component>
-  <component name="RecentsManager">
-    <key name="CopyFile.RECENT_KEYS">
-      <recent name="C:\Users\HairBears\Documents\OLIP\OLIP\src\pictures" />
-    </key>
-  </component>
-  <component name="RunDashboard">
-    <option name="ruleStates">
-      <list>
-        <RuleState>
-          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
-        </RuleState>
-        <RuleState>
-          <option name="name" value="StatusDashboardGroupingRule" />
-        </RuleState>
-      </list>
-    </option>
-  </component>
-  <component name="RunManager">
-    <configuration name="Main" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="ui.Main" />
-      <module name="OLIP2.0" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <extension name="coverage">
-        <pattern>
-          <option name="PATTERN" value="ui.*" />
-          <option name="ENABLED" value="true" />
-        </pattern>
-      </extension>
-    </configuration>
-    <configuration default="true" type="Application" factoryName="Application">
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-    </configuration>
-    <configuration default="true" type="JUnit" factoryName="JUnit">
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" value="-ea" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
-      </option>
-      <patterns />
-    </configuration>
-    <configuration default="true" type="TestNG" factoryName="TestNG">
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="SUITE_NAME" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="GROUP_NAME" />
-      <option name="TEST_OBJECT" value="CLASS" />
-      <option name="VM_PARAMETERS" value="-ea" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
-      <option name="OUTPUT_DIRECTORY" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
-      </option>
-      <option name="USE_DEFAULT_REPORTERS" value="false" />
-      <option name="PROPERTIES_FILE" />
-      <properties />
-      <listeners />
-    </configuration>
-    <recent_temporary>
-      <list>
-        <item itemvalue="Application.Main" />
-      </list>
-    </recent_temporary>
-  </component>
-  <component name="SvnConfiguration">
-    <configuration />
-  </component>
-  <component name="TaskManager">
-    <task active="true" id="Default" summary="Default task">
-      <changelist id="96b432d3-fd2a-402d-8f56-fa30254c4197" name="Default" comment="" />
-      <created>1524594236294</created>
-      <option name="number" value="Default" />
-      <option name="presentableId" value="Default" />
-      <updated>1524594236294</updated>
-    </task>
-    <servers />
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="-7" y="-7" width="2575" height="1415" extended-state="6" />
-    <layout>
-      <window_info anchor="right" id="Palette" />
-      <window_info anchor="bottom" id="TODO" order="6" />
-      <window_info anchor="bottom" id="Messages" />
-      <window_info anchor="right" id="Palette&#9;" />
-      <window_info id="Image Layers" />
-      <window_info anchor="right" id="Capture Analysis" />
-      <window_info anchor="bottom" id="Event Log" side_tool="true" />
-      <window_info anchor="right" id="Maven Projects" />
-      <window_info anchor="bottom" id="Run" order="2" weight="0.32994527" />
-      <window_info anchor="bottom" id="Version Control" />
-      <window_info anchor="bottom" id="Terminal" />
-      <window_info id="Capture Tool" />
-      <window_info id="Designer" />
-      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.1610338" />
-      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
-      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
-      <window_info id="UI Designer" />
-      <window_info anchor="right" id="Theme Preview" />
-      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
-      <window_info id="Favorites" side_tool="true" />
-      <window_info anchor="bottom" id="Find" order="1" />
-      <window_info anchor="right" id="Commander" order="0" weight="0.4" />
-      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
-      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-      <window_info anchor="bottom" id="Message" order="0" />
-      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
-    </layout>
-  </component>
-  <component name="VcsContentAnnotationSettings">
-    <option name="myLimit" value="2678400000" />
-  </component>
-  <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/controller/Controller.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="153">
-          <caret line="13" column="13" selection-start-line="13" selection-start-column="13" selection-end-line="13" selection-end-column="13" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/controller/Export.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="4080">
-          <caret line="259" column="32" selection-start-line="259" selection-start-column="32" selection-end-line="259" selection-end-column="32" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/controller/SettingsController.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="153">
-          <caret line="16" column="13" selection-start-line="16" selection-start-column="13" selection-end-line="16" selection-end-column="13" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/model/Instructions.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="153">
-          <caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/model/Settings.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="153">
-          <caret line="9" column="13" selection-start-line="9" selection-start-column="13" selection-end-line="9" selection-end-column="13" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/model/Specifications.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="340">
-          <caret line="21" column="13" selection-start-line="21" selection-start-column="13" selection-end-line="21" selection-end-column="13" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/ui/SettingsWindow.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="393">
-          <caret line="47" column="25" selection-start-line="47" selection-start-column="25" selection-end-line="47" selection-end-column="25" />
-          <folding>
-            <element signature="imports" expanded="true" />
-            <element signature="e#2434#2842#0" expanded="true" />
-            <element signature="e#2841#2842#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/ui/UIController.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="17">
-          <caret line="1" selection-start-line="1" selection-end-line="1" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/ui/Main.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="527">
-          <caret line="82" selection-start-line="82" selection-end-line="82" />
-          <folding>
-            <element signature="e#16423#17075#0" expanded="true" />
-            <element signature="e#17074#17075#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-  </component>
-</project>

+ 0 - 3
out/production/OLIP2.0/META-INF/MANIFEST.MF

@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: ui.Main
-

+ 0 - 174
out/production/OLIP2.0/OpenSCADFiles/acceleration.scad

@@ -1,174 +0,0 @@
-//This object changes its state if a specific acceleration is reached.
-//The necessary acceleration is dependend on the wall height.
-//Water will be filled into the bigger chamber and will swap over that wall into the smaller chamber where it can be detected.
-
-
-//Parting wall height
-wallHeight = 18;
-//Render conductive or non-conductive parts
-conductive = false;
-//Render the cross section or complete object
-crossSection = false;
-//Add a hole to fill the object after finishing printing
-fillLater = false;
-//Diameter of the conductive part that will be on the touch screen
-sizeScreen=4.0;
-//Diameter of the conductive part that will be connected to the finger
-sizeFinger=4.0;
-
-//The main block where everything else gets cut out
-module baseBlock() {
-    cube([40,20,30], center=true);
-}
-
-//Adding 2 half-cylinder on the sides for easier recognition which object this is
-module recognitionAddition() {
-    difference (){
-        union() {
-            color("green")
-            translate([0,-10,5])
-            cylinder(r=3,h=40, $fa=1, $fs=0.5, center=true);
-            
-            color("green")
-            translate([0,10,5])
-            cylinder(r=3,h=40, $fa=1, $fs=0.5, center=true);
-        }
-        baseBlock();
-        roofAddition();
-   }
-}
-
-//The smaller chamber that contains the conductive parts
-module conductiveChamber() {
-    color("blue")
-    translate([-12,0,2])
-    cube([8,16,26], center=true);
-}
-
-//The bigger chamber that contains the water
-module initialWaterChamber() {
-    color("blue")
-    translate([6,0,2])
-    cube([24,16,26], center=true);
-}
-
-//The wall where the water will swap over
-module partitionWall() {
-    color("blue")
-    translate([-6,0,2+(wallHeight/2)])
-    cube([10,16,26-wallHeight], center=true);
-}
-
-//Addition to the main block, added later. TODO remove, add to baseBlock
-module roofAddition() {
-    translate([0,0,20])
-    cube([40,20,10], center=true);
-}
-
-//The roof in a 45 degree angle for better printing
-module roofCutout() {
-    difference() {
-        color("blue")
-        translate([1,0,15])
-        rotate([45,0,0])
-        cube([34,11.3,11.3], center=true);
-        translate([1,0,2])
-        cube([34,20,20],center=true);
-    }
-}
-
-//The hole through which the water can be filled in later
-module fillInHole() {
-    color("blue")
-    translate([7,0,23])
-    cylinder(r=1,h=4, $fa=1, $fs=0.5, center=true);
-}
-
-//Conductive bar on the wall which is connected to the finger
-module condBarWall() {
-    color("red")
-    translate([-16.5,0,-8])
-    cube([1,14,4], center=true);
-}
-
-//Conductive part on the outside where the finger has to be placed
-module condFinger() {
-    color("red")
-    translate([-19,0,0])
-    rotate([0,90,0])
-    cylinder(r=sizeFinger/2,h=2, $fa=1, $fs=0.5, center=true);
-}
-
-//A conductive part inside of a wall that connects the two modules above
-module condConnectionFingerWall() {
-    color("red")
-    translate([-17.5,0,-4])
-    cube([1,6,12], center=true);
-}
-
-//Conductive bar on the floor that is connected to the touch screen
-module condBarFloor() {
-    color("red")
-    translate([-10,0,-11.5])
-    cube([4,14,1], center=true);
-}
-
-//Conductive part on the outside that connects to the touchscreen
-module condFloorScreen() {
-    color("red")
-    translate([-10,0,-13.5])
-    cylinder(r=sizeScreen/2,h=3, $fa=1, $fs=0.5, center=true);
-}
-
-//Combine all conductive parts to one module
-module conductive() {
-    union() {
-        condBarFloor();
-        condBarWall();
-        condFinger();
-        condConnectionFingerWall();
-        condFloorScreen();
-    }
-}
-
-//The complete non-conducitve object
-module completeObject() {
-    difference() {
-       union() {
-            baseBlock();
-            roofAddition();
-            recognitionAddition();
-        }
-        union() {
-            conductiveChamber();
-            initialWaterChamber();
-            conductive();
-            partitionWall();
-            roofCutout();
-            if (fillLater)
-                fillInHole();
-        }
-    }
-}
-
-//Render the object depending on the input
-if (crossSection) {
-    difference() {
-        if (conductive) {
-            conductive();
-        }
-        else {
-            completeObject();
-        }
-        translate([-30,-60,-30])
-        cube([60,60,60]);
-    }
-}
-else {
-    if (conductive) {
-        conductive();
-    }
-    else {
-        completeObject();
-    }
-}

+ 0 - 205
out/production/OLIP2.0/OpenSCADFiles/flip.scad

@@ -1,205 +0,0 @@
-//Render conductive or non-conductive parts
-conductive = false;
-//Render the cross section or complete object
-crossSection = true;
-//Add a hole to fill the object after finishing printing
-fillLater = true;
-//Diameter of the conductive part that will be on the touch screen
-sizeScreen=4.0;
-//Diameter of the conductive part that will be connected to the finger
-sizeFinger=4.0;
-
-//Base block where everything else gets cut out
-module baseBlock() {
-    translate([0,0,3.5])
-     cylinder(r=17,h=51, $fa=1, $fs=0.5, center=true);
-}
-
-//Cylinder cut out, outer ring
-module outerRingCutOut() {
-    color("blue")
-    translate([0,0,-1])
-    cylinder(r=14,h=30, $fa=1, $fs=0.5, center=true);
-}
-
-//The hole through which the water can be filled in later
-module fillInHole() {
-    color("blue")
-    translate([0,0,23])
-    cylinder(r=1,h=14, $fa=1, $fs=0.5, center=true);
-}
-
-//Parting wall, inner cylinder, cut out
-module partingWallInner() {
-    color("blue")
-    cylinder(r=6.5,h=30, $fa=1, $fs=0.5, center=true);
-}
-
-//Parting wall, outer cylinder, wall thickness
-module partingWallOuter() {
-    cylinder(r=8,h=30, $fa=1, $fs=0.5, center=true);
-}
-
-//Combining the two to one module, complete parting wall
-module partingWall() {
-    translate([0,0,-1])
-    difference() {
-        partingWallOuter();
-        partingWallInner();
-    }
-}
-
-//Parting wall, ceiling
-module partingWallCeiling() {
-    color("blue")
-    translate([0,0,14])
-    difference() {
-        sphere(r=8, center=true);
-        sphere(r=6.5, center=true);
-        translate([0,0,-5])
-        cube([20,20,10], center=true);
-        translate([0,0,7])
-        rotate([0,0,90])
-        cylinder(r=3.5,h=4, $fa=1, $fs=0.5, center=true);
-    }
-}
-
-//Cut out sphere, ceiling for the whole object
-module ball() {
-    color("blue")
-    sphere(r=14, center=true);
-}
-
-//cube that cuts away half the ball
-module cutCube() {
-    translate([0,0,-7.5])
-    cube([30,30,15],center=true);
-}
-
-//Ceiling for the whole object
-module ceiling() {
-    translate([0,0,14])
-    difference() {
-        ball();
-        cutCube();
-        if (fillLater)
-            fillInHole();
-    }
-}
-
-//Slope to collect the water at one point
-module slope() {
-    difference() {
-        translate([5,0,-16])
-        rotate([0,-30,0])
-        cylinder(r=16.5, h=20, $fa=1, $fs=0.5, center=true);
-        
-        partingWallInner();
-    }
-}
-
-//Connects the conductive point on the touch screen with the inner conductive part 
-module condConnectionHorizontal() {
-    color("red")
-    translate([-4.5,0,-19])
-    cube([12,4,2], center=true);
-}
-
-//Conductive part on the bottom that connects to the touch screen
-module condTouchscreen() {
-    color("red")
-    translate([0,0,-21])
-    cylinder(r=2, h=2, $fa=1, $fs=0.5, center=true);
-}
-
-//Conductive part that connects the inner conductive part with the touch screen
-module condConnectionVertical() {
-    color("red")
-    translate([-9.5,0,-16])
-    cube([2,4,4], center=true);
-}
-
-//Conductive part inside for touchscreen
-module condFloor() {
-    intersection() {
-        color("red")
-        translate([-9.5,0,-13])
-        cube([2,16,2], center=true);
-        
-        slope();
-    }
-}
-
-//Conducitve part for the finger
-module condFinger() {
-    difference() {
-        intersection() {
-            color("red")
-            translate([-15.5,0,-8])
-            rotate([0,90,0])
-            cylinder(r=2, h=4, $fa=1, $fs=0.5, center=true);
-            
-            baseBlock();
-        }
-        outerRingCutOut();
-    }
-}
-
-//All conductive parts in one module
-module conductive() {
-    union() {
-        condConnectionHorizontal();
-        condTouchscreen();
-        condConnectionVertical();
-        condFloor();
-        condFinger();
-    }
-}
-
-//The complete object
-module completeObject() {
-    union() {
-        difference() {
-            baseBlock();
-            union() {
-                outerRingCutOut();
-                if (fillLater)
-                    fillInHole();
-                ceiling();
-                conductive();
-                
-            }
-        }
-        partingWall();
-        partingWallCeiling();
-        difference() {
-            intersection() {
-                slope();
-                baseBlock();
-            }
-            conductive();
-        }
-    }
-}
-
-//Render the object depending on the input
-if (crossSection) {
-    difference() {
-        if (conductive) {
-            conductive();
-        }
-        else {
-            completeObject();
-        }
-        translate([-30,-60,-30])
-        cube([60,60,60]);
-    }
-}
-else {
-    if (conductive) {
-        conductive();
-    }
-    else {
-        completeObject();
-    }
-}

+ 0 - 171
out/production/OLIP2.0/OpenSCADFiles/iceFreezing.scad

@@ -1,171 +0,0 @@
-//This object changes its state when the water in the bigger chamber is freezing.
-//The ice will break through the red wall, when melting water will flow through the crack into the smaller chamber.
-
-//Render conductive or non-conductive parts
-conductive = false;
-//Render the cross section or complete object
-crossSection = true;
-//Add a hole to fill the object after finishing printing
-fillLater = true;
-//Diameter of the conductive part that will be on the touch screen
-sizeScreen=4.0;
-//Diameter of the conductive part that will be connected to the finger
-sizeFinger=4.0;
-
-//Base block where everything else gets cut out
-module baseBlock() {
-    translate([-7.5,0,-1])
-    cube([43,20,32], center=true);
-}
-
-//Part on the outside for easier recognition which object this is
-module recognitionAddition() {
-    difference (){
-        color("green")
-        translate([0,-10,-1])
-        cylinder(r=3,h=32, $fa=1, $fs=0.5, center=true);
-        baseBlock();
-   }
-}
-
-//chamber where the water gets filled in
-module waterChamber() {
-    color("blue")
-    translate([0,0,-2])
-    cube([25,16,16], center=true);
-}
-
-//Chamber where water will be caught
-module frozenChamber() {
-    color("blue")
-    translate([-19,0,-4])
-    cube([12,16,12], center=true);
-}
-
-//Cheiling for the chamber with the caught water
-module ceilingFrozen() {
-    color("blue")
-    difference() {
-        translate([-13,0,2])
-        rotate([0,45,0])
-        cube([17,16,17], center=true);
-        
-        translate([-3,0,2])
-        cube([20,20,40], center=true);
-        
-        translate([-13,0,-8])
-        cube([40,20,20], center=true);
-        
-    }
-}
-
-//Ceiling for the water chamber
-module ceiling() {
-     color("blue")
-    translate([0,0,6])
-    rotate([45,0,0])
-    cube([25,11.3,11.3], center=true);
-}
-
-//Hole to fill the object after printing
-module fillInHole() {
-     color("blue")
-    translate([0,0,14])
-    cylinder(r=1,h=2, $fa=1, $fs=0.5, center=true);
-}
-
-//Wall made out of conductive filament. Not used for recognition, only the fragile characteristic is used.
-module condWall() {
-    color("red")
-    translate([-12.75,0,2])
-    cube([0.5,12,20], center=true);
-}
-
-//Conductive part on the inside, connected to the touch screen
-module condFloor() {
-    color("red")
-    translate([-16,0,-10.5])
-    cube([4,14,1], center=true);
-}
-
-//Conductive part on the bottom, connected to the touch screen
-module condTouchscreen() {
-    color("red")
-    translate([-16,0,-14])
-    cylinder(r=sizeScreen/2,h=6, $fa=1, $fs=0.5, center=true);
-}
-
-//Conductive part on the inside, connected to the finger
-module condSide() {
-    color("red")
-    translate([-25.5,0,-7])
-    cube([1,12,4], center=true);
-}
-
-//Conducitve part on the outside, connected to the finger
-module condFinger() {
-    color("red")
-    translate([-28,0,0])
-    rotate([0,90,0])
-    cylinder(r=sizeFinger/2,h=2, $fa=1, $fs=0.5, center=true);
-}
-
-//Connects the inner and outer part for the finger connection
-module condConnection() {
-    color("red")
-    translate([-26.5,0,-4])
-    cube([2,4,10], center=true);
-}
-
-//All conducitve parts in one module
-module conductive() {
-    union() {
-        condWall();
-        condFloor();
-        condTouchscreen();
-        condSide();
-        condFinger();
-        condConnection();
-    }
-}
-
-//The whole object
-module completeObject() {
-    difference() {
-        union() {
-            baseBlock();
-            recognitionAddition();
-        }
-        union() {
-            waterChamber();
-            frozenChamber();
-            ceilingFrozen();
-            ceiling();
-            if (fillLater)
-                fillInHole();
-            conductive();
-        }
-    }
-}
-
-//Render the object depending on the input
-if (crossSection) {
-    difference() {
-        if (conductive) {
-            conductive();
-        }
-        else {
-            completeObject();
-        }
-        translate([-30,-60,-30])
-        cube([60,60,60]);
-    }
-}
-else {
-    if (conductive) {
-        conductive();
-    }
-    else {
-        completeObject();
-    }
-}

+ 0 - 167
out/production/OLIP2.0/OpenSCADFiles/iceMelting.scad

@@ -1,167 +0,0 @@
-//This object changes its state when its temperature is above 0°C for some minutes.
-//The ice will melt and flow into the other chamber where it can be detected.
-//The temperature is changeable depending on what the ice is made of. For example saturated salt water will melt at ~21°C and can be detected through this method.
-
-//Render conductive or non-conductive parts
-conductive = false;
-//Render the cross section or complete object
-crossSection = true;
-//Add a hole to fill the object after finishing printing
-fillLater = true;
-//Diameter of the conductive part that will be on the touch screen
-sizeScreen=4.0;
-//Diameter of the conductive part that will be connected to the finger
-sizeFinger=4.0;
-
-//The main block where everything else gets cut out
-module baseBlock() {
-    translate([1,0,0])
-    cube([42,20,30], center=true);
-}
-
-//Additional part on the side wall for easier recognition which object this is
-module recognitionAddition() {
-    difference (){
-        color("green")
-        translate([-21,0,5])
-        cube([2,10,40], center=true);
-        baseBlock();
-        roofAddition();
-   }
-}
-
-//The chamber where the melted water will be caught
-module conductiveChamber() {
-    color("blue")
-    translate([10,0,8])
-    cube([16,16,26], center=true);
-}
-
-//The chamber where the ice will be filled in
-module iceChamber() {
-    color("blue")
-    translate([-10,0,13])
-    cube([16,16,16], center=true);
-}
-
-//The roof of the ice chamber
-module iceRoof() {
-     color("blue")
-    translate([-10,0,5])
-    rotate([0,45,0])
-    cube([11.3,16,11.3], center=true);
-}
-
-//The roof of the conductive chamber
-module conductiveRoof() {
-     color("blue")
-    translate([10,0,-5])
-    rotate([0,45,0])
-    cube([11.3,16,11.3], center=true);
-}
-
-//The tunnel where the melted water flows through to get into the conductive chamber
-module meltingTunnel() {
-    color("blue")
-    translate([-4.5,0,-0.5])
-    rotate([0,100,0])
-    cylinder(r=1.5,h=15, $fa=1, $fs=0.5, center=true);
-}
-
-//Addition to the main block, added later for the roof cutout. TODO move to baseBlock
-module roofAddition() {
-    translate([1,0,20])
-    cube([42,20,10], center=true);
-}
-
-//The hole through which the water can be filled in later
-module fillInHole() {
-    color("blue")
-    translate([-10,0,23])
-    cylinder(r=1,h=4, $fa=1, $fs=0.5, center=true);
-}
-
-//Conductive bar on the floor, connected to the touch screen
-module condBarFloor() {
-    color("red")
-    translate([4,0,22])
-    cube([4,14,2], center=true);
-}
-
-//Conductive bar on the wall, connected to the finger
-module condBarWall() {
-    color("red")
-    translate([19,0,13])
-    cube([2,14,14], center=true);
-}
-
-//Conductive part on the outside, connected to the touchscreen
-module condTouchscreen() {
-    color("red")
-    translate([4,0,24])
-    cylinder(r=sizeScreen/2,h=2, $fa=1, $fs=0.5, center=true);
-}
-
-//Conductive part on the outside, connected to the finger
-module condFinger() {
-    color("red")
-    translate([21,0,8])
-    rotate([0,90,0])
-    cylinder(r=sizeFinger/2,h=2, $fa=1, $fs=0.5, center=true);
-}
-
-//All conductive parts combined to one module
-module conductive() {
-    union() {
-        condBarFloor();
-        condBarWall();
-        condTouchscreen();
-        condFinger();
-    }
-}
-
-//The complete non-conducitve object
-module completeObject() {
-    difference() {
-         union() {
-            baseBlock();
-            roofAddition();
-             recognitionAddition();
-        }
-        union() {
-            conductiveChamber();
-            iceChamber();
-            iceRoof();
-            conductiveRoof();
-            meltingTunnel();
-            if (fillLater)
-                fillInHole();
-            conductive();
-        }
-    }
-}
-
-//Rotate the object for easier printing
-rotate([0,180,0])
-
-//Render the object depending on the input
-if (crossSection) {
-    difference() {
-        if (conductive) {
-        conductive();
-    }
-    else {
-        completeObject();
-    }
-    translate([-30,-60,-30]) 
-    cube([60,60,60]);
-    }
-}
-else {
-    if (conductive) {
-        conductive();
-    }
-    else {
-        completeObject();
-    }
-}

+ 0 - 217
out/production/OLIP2.0/OpenSCADFiles/squeeze.scad

@@ -1,217 +0,0 @@
-//This object changes its state when the bottom half gets squeezed.
-//Water will be squeezed from the bottom chamber into the top one where it can be detected.
-
-
-//Render conductive or non-conductive parts
-conductive = false;
-//Render the cross section or complete object
-crossSection = true;
-//Add a hole to fill the object after finishing printing
-fillLater = false;
-//Diameter of the conductive part that will be on the touch screen
-sizeScreen=4.0;
-//Diameter of the conductive part that will be connected to the finger
-sizeFinger=4.0;
-
-//Bottom cylinder
-module bottomCylinder() {
-    translate([0,0,-10])
-    cylinder(r=13,h=20, $fa=1, $fs=0.5, center=true);
-}
-
-//Bottom cut out cylinder where the water will be filled in
-module bottomCutout() {
-    color("blue")
-    translate([0,0,-9])
-    cylinder(r=8,h=18, $fa=1, $fs=0.5, center=true);
-}
-
-//Top cylinder
-module topCylinder() {
-    translate([0,0,10])
-    cylinder(r=13,h=20, $fa=1, $fs=0.5, center=true);
-}
-
-//Top cot out where the water will be caught
-module topCutout() {
-    color("blue")
-    translate([0,0,5])
-    cylinder(r=8,h=10, $fa=1, $fs=0.5, center=true);
-}
-
-//The cone for the roof, used for easier printing
-module topCone() {
-   color("blue")
-    translate([0,0,14.5])
-    cylinder(r1=8, r2=0,h=9, $fa=1, $fs=0.5, center=true); 
-}
-
-//The hole through which the water can be filled in later
-module fillInHole() {
-    color("blue")
-    translate([0,0,19])
-    cylinder(r=1,h=2, $fa=1, $fs=0.5, center=true);
-}
-
-//Outer part of the cone
-module coneOutside() {
-   translate([0,0,5])
-    cylinder(10,10,2, $fa=1, $fs=0.5, center=true); 
-}
-
-//Inner cut out part of the cone
-module coneCutout() {
-   translate([0,0,5])
-    cylinder(10,8,1, $fa=1, $fs=0.5, center=true); 
-}
-
-//The cone where the water gets squeezed through, the water will be caught on its top
-module coneMid() {
-    difference() {
-        coneOutside();
-        coneCutout();
-    }
-}
-
-//Isolation around the conductive bottom part
-module isolationBottom() {
-    difference() {
-        color("blue")
-        translate([0,-12-sizeScreen/2,-6])
-        cube([4+sizeScreen,4+sizeScreen,28], center=true);
-        topCylinder();
-        bottomCylinder();
-    }
-}
-
-//Isolation around the conductive top part
-module isolationTop() {
-    difference() {
-        color("blue")
-        translate([0,12+sizeFinger/2,11])
-        cube([sizeFinger+4,sizeFinger+4,18], center=true);
-        topCylinder();
-        bottomCylinder();
-    }
-}
-
-//Bevel for the top isolation, for easier printing and recognizing what the top part is
-module isolationTopBevel() {
-   difference() {
-        color("blue")
-        translate([0,9.9+sizeFinger/2,5-sizeFinger/2])
-       rotate([45,0,0])
-        cube([sizeFinger+4,1+sizeFinger*1.5,10], center=true);
-        topCylinder();
-        bottomCylinder();
-    } 
-}
-
-//Conductive bar on the top part, connected to the finger
-module condTop() {
-    color("red")
-        translate([0,12+sizeFinger/2,11])
-        cube([sizeFinger,sizeFinger,18], center=true);
-}
-
-//Conductive part that connects the bar to the inside
-module condTopInside() {
-    difference() {
-    color("red")
-        translate([0,10,4])
-        cube([4,7,3], center=true);
-        topCutout();
-    }
-}
-
-//Conductive bar on the bottom part, connected to the touchscreen
-module condBottom() {
-    color("red")
-        translate([0,-12-sizeScreen/2,-7])
-        cube([sizeScreen,sizeScreen,26], center=true);
-}
-
-//Conductive part that connects the bar to the inside
-module condBottomInside() {
-    difference() {
-    color("red")
-        translate([0,-10,4])
-        cube([4,7,3], center=true);
-        topCutout();
-        coneMid();
-    }
-}
-
-//All conductive parts combined to one module
-module conductive() {
-    union() {
-        condTop();
-        condTopInside();
-        condBottom();
-        condBottomInside();
-    }
-}
-
-//The combined, non-conductive bottom part
-module combinedBottom() {
-    difference() {
-        bottomCylinder();   
-        union() {
-            bottomCutout();
-            conductive();
-        }
-    }
-}
-
-//The combined, non-conductive top part
-module combinedTop() {
-    union() {
-        coneMid();
-        difference() {
-            union() {
-               topCylinder(); 
-               isolationBottom();
-               isolationTop();
-               isolationTopBevel();
-            }  
-            union() {
-                conductive();
-                topCone();
-                topCutout();
-                if (fillLater)
-                    fillInHole();
-            }
-        }
-    }
-}
-
-//Combined top and bottom parts to one module.
-//If a printer can choose different densities for different parts, you can print the top part with 100% infill (solid) and the bottom part with ~20% (flexible) 
-module completeObject() {
-    union() {
-        combinedBottom();
-        combinedTop();
-    }
-}
-
-//Render the object depending on the input
-if (crossSection) {
-    difference() {
-       if (conductive) {
-           conductive();
-       }
-       else {
-           completeObject();
-       }
-       translate([0,-30,-30])
-       cube([60,60,60]) ;
-    }
-}
-else {
-    if (conductive) {
-        conductive();
-    }
-    else {
-        completeObject();
-    }
-}

+ 0 - 145
out/production/OLIP2.0/OpenSCADFiles/tilt.scad

@@ -1,145 +0,0 @@
-//Render conductive or non-conductive parts
-conductive = false;
-//Render the cross section or complete object
-crossSection = true;
-//Add a hole to fill the object after finishing printing
-fillLater = false;
-//Diameter of the conductive part that will be on the touch screen
-sizeScreen=4.0;
-//Diameter of the conductive part that will be connected to the finger
-sizeFinger=4.0;
-
-//Base block where everything else gets cut out
-module baseBlock() {
-    translate([0,0,0])
-    cube([30,18,40], center=true);
-}
-
-//Chamber that will be filled with water
-module waterChamber() {
-    color("blue")
-    translate([-6,0,-2])
-    cylinder(r=7.5,h=30, $fa=1, $fs=0.5, center=true);
-}
-
-//Roof of the water chamber
-module waterRoof() {
-    color("blue")
-    translate([-6,0,12])
-    sphere(r=7.5, center=true);
-}
-
-//Hole to fill water into the chamber
-module waterHole() {
-    color("blue")
-    translate([-6,0,18])
-    cylinder(r=1,h=6, $fa=1, $fs=0.5, center=true);
-}
-
-//Connection between the two chambers
-module tunnel() {
-    color("blue")
-    translate([])
-    rotate([0,90,0])
-    cylinder(r=3,h=10, $fa=1, $fs=0.5, center=true);
-}
-
-//Second chamber that catches the water
-module catchChamber() {
-    color("blue")
-    translate([8,0,0])
-    cylinder(r=5,h=30, $fa=1, $fs=0.5, center=true);
-}
-
-//Roof of the second chamber
-module roofCatch() {
-    color("blue")
-    translate([8,0,14])
-    sphere(r=5, center=true);
-}
-
-//Hole where the air gets pushed through
-module holeCatch() {
-    color("blue")
-    translate([8,0,18])
-    cylinder(r=1,h=6, $fa=1, $fs=0.5, center=true);
-}
-
-//Conductive part on the inside bottom
-module condFloor() {
-    color("red")
-    translate([8,0,-16])
-    cylinder(r=5,h=2, $fa=1, $fs=0.5, center=true);
-}
-
-//Touchscreen electrode
-module condTouchscreen() {
-    color("red")
-    translate([8,0,-18.5])
-    cylinder(r=sizeScreen/2,h=3, $fa=1, $fs=0.5, center=true);
-}
-
-//Finger electrode
-module condFinger() {
-    color("red")
-    translate([13,0,-10])
-    rotate([0,90,0])
-    cylinder(r=sizeFinger/2,h=4, $fa=1, $fs=0.5, center=true);
-}
-
-//Finger electrode cut to match the cylinder shape
-module condFingerCut() {
-    difference() {
-        condFinger();
-         catchChamber();
-    }
-}
-
-module conductive() {
-    difference() {
-        union() {
-            condFloor();
-            condTouchscreen();
-            condFingerCut();
-        }
-         catchChamber();
-    }
-}
-
-module completeObject() {
-    difference() {
-        baseBlock();
-        union() {
-            waterChamber();
-            waterRoof();
-            waterHole();
-            tunnel();
-            catchChamber();
-            roofCatch();
-            holeCatch();
-            conductive();
-        }
-    }    
-}
-
-//Render the object depending on the input
-if (crossSection) {
-    difference() {
-        if (conductive) {
-            conductive();
-        }
-        else {
-            completeObject();
-        }
-        translate([-30,-60,-30])
-        cube([60,60,60]);
-    }
-}
-else {
-    if (conductive) {
-        conductive();
-    }
-    else {
-        completeObject();
-    }
-}

+ 0 - 132
out/production/OLIP2.0/OpenSCADFiles/weight.scad

@@ -1,132 +0,0 @@
-//Render conductive or non-conductive parts
-conductive = false;
-//Render the cross section or complete object
-crossSection = false;
-//Add a hole to fill the object after finishing printing
-fillLater = true;
-//Diameter of the conductive part that will be on the touch screen
-sizeScreen=4.0;
-//Diameter of the conductive part that will be connected to the finger
-sizeFinger=4.0;
-//Number of supports between the plates
-numberSupports=2;
-
-//Calculate for the for-loop
-a=numberSupports/2 - 1;
-
-//First plate
-module plateOne() {
-    cube([61,20,4], center=true);
-}
-
-//Second plate
-module plateTwo() {
-    translate([0,0,10])
-    cube([61,20,4], center=true);
-}
-
-//Supports between the plates, number dependend on input
-module supports() { 
-    color("red")
-   for (i = [0:1:a]) {
-      translate([-26+i*8,0,5])
-       rotate([0,45,0])
-       cube([0.5,20,12], center=true);
-   } 
-   
-   color("red")
-   for (i = [0:1:a]) {
-       translate([26-i*8,0,5])
-       rotate([0,45,0])
-       cube([0.5,20,12], center=true);
-   }
-}
-
-//Larger bottom area for better printing
-module printSupportOne() {
-    translate([0,-9.75,-3])
-    rotate([90,0,0])
-    cube([61,10,0.5], center=true);
-}
-
-module printSupportTwo() {
-    translate([0,-9.75,13])
-    rotate([90,0,0])
-    cube([61,10,0.5], center=true);
-}
-
-//Conductive bars between the plates
-module condBar1() {
-    color("red")
-    translate([1,0,2.25])
-    cube([4,20,2],center=true);
-}
-
-module condBar2() {
-    color("red")
-    translate([-1,0,7.75])
-    cube([4,20,2],center=true);
-}
-
-//Conductive pins on the outside, connected to the finger or touchscreen
-module condPin1() {
-    color("red")
-    translate([1,0,-0.05])
-    cylinder(r=sizeFinger/2,h=4.1, $fa=1, $fs=0.5, center=true);
-}
-
-module condPin2() {
-    color("red")
-    translate([-1,0,10.05])
-    cylinder(r=sizeScreen/2,h=4.1, $fa=1, $fs=0.5, center=true);
-}
-
-//All conductive parts in one module
-module conductive() {
-    union() {
-        condBar1();
-        condBar2();
-        condPin1();
-        condPin2();
-        supports();
-    }
-}
-
-//All non-conducitve parts in one module
-module completeObject() {
-    rotate([90,0,0])
-    difference() {
-        union() {
-            plateOne();
-            plateTwo();
-            printSupportOne();
-            printSupportTwo();
-        }
-        conductive();
-    }
-}
-
-//Render dependend on inputs
-if (crossSection) {
-    difference() {
-        if(conductive) {
-            rotate([90,0,0])
-            conductive();
-        }
-        else {
-            completeObject();
-        }
-        translate([-40,-30,-60])
-        cube([80,60,60]);
-        
-    }
-}
-else {
-    if(conductive) {
-        rotate([90,0,0])
-        conductive();
-    }
-    else {
-        completeObject();
-    }
-}

BIN
out/production/OLIP2.0/pictures/acceleration.png


BIN
out/production/OLIP2.0/pictures/blue.PNG


BIN
out/production/OLIP2.0/pictures/cog.png


BIN
out/production/OLIP2.0/pictures/cyan.PNG


BIN
out/production/OLIP2.0/pictures/flame.png


BIN
out/production/OLIP2.0/pictures/flip.png


BIN
out/production/OLIP2.0/pictures/gray.PNG


BIN
out/production/OLIP2.0/pictures/green.PNG


BIN
out/production/OLIP2.0/pictures/information-icon-6086.png


BIN
out/production/OLIP2.0/pictures/lightBlue.PNG


BIN
out/production/OLIP2.0/pictures/loadingCircle.gif


BIN
out/production/OLIP2.0/pictures/offline_launch_icons.png


BIN
out/production/OLIP2.0/pictures/pressure.png


BIN
out/production/OLIP2.0/pictures/red.PNG


BIN
out/production/OLIP2.0/pictures/rotation.png


BIN
out/production/OLIP2.0/pictures/save.png


BIN
out/production/OLIP2.0/pictures/simpleAcceleration.png


BIN
out/production/OLIP2.0/pictures/simpleFlip.png


BIN
out/production/OLIP2.0/pictures/simpleSqueeze.png


BIN
out/production/OLIP2.0/pictures/simpleTemperatureFreeze.png


BIN
out/production/OLIP2.0/pictures/simpleTemperatureMelt.png


BIN
out/production/OLIP2.0/pictures/simpleTilt.png


BIN
out/production/OLIP2.0/pictures/simpleWeight.png


BIN
out/production/OLIP2.0/pictures/snowflake.png


BIN
out/production/OLIP2.0/pictures/temperature.png


BIN
out/production/OLIP2.0/pictures/tilt.png


BIN
out/production/OLIP2.0/pictures/weight.png


+ 0 - 52
out/production/OLIP2.0/ui/InformationWindow.fxml

@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?import javafx.geometry.Insets?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.TitledPane?>
-<?import javafx.scene.image.ImageView?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.VBox?>
-
-<HBox xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1">
-   <children>
-      <VBox prefHeight="200.0" prefWidth="100.0" HBox.hgrow="ALWAYS">
-         <children>
-            <TitledPane animated="false" collapsible="false" prefHeight="1071.0" prefWidth="184.0" text="Functional Principle" VBox.vgrow="ALWAYS">
-               <content>
-                  <HBox>
-                     <children>
-                        <Label fx:id="text1" alignment="TOP_LEFT" text="Label" wrapText="true" />
-                     </children>
-                  </HBox>
-               </content>
-               <VBox.margin>
-                  <Insets bottom="10.0" left="10.0" top="10.0" />
-               </VBox.margin>
-            </TitledPane>
-         </children>
-      </VBox>
-      <TitledPane collapsible="false" text="Preview" VBox.vgrow="ALWAYS">
-         <VBox.margin>
-            <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-         </VBox.margin>
-         <content>
-            <VBox fx:id="previewPane" alignment="CENTER_LEFT" prefHeight="1038.0" prefWidth="228.0" spacing="3.0">
-               <children>
-                  <ImageView fx:id="image" fitHeight="200.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true">
-                     <VBox.margin>
-                        <Insets bottom="10.0"/>
-                     </VBox.margin>
-                  </ImageView>
-                  <Label fx:id="greenText" text="Object's walls" />
-                  <Label fx:id="redText" text="Conductive parts" />
-                  <Label fx:id="blueText" text="Water" />
-                  <Label fx:id="iceText" text="Ice" />
-               </children>
-            </VBox>
-         </content>
-         <HBox.margin>
-            <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-         </HBox.margin>
-      </TitledPane>
-   </children>
-</HBox>

+ 0 - 228
out/production/OLIP2.0/ui/MainWindow.fxml

@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?import java.lang.*?>
-<?import javafx.geometry.*?>
-<?import javafx.scene.control.*?>
-<?import javafx.scene.layout.*?>
-<?import javafx.scene.text.*?>
-<?import javafx.geometry.Insets?>
-<?import javafx.scene.control.Button?>
-<?import javafx.scene.control.ComboBox?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.Menu?>
-<?import javafx.scene.control.MenuBar?>
-<?import javafx.scene.control.MenuItem?>
-<?import javafx.scene.control.RadioButton?>
-<?import javafx.scene.control.ScrollBar?>
-<?import javafx.scene.control.TitledPane?>
-<?import javafx.scene.layout.AnchorPane?>
-<?import javafx.scene.layout.BorderPane?>
-<?import javafx.scene.layout.ColumnConstraints?>
-<?import javafx.scene.layout.GridPane?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.Pane?>
-<?import javafx.scene.layout.RowConstraints?>
-<?import javafx.scene.layout.VBox?>
-<?import javafx.scene.text.Font?>
-
-<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefWidth="1280.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.UIController">
-  <columnConstraints>
-    <ColumnConstraints hgrow="SOMETIMES" minWidth="350.0" percentWidth="0.0" prefWidth="100.0" />
-    <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" />
-  </columnConstraints>
-  <rowConstraints>
-    <RowConstraints vgrow="ALWAYS" />
-  </rowConstraints>
-   <children>
-      <GridPane>
-        <columnConstraints>
-          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-        </columnConstraints>
-        <rowConstraints>
-          <RowConstraints minHeight="50.0" percentHeight="0.0" prefHeight="30.0" vgrow="SOMETIMES" />
-          <RowConstraints maxHeight="99.0" minHeight="10.0" percentHeight="0.0" prefHeight="83.0" vgrow="SOMETIMES" />
-          <RowConstraints maxHeight="131.0" minHeight="10.0" percentHeight="0.0" prefHeight="109.0" vgrow="SOMETIMES" />
-            <RowConstraints maxHeight="143.0" minHeight="10.0" percentHeight="0.0" prefHeight="120.0" vgrow="SOMETIMES" />
-            <RowConstraints maxHeight="153.0" minHeight="10.0" percentHeight="0.0" prefHeight="135.0" vgrow="SOMETIMES" />
-            <RowConstraints maxHeight="164.0" minHeight="10.0" percentHeight="0.0" prefHeight="87.0" vgrow="SOMETIMES" />
-            <RowConstraints maxHeight="110.0" minHeight="10.0" percentHeight="0.0" prefHeight="100.0" vgrow="SOMETIMES" />
-        </rowConstraints>
-         <children>
-            <TitledPane id="accelerationPane" fx:id="accelerationPane" animated="false" collapsible="false" contentDisplay="RIGHT" textAlignment="RIGHT" GridPane.rowIndex="1">
-               <padding>
-                  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-               </padding>
-               <content>
-                  <HBox id="accelerationContent" fx:id="accelerationContent" alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
-                     <children>
-                        <Label id="accelerationLabel" fx:id="accelerationLabel" disable="true" text="Acceleration limit:" HBox.hgrow="NEVER" />
-                        <Region prefWidth="0.0" HBox.hgrow="ALWAYS" />
-                        <Button fx:id="accelerationInfo" mnemonicParsing="false" onAction="#openAccelInfo" />
-                     </children>
-                  </HBox>
-               </content>
-            </TitledPane>
-            <TitledPane id="weightPane" fx:id="weightPane" animated="false" collapsible="false" GridPane.rowIndex="2">
-               <padding>
-                  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-               </padding>
-               <content>
-                  <HBox id="weightContent" fx:id="loadContent" alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
-                     <children>
-                        <Label id="weightLabel" fx:id="weightLabel" disable="true" text="Load limit:" HBox.hgrow="NEVER">
-                           <HBox.margin>
-                              <Insets right="38.0" />
-                           </HBox.margin></Label>
-                        <Region prefWidth="0.0" HBox.hgrow="ALWAYS" />
-                        <Button fx:id="weightInfo" mnemonicParsing="false" onAction="#openWeightInfo" />
-                     </children>
-                  </HBox>
-               </content>
-            </TitledPane>
-            <TitledPane id="temperaturePane" fx:id="temperaturePane" animated="false" collapsible="false" GridPane.rowIndex="3">
-               <padding>
-                  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-               </padding>
-               <content>
-                  <VBox id="temperatureContent" prefHeight="400.0" prefWidth="100.0" spacing="10.0">
-                     <children>
-                        <HBox alignment="CENTER_LEFT">
-                           <children>
-                              <RadioButton id="temperatureRadio1" fx:id="temperatureRadio1" disable="true" mnemonicParsing="false" prefHeight="27.0" prefWidth="0.0" selected="true" />
-                              <Label id="temperatureRisingLabel" fx:id="temperatureRisingLabel" disable="true" prefHeight="27.0" prefWidth="422.0" text="Check for rising temperature" />
-                              <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
-                              <Button fx:id="meltInfo" mnemonicParsing="false" onAction="#openTemperatureUpInfo" />
-                           </children>
-                        </HBox>
-                        <HBox alignment="CENTER_LEFT">
-                           <children>
-                              <RadioButton id="temperatureRadio2" fx:id="temperatureRadio2" disable="true" mnemonicParsing="false" prefHeight="27.0" prefWidth="15.0" />
-                              <Label id="temperatureFallingLabel" fx:id="temperatureFallingLabel" disable="true" prefHeight="27.0" prefWidth="1186.0" text="Check for falling temperature" />
-                              <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
-                              <Button fx:id="freezeInfo" mnemonicParsing="false" onAction="#openTemperatureDownInfo" />
-                           </children>
-                        </HBox>
-                     </children>
-                  </VBox>
-               </content>
-            </TitledPane>
-            <TitledPane id="rotationPane" fx:id="rotationPane" animated="false" collapsible="false" GridPane.rowIndex="4">
-               <padding>
-                  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-               </padding>
-               <content>
-                  <VBox id="rotationContent" prefHeight="200.0" prefWidth="100.0" spacing="10.0">
-                     <children>
-                        <HBox alignment="CENTER_LEFT">
-                           <children>
-                              <RadioButton id="rotationRadio1" fx:id="rotationRadio1" disable="true" mnemonicParsing="false" selected="true" />
-                              <Label fx:id="tiltLabel" disable="true" prefHeight="27.0" prefWidth="298.0" text="Tilt (90°)" />
-                              <Region prefWidth="0.0" HBox.hgrow="ALWAYS" />
-                              <Button fx:id="tiltInfo" mnemonicParsing="false" onAction="#openTiltInfo" />
-                           </children>
-                        </HBox>
-                        <HBox alignment="CENTER_LEFT">
-                           <children>
-                              <RadioButton id="rotationRadio2" fx:id="rotationRadio2" disable="true" mnemonicParsing="false" />
-                              <Label fx:id="flipLabel" disable="true" prefHeight="27.0" prefWidth="425.0" text="Flip (180°)" />
-                              <Region HBox.hgrow="ALWAYS" />
-                              <Button fx:id="flipInfo" mnemonicParsing="false" onAction="#openFlipInfo" />
-                           </children>
-                        </HBox>
-                     </children>
-                  </VBox>
-               </content>
-            </TitledPane>
-            <TitledPane id="pressurePane" fx:id="pressurePane" animated="false" collapsible="false" GridPane.rowIndex="5">
-               <padding>
-                  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-               </padding>
-               <content>
-                  <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
-                     <children>
-                        <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
-                        <Button fx:id="squeezeInfo" mnemonicParsing="false" onAction="#openSqueezeInfo" />
-                     </children>
-                  </HBox>
-               </content>
-            </TitledPane>
-            <VBox alignment="CENTER" GridPane.rowIndex="6">
-               <children>
-                  <HBox alignment="CENTER" prefHeight="51.0" prefWidth="430.0" spacing="10.0">
-                     <children>
-                        <Button id="createObjectButton" alignment="CENTER" contentDisplay="CENTER" disable="true" mnemonicParsing="false" prefHeight="66.0" prefWidth="337.0" style="-fx-padding: 10;" text=" Create Object" textAlignment="CENTER" />
-                        <Button id="saveObjectButton" alignment="CENTER" contentDisplay="CENTER" disable="true" mnemonicParsing="false" prefHeight="67.0" prefWidth="339.0" style="-fx-padding: 10;" text=" Save Object" />
-                     </children>
-                     <VBox.margin>
-                        <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-                     </VBox.margin>
-                  </HBox>
-               </children>
-            </VBox>
-            <HBox alignment="CENTER_LEFT" prefHeight="50.0">
-               <children>
-                  <Label text="Choose Off-Line Sensor" textAlignment="CENTER">
-                     <font>
-                        <Font name="System Bold" size="14.0" />
-                     </font>
-                     <HBox.margin>
-                        <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-                     </HBox.margin>
-                  </Label>
-               </children>
-               <opaqueInsets>
-                  <Insets />
-               </opaqueInsets>
-               <GridPane.margin>
-                  <Insets right="10.0" />
-               </GridPane.margin>
-            </HBox>
-         </children>
-         <opaqueInsets>
-            <Insets />
-         </opaqueInsets>
-      </GridPane>
-      <BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
-         <bottom>
-            <HBox alignment="BOTTOM_RIGHT" prefHeight="89.0" prefWidth="830.0" spacing="10.0" style="-fx-background-color: #E6E6E6;" BorderPane.alignment="CENTER">
-               <children>
-                  <Label fx:id="propertiesLabel" alignment="BOTTOM_LEFT" prefHeight="69.0" prefWidth="316.0" wrapText="true">
-                     <HBox.margin>
-                        <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-                     </HBox.margin></Label>
-                  <Region prefHeight="89.0" prefWidth="0.0" HBox.hgrow="ALWAYS" />
-                  <ComboBox id="comboBox" disable="true" prefHeight="39.0" prefWidth="282.0" visibleRowCount="4">
-                     <HBox.margin>
-                        <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-                     </HBox.margin></ComboBox>
-               </children>
-               <BorderPane.margin>
-                  <Insets />
-               </BorderPane.margin>
-            </HBox>
-         </bottom>
-         <top>
-            <HBox alignment="CENTER_LEFT" prefHeight="50.0" prefWidth="830.0" BorderPane.alignment="CENTER">
-               <children>
-                  <Label fx:id="previewLabel" text="Preview">
-                     <font>
-                        <Font name="System Bold" size="14.0" />
-                     </font>
-                     <HBox.margin>
-                        <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-                     </HBox.margin>
-                  </Label>
-                  <Region prefHeight="200.0" HBox.hgrow="ALWAYS" />
-                  <Button id="settingsButton" mnemonicParsing="false" onAction="#openSettings" />
-               </children>
-               <BorderPane.margin>
-                  <Insets right="10.0" />
-               </BorderPane.margin>
-            </HBox>
-         </top>
-         <center>
-            <Pane id="fxPanel" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
-         </center>
-      </BorderPane>
-   </children>
-</GridPane>

+ 0 - 81
out/production/OLIP2.0/ui/SettingsWindow.fxml

@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?import java.lang.*?>
-<?import javafx.geometry.*?>
-<?import javafx.scene.control.*?>
-<?import javafx.scene.layout.*?>
-<?import javafx.geometry.Insets?>
-<?import javafx.scene.control.Button?>
-<?import javafx.scene.control.CheckBox?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.ScrollBar?>
-<?import javafx.scene.control.TitledPane?>
-<?import javafx.scene.layout.ColumnConstraints?>
-<?import javafx.scene.layout.GridPane?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.Region?>
-<?import javafx.scene.layout.RowConstraints?>
-<?import javafx.scene.layout.VBox?>
-
-<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="600.0" vgap="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.SettingsWindow">
-  <columnConstraints>
-    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-  </columnConstraints>
-  <rowConstraints>
-    <RowConstraints maxHeight="226.0" minHeight="10.0" prefHeight="155.0" vgrow="SOMETIMES" />
-    <RowConstraints maxHeight="223.0" minHeight="10.0" prefHeight="214.0" vgrow="SOMETIMES" />
-    <RowConstraints maxHeight="101.0" minHeight="0.0" prefHeight="95.0" vgrow="SOMETIMES" />
-      <RowConstraints maxHeight="80.0" minHeight="10.0" prefHeight="47.0" vgrow="SOMETIMES" />
-  </rowConstraints>
-   <children>
-      <Button fx:id="saveButton" mnemonicParsing="false" onAction="#saveClicked" text="Ok" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER" />
-      <TitledPane animated="false" collapsible="false" text="Filling Hole" GridPane.columnSpan="2">
-         <content>
-            <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
-               <children>
-                  <Label prefHeight="54.0" prefWidth="359.0" text="Add a hole to the object. Helps filling water into the object after printing" wrapText="true" />
-                  <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
-                  <CheckBox fx:id="holeCheckBox" mnemonicParsing="false" onAction="#fillHoleChecked" />
-               </children>
-            </HBox>
-         </content>
-      </TitledPane>
-      <TitledPane animated="false" collapsible="false" text="Conductive Sizes" GridPane.columnSpan="2" GridPane.rowIndex="1">
-         <content>
-            <VBox prefHeight="200.0" prefWidth="100.0">
-               <children>
-                  <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
-                     <children>
-                        <Label fx:id="touchscreenLabel" text="Conductive dot diameter touchscreen: 4.0mm" wrapText="true" />
-                        <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
-                        <ScrollBar fx:id="touchscreenSlider" prefHeight="22.0" prefWidth="250.0" value="40.0" />
-                     </children>
-                  </HBox>
-                  <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
-                     <children>
-                        <Label fx:id="fingerLabel" text="Conducitve dot diameter finger: 4.0mm" wrapText="true" />
-                        <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
-                        <ScrollBar fx:id="fingerSlider" prefHeight="22.0" prefWidth="230.0" value="40.0" />
-                     </children>
-                  </HBox>
-               </children>
-            </VBox>
-         </content>
-      </TitledPane>
-      <TitledPane animated="false" collapsible="false" text="OpenSCAD" GridPane.columnSpan="2" GridPane.rowIndex="2">
-         <content>
-            <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
-               <children>
-                  <Label prefHeight="27.0" prefWidth="247.0" text="OpenSCAD Folder" wrapText="true" />
-                  <Button fx:id="scadPath" mnemonicParsing="false" onAction="#pathClicked" prefHeight="39.0" prefWidth="376.0" text="Button" />
-               </children>
-            </HBox>
-         </content>
-      </TitledPane>
-      <Button mnemonicParsing="false" onAction="#cancelSettings" text="Cancel" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER" />
-   </children>
-   <padding>
-      <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
-   </padding>
-</GridPane>

+ 50 - 35
src/ui/Main.java

@@ -33,6 +33,7 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.file.Path;
 import java.util.Collections;
 
 public class Main extends Application {
@@ -81,6 +82,8 @@ public class Main extends Application {
 			}
 		});
 
+		primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/pictures/offline_launch_icons.png")));
+
         Node nodeAccel = root.lookup("#accelerationPane");
         TitledPane pane = (TitledPane) nodeAccel;
         BorderPane borderPane = new BorderPane();
@@ -579,50 +582,62 @@ public class Main extends Application {
 
         //Load the settings.ini
 		File file = new File(olipPath + "settings.ini");
-		if (file.exists())
+		if (file.exists()) {
 			SettingsController.loadSettings();
+			Path openScadPath = Controller.getC().getOpenSCADPath();
+			if (openScadPath == null) {
+				searchForOpenScad();
+			} else if (!(new File(openScadPath.toUri()).exists()))
+				notDetected();
+			else if (System.getProperty("os.name").toLowerCase().contains("windows") && !(new File(openScadPath.toString(), "openscad.exe").exists()))
+				notDetected();
+		}
 		else {
 			//If there isn't a settings.ini file, create a new one and search if OpenSCAD is installed.
-			//Windows: exe typically under the given path.
-			if (System.getProperty("os.name").toLowerCase().contains("windows")) {
-				File openscadexe = new File("C:\\Program Files\\OpenSCAD\\openscad.exe");
-				if (openscadexe.exists())
-					Controller.getC().setOpenSCADPath(openscadexe.toPath().getParent());
-				else {
-					notDetected();
-				}
-			}
-			//Linux: OpenSCAD is visible globally, so check via command line
-			else if (System.getProperty("os.name").toLowerCase().contains("linux")) {
-				try {
-					Process p = Runtime.getRuntime().exec("which openscad");
-					p.waitFor();
-					BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
-					String s = in.readLine();
-					if (s != null) {
-						Controller.getC().setOpenSCADPath(new File(s).toPath());
-					}
-					else {
-						notDetected();
-					}
-				} catch (IOException | InterruptedException e1) {
-					e1.printStackTrace();
-				}
-			}
-			//MacOS: OpenSCAD is installed as an app, so look for in in the application folder
-			else if (System.getProperty("os.name").toLowerCase().contains("mac")) {
-				File openscadapp = new File("/Applications/OpenSCAD.app");
-				if (openscadapp.exists())
-					Controller.getC().setOpenSCADPath(new File(openscadapp.toPath().toString() + "/Contents/MacOS/").toPath());
-				else
-					notDetected();
-			}
+			searchForOpenScad();
 			SettingsController.saveSettings();
 		}
 
         launch(args);
     }
 
+    private static void searchForOpenScad(){
+		//Windows: exe typically under the given path.
+		if (System.getProperty("os.name").toLowerCase().contains("windows")) {
+			File openscadexe = new File("C:\\Program Files\\OpenSCAD\\openscad.exe");
+			if (openscadexe.exists())
+				Controller.getC().setOpenSCADPath(openscadexe.toPath().getParent());
+			else {
+				notDetected();
+			}
+		}
+		//Linux: OpenSCAD is visible globally, so check via command line
+		else if (System.getProperty("os.name").toLowerCase().contains("linux")) {
+			try {
+				Process p = Runtime.getRuntime().exec("which openscad");
+				p.waitFor();
+				BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
+				String s = in.readLine();
+				if (s != null) {
+					Controller.getC().setOpenSCADPath(new File(s).toPath());
+				}
+				else {
+					notDetected();
+				}
+			} catch (IOException | InterruptedException e1) {
+				e1.printStackTrace();
+			}
+		}
+		//MacOS: OpenSCAD is installed as an app, so look for in in the application folder
+		else if (System.getProperty("os.name").toLowerCase().contains("mac")) {
+			File openscadapp = new File("/Applications/OpenSCAD.app");
+			if (openscadapp.exists())
+				Controller.getC().setOpenSCADPath(new File(openscadapp.toPath().toString() + "/Contents/MacOS/").toPath());
+			else
+				notDetected();
+		}
+	}
+
     private void accelerationClicked() {
 		boolean disable = accelerationCheckBox.isSelected();