Browse Source

Code cleanup, Icon changed

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

+ 382 - 0
.idea/workspace.xml

@@ -0,0 +1,382 @@
+<?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>

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

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

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

@@ -0,0 +1,174 @@
+//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();
+    }
+}

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

@@ -0,0 +1,205 @@
+//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();
+    }
+}

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

@@ -0,0 +1,171 @@
+//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();
+    }
+}

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

@@ -0,0 +1,167 @@
+//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();
+    }
+}

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

@@ -0,0 +1,217 @@
+//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();
+    }
+}

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

@@ -0,0 +1,145 @@
+//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();
+    }
+}

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

@@ -0,0 +1,132 @@
+//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


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

@@ -0,0 +1,52 @@
+<?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>

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

@@ -0,0 +1,228 @@
+<?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>

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

@@ -0,0 +1,81 @@
+<?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>

+ 1 - 1
src/controller/Export.java

@@ -257,7 +257,7 @@ public class Export {
 				//Commandline addition for each view-part
 				//Instructions-text and object-specification
 		
-		if (instructions == null || android == null)
+		if (instructions == null)
 			return;
 
 		String[] arguments = new String[3];

BIN
src/pictures/offline_launch_icons.png


+ 26 - 54
src/ui/Main.java

@@ -11,14 +11,12 @@ import javafx.application.Platform;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.concurrent.Task;
-import javafx.event.EventHandler;
 import javafx.fxml.FXMLLoader;
 import javafx.geometry.Pos;
 import javafx.scene.*;
 import javafx.scene.control.*;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
-import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.*;
 import javafx.scene.paint.Color;
 import javafx.scene.paint.PhongMaterial;
@@ -55,16 +53,11 @@ public class Main extends Application {
     private static boolean detected = true;
 
     private CheckBox accelerationCheckBox;
-    private Label accelerationLabel;
-    private CheckBox weightCheckBox;
-    private Label weightLabel;
-    private CheckBox tempCheckBox;
-    private Label tempLabel;
-    private CheckBox tiltingCheckBox;
-    private Label rotationLabel;
-    private CheckBox pressureCheckBox;
-    private Label pressureLabel;
-    private Button createObjectButton;
+	private CheckBox weightCheckBox;
+	private CheckBox tempCheckBox;
+	private CheckBox tiltingCheckBox;
+	private CheckBox pressureCheckBox;
+	private Button createObjectButton;
     private ComboBox<String> comboBox;
     private Pane fxPanel;
     private Group rootGroup;
@@ -88,24 +81,17 @@ public class Main extends Application {
 			}
 		});
 
-        primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/pictures/offline_launch_icons.png")));
-
-        UIController.setPath(getClass().getResource("/pictures/acceleration.png").toString().replace("acceleration.png", ""));
-
         Node nodeAccel = root.lookup("#accelerationPane");
         TitledPane pane = (TitledPane) nodeAccel;
         BorderPane borderPane = new BorderPane();
         accelerationCheckBox = new CheckBox();
         borderPane.setLeft(accelerationCheckBox);
         BorderPane.setAlignment(accelerationCheckBox, Pos.CENTER_LEFT);
-        accelerationLabel = new Label(" Acceleration");
+		Label accelerationLabel = new Label(" Acceleration");
 
-        accelerationLabel.setOnMouseClicked(new EventHandler<MouseEvent>() {
-			@Override
-			public void handle(MouseEvent event) {
-				accelerationCheckBox.setSelected(!accelerationCheckBox.isSelected());
-				accelerationClicked();
-			}
+        accelerationLabel.setOnMouseClicked(event -> {
+			accelerationCheckBox.setSelected(!accelerationCheckBox.isSelected());
+			accelerationClicked();
 		});
         Image imgAccelSymbol = new Image(getClass().getResource("/pictures/acceleration.png").toString());
 		ImageView imViewAccelSymbol = new ImageView(imgAccelSymbol);
@@ -125,13 +111,10 @@ public class Main extends Application {
         weightCheckBox = new CheckBox();
         borderPaneWeight.setLeft(weightCheckBox);
 		BorderPane.setAlignment(weightCheckBox, Pos.CENTER_LEFT);
-        weightLabel = new Label(" Load");
-        weightLabel.setOnMouseClicked(new EventHandler<MouseEvent>() {
-			@Override
-			public void handle(MouseEvent event) {
-				weightCheckBox.setSelected(!weightCheckBox.isSelected());
-				weightClicked();
-			}
+		Label weightLabel = new Label(" Load");
+        weightLabel.setOnMouseClicked(event -> {
+			weightCheckBox.setSelected(!weightCheckBox.isSelected());
+			weightClicked();
 		});
 		Image imgWeightSymbol = new Image(getClass().getResource("/pictures/weight.png").toString());
 		ImageView imViewWeightSymbol = new ImageView(imgWeightSymbol);
@@ -151,13 +134,10 @@ public class Main extends Application {
         tempCheckBox = new CheckBox();
         borderPaneTemp.setLeft(tempCheckBox);
 		BorderPane.setAlignment(tempCheckBox, Pos.CENTER_LEFT);
-        tempLabel = new Label(" Temperature");
-		tempLabel.setOnMouseClicked(new EventHandler<MouseEvent>() {
-			@Override
-			public void handle(MouseEvent event) {
-				tempCheckBox.setSelected(!tempCheckBox.isSelected());
-				temperatureClicked();
-			}
+		Label tempLabel = new Label(" Temperature");
+		tempLabel.setOnMouseClicked(event -> {
+			tempCheckBox.setSelected(!tempCheckBox.isSelected());
+			temperatureClicked();
 		});
 		Image imgTempSymbol = new Image(getClass().getResource("/pictures/temperature.png").toString());
 		ImageView imViewTempSymbol = new ImageView(imgTempSymbol);
@@ -180,13 +160,10 @@ public class Main extends Application {
         tiltingCheckBox = new CheckBox();
         borderPaneRotation.setLeft(tiltingCheckBox);
 		BorderPane.setAlignment(tiltingCheckBox, Pos.CENTER_LEFT);
-        rotationLabel = new Label(" Tilting");
-        rotationLabel.setOnMouseClicked(new EventHandler<MouseEvent>() {
-			@Override
-			public void handle(MouseEvent event) {
-				tiltingCheckBox.setSelected(!tiltingCheckBox.isSelected());
-				tiltingClicked();
-			}
+		Label rotationLabel = new Label(" Tilting");
+        rotationLabel.setOnMouseClicked(event -> {
+			tiltingCheckBox.setSelected(!tiltingCheckBox.isSelected());
+			tiltingClicked();
 		});
 		Image imgRotationSymbol = new Image(getClass().getResource("/pictures/rotation.png").toString());
 		ImageView imViewRotationSymbol = new ImageView(imgRotationSymbol);
@@ -206,13 +183,10 @@ public class Main extends Application {
         pressureCheckBox = new CheckBox();
         borderPanePressure.setLeft(pressureCheckBox);
 		BorderPane.setAlignment(pressureCheckBox, Pos.CENTER_LEFT);
-        pressureLabel = new Label(" Pressure");
-        pressureLabel.setOnMouseClicked(new EventHandler<MouseEvent>() {
-			@Override
-			public void handle(MouseEvent event) {
-				pressureCheckBox.setSelected(!pressureCheckBox.isSelected());
-				pressureClicked();
-			}
+		Label pressureLabel = new Label(" Pressure");
+        pressureLabel.setOnMouseClicked(event -> {
+			pressureCheckBox.setSelected(!pressureCheckBox.isSelected());
+			pressureClicked();
 		});
 		Image imgPressureSymbol = new Image(getClass().getResource("/pictures/pressure.png").toString());
 		ImageView imViewPressureSymbol = new ImageView(imgPressureSymbol);
@@ -417,9 +391,7 @@ public class Main extends Application {
 					return null;
 				}
 			};
-			task.setOnSucceeded( e -> {
-				glassPane.setVisible(false);
-			});
+			task.setOnSucceeded( e -> glassPane.setVisible(false));
 			task.setOnRunning(e -> {
 				glassPane.setVisible(true);
 				clearView((SubScene) fxPanel.getChildren().get(0));

+ 8 - 21
src/ui/SettingsWindow.java

@@ -3,8 +3,6 @@ package ui;
 import controller.Controller;
 import controller.SettingsController;
 import javafx.application.Platform;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
 import javafx.concurrent.Task;
 import javafx.fxml.FXML;
 import javafx.scene.control.Button;
@@ -38,31 +36,20 @@ public class SettingsWindow {
 		window = this;
 	}
 
-	public static SettingsWindow getWindow() {
+	static SettingsWindow getWindow() {
 		return window;
 	}
 
-	protected void setUpListener() {
+	void setUpListener() {
 		holeCheckBox.setSelected(Controller.getC().getFill());
 		touchscreenSlider.setValue(Controller.getC().getSizeScreen() * 10);
 		touchscreenScrolled();
 		fingerSlider.setValue(Controller.getC().getSizeFinger() * 10);
 		fingerScrolled();
-		String s = Controller.getC().getOpenSCADPath().toString();
 		scadPath.setText(Controller.getC().getOpenSCADPath().toString());
 
-		touchscreenSlider.valueProperty().addListener(new ChangeListener<Number>() {
-			@Override
-			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
-				touchscreenScrolled();
-			}
-		});
-		fingerSlider.valueProperty().addListener(new ChangeListener<Number>() {
-			@Override
-			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
-				fingerScrolled();
-			}
-		});
+		touchscreenSlider.valueProperty().addListener((observable, oldValue, newValue) -> touchscreenScrolled());
+		fingerSlider.valueProperty().addListener((observable, oldValue, newValue) -> fingerScrolled());
 	}
 
 	@FXML
@@ -71,13 +58,13 @@ public class SettingsWindow {
 	}
 
 	@FXML
-	protected void touchscreenScrolled() {
+	private void touchscreenScrolled() {
 		Controller.getC().setSizeScreen(Math.round(touchscreenSlider.getValue())/10f);
 		touchscreenLabel.setText("Conductive dot diameter touchscreen: "+ Math.round(touchscreenSlider.getValue())/10f+"mm");
 	}
 
 	@FXML
-	protected void fingerScrolled() {
+	private void fingerScrolled() {
 		Controller.getC().setSizeFinger(Math.round(fingerSlider.getValue())/10f);
 		fingerLabel.setText("Conductive dot diameter finger: "+ Math.round(fingerSlider.getValue())/10f +"mm");
 	}
@@ -86,7 +73,7 @@ public class SettingsWindow {
 	protected void pathClicked() {
 		Task task = new Task() {
 			@Override
-			protected Void call() throws Exception {
+			protected Void call() {
 				DirectoryChooser chooser = new DirectoryChooser();
 				Platform.runLater(() -> {
 							File file = chooser.showDialog(stage);
@@ -116,7 +103,7 @@ public class SettingsWindow {
 		stage.close();
 	}
 
-	public void setStage(Stage stage) {
+	void setStage(Stage stage) {
 		this.stage = stage;
 	}
 }

+ 0 - 9
src/ui/UIController.java

@@ -1,6 +1,5 @@
 package ui;
 
-import javafx.application.Platform;
 import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
@@ -17,14 +16,6 @@ public class UIController  {
 	private Parent root;
 	private Stage stage;
 
-	private static String path;
-
-
-
-	public static void setPath(String p) {
-		path = p;
-	}
-
 	public UIController() {
 		try {
 			root = FXMLLoader.load(getClass().getResource("InformationWindow.fxml"));