Browse Source

First Project Upload

Martin Herbers 5 years ago
parent
commit
036b2ce91b
53 changed files with 4985 additions and 0 deletions
  1. 4 0
      .gitignore
  2. 23 0
      .idea/compiler.xml
  3. 2 0
      .idea/description.html
  4. 5 0
      .idea/encodings.xml
  5. 7 0
      .idea/gradle.xml
  6. 12 0
      .idea/misc.xml
  7. 8 0
      .idea/modules.xml
  8. 125 0
      .idea/uiDesigner.xml
  9. 6 0
      .idea/vcs.xml
  10. 995 0
      .idea/workspace.xml
  11. 20 0
      OLIP2.0.iml
  12. 3 0
      src/META-INF/MANIFEST.MF
  13. 174 0
      src/OpenSCADFiles/acceleration.scad
  14. 205 0
      src/OpenSCADFiles/flip.scad
  15. 171 0
      src/OpenSCADFiles/iceFreezing.scad
  16. 167 0
      src/OpenSCADFiles/iceMelting.scad
  17. 217 0
      src/OpenSCADFiles/squeeze.scad
  18. 145 0
      src/OpenSCADFiles/tilt.scad
  19. 132 0
      src/OpenSCADFiles/weight.scad
  20. 114 0
      src/controller/Controller.java
  21. 353 0
      src/controller/Export.java
  22. 59 0
      src/controller/SettingsController.java
  23. 135 0
      src/model/Instructions.java
  24. 176 0
      src/model/Settings.java
  25. 108 0
      src/model/Specifications.java
  26. BIN
      src/pictures/acceleration.png
  27. BIN
      src/pictures/blue.PNG
  28. BIN
      src/pictures/cog.png
  29. BIN
      src/pictures/cyan.PNG
  30. BIN
      src/pictures/gray.PNG
  31. BIN
      src/pictures/green.PNG
  32. BIN
      src/pictures/information-icon-6086.png
  33. BIN
      src/pictures/lightBlue.PNG
  34. BIN
      src/pictures/loadingCircle.gif
  35. BIN
      src/pictures/pressure.png
  36. BIN
      src/pictures/red.PNG
  37. BIN
      src/pictures/rotation.png
  38. BIN
      src/pictures/save.png
  39. BIN
      src/pictures/simpleAcceleration.png
  40. BIN
      src/pictures/simpleFlip.png
  41. BIN
      src/pictures/simpleSqueeze.png
  42. BIN
      src/pictures/simpleTemperatureFreeze.png
  43. BIN
      src/pictures/simpleTemperatureMelt.png
  44. BIN
      src/pictures/simpleTilt.png
  45. BIN
      src/pictures/simpleWeight.png
  46. BIN
      src/pictures/temperature.png
  47. BIN
      src/pictures/weight.png
  48. 52 0
      src/ui/InformationWindow.fxml
  49. 895 0
      src/ui/Main.java
  50. 224 0
      src/ui/MainWindow.fxml
  51. 81 0
      src/ui/SettingsWindow.fxml
  52. 138 0
      src/ui/SettingsWindow.java
  53. 229 0
      src/ui/UIController.java

+ 4 - 0
.gitignore

@@ -1,6 +1,10 @@
 # ---> Java
 *.class
 
+#IntelliJ Files
+*/.idea/workspace.xml
+*/.idea/tasks.xml
+
 # Mobile Tools for Java (J2ME)
 .mtj.tmp/
 

+ 23 - 0
.idea/compiler.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <resourceExtensions />
+    <wildcardResourcePatterns>
+      <entry name="!?*.java" />
+      <entry name="!?*.form" />
+      <entry name="!?*.class" />
+      <entry name="!?*.groovy" />
+      <entry name="!?*.scala" />
+      <entry name="!?*.flex" />
+      <entry name="!?*.kt" />
+      <entry name="!?*.clj" />
+    </wildcardResourcePatterns>
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="false">
+        <processorPath useClasspath="true" />
+      </profile>
+    </annotationProcessing>
+  </component>
+</project>
+

+ 2 - 0
.idea/description.html

@@ -0,0 +1,2 @@
+<html>Simple <b>JavaFX 2.0</b> application that includes simple .fxml file with attached controller and Main class to quick start. Artifact to build JavaFX application is provided.
+</html>

+ 5 - 0
.idea/encodings.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+</project>
+

+ 7 - 0
.idea/gradle.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleSettings">
+    <option name="gradleHome" value="C:/Program Files (x86)/Gradle/gradle-1.0-rc-3" />
+  </component>
+</project>
+

+ 12 - 0
.idea/misc.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="ProjectKey">
+    <option name="state" value="project://e79810c8-c5c8-43b1-b19c-90c1f4095425" />
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/OLIP2.0.iml" filepath="$PROJECT_DIR$/OLIP2.0.iml" />
+    </modules>
+  </component>
+</project>

+ 125 - 0
.idea/uiDesigner.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
+

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 995 - 0
.idea/workspace.xml

@@ -0,0 +1,995 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ArtifactsWorkspaceSettings">
+    <artifacts-to-build>
+      <artifact name="OLIP2.0:jar" />
+    </artifacts-to-build>
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="cdb932d9-7e58-4d94-93a9-e7b232ef17da" name="Default" comment="" />
+    <ignored path="JavaFxApplication.iws" />
+    <ignored path=".idea/workspace.xml" />
+    <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="CreatePatchCommitExecutor">
+    <option name="PATCH_PATH" value="" />
+  </component>
+  <component name="DebuggerManager">
+    <breakpoint_any default_suspend_policy="SuspendAll" default_condition_enabled="true" converted="true">
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="SUSPEND" value="true" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="true" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="SUSPEND" value="true" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="true" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+    </breakpoint_any>
+    <ui_properties converted="true" />
+    <breakpoint_rules converted="true" />
+  </component>
+  <component name="FavoritesManager">
+    <favorites_list name="JavaFxApplication" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="450">
+      <file leaf-file-name="MainWindow.fxml" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/ui/MainWindow.fxml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="4200">
+              <caret line="168" column="26" lean-forward="false" selection-start-line="168" selection-start-column="26" selection-end-line="168" selection-end-column="26" />
+              <folding />
+            </state>
+          </provider>
+          <provider editor-type-id="JavaFX-Scene-Builder">
+            <state />
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="SettingsWindow.fxml" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/ui/SettingsWindow.fxml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="1175">
+              <caret line="47" column="47" lean-forward="false" selection-start-line="47" selection-start-column="24" selection-end-line="47" selection-end-column="47" />
+              <folding>
+                <marker date="1513788601917" expanded="true" signature="4335:4455" ph="..." />
+              </folding>
+            </state>
+          </provider>
+          <provider editor-type-id="JavaFX-Scene-Builder">
+            <state />
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="InformationWindow.fxml" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/ui/InformationWindow.fxml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="1150">
+              <caret line="46" column="22" lean-forward="false" selection-start-line="46" selection-start-column="22" selection-end-line="46" selection-end-column="22" />
+              <folding>
+                <marker date="1513793527057" expanded="true" signature="2153:2156" ph="..." />
+              </folding>
+            </state>
+          </provider>
+          <provider editor-type-id="JavaFX-Scene-Builder">
+            <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="842">
+              <caret line="526" column="41" lean-forward="false" selection-start-line="526" selection-start-column="41" selection-end-line="526" selection-end-column="41" />
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </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="1750">
+              <caret line="90" column="49" lean-forward="false" selection-start-line="90" selection-start-column="49" selection-end-line="90" selection-end-column="49" />
+              <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="5200">
+              <caret line="210" column="0" lean-forward="false" selection-start-line="210" selection-start-column="0" selection-end-line="210" selection-end-column="0" />
+              <folding>
+                <element signature="imports" 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="2350">
+              <caret line="100" column="27" lean-forward="false" selection-start-line="93" selection-start-column="16" selection-end-line="100" selection-end-column="27" />
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Class" />
+        <option value="FxmlFile" />
+      </list>
+    </option>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>saveObj</find>
+      <find>task</find>
+      <find>saveobj</find>
+      <find>fxPanel.getChildren().get(</find>
+      <find>cog</find>
+      <find>settings</find>
+    </findStrings>
+  </component>
+  <component name="FindManager">
+    <FindUsagesManager>
+      <setting name="OPEN_NEW_TAB" value="false" />
+    </FindUsagesManager>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="GradleLocalSettings">
+    <option name="externalProjectsViewState">
+      <projects_view />
+    </option>
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/src/sample/Main.java" />
+        <option value="$PROJECT_DIR$/src/sample/sample.fxml" />
+        <option value="$PROJECT_DIR$/src/main/Main.java" />
+        <option value="$PROJECT_DIR$/src/ui/sample.fxml" />
+        <option value="$PROJECT_DIR$/src/ui/AccelerationInformation.fxml" />
+        <option value="$PROJECT_DIR$/src/controller/Controller.java" />
+        <option value="$PROJECT_DIR$/src/controller/Export.java" />
+        <option value="$PROJECT_DIR$/src/ui/SettingsWindow.java" />
+        <option value="$PROJECT_DIR$/src/ui/SettingsWindow.fxml" />
+        <option value="$PROJECT_DIR$/src/ui/InformationWindow.fxml" />
+        <option value="$PROJECT_DIR$/src/ui/UIController.java" />
+        <option value="$PROJECT_DIR$/src/ui/MainWindow.fxml" />
+        <option value="$PROJECT_DIR$/src/ui/Main.java" />
+      </list>
+    </option>
+  </component>
+  <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="-8" />
+    <option name="y" value="-8" />
+    <option name="width" value="1612" />
+    <option name="height" value="876" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
+  <component name="ProjectReloadState">
+    <option name="STATE" value="0" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="Scratches" />
+      <pane id="AndroidView" />
+      <pane id="PackagesPane" />
+      <pane id="Scope" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="OLIP2.0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="OLIP2.0" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="OLIP2.0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="OLIP2.0" type="462c0819:PsiDirectoryNode" />
+              <item name="jars" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="OLIP2.0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="OLIP2.0" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="OLIP2.0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="OLIP2.0" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="controller" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="OLIP2.0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="OLIP2.0" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="pictures" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="OverrideImplement.combined" value="false" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="recentsLimit" value="5" />
+    <property name="MemberChooser.sorted" value="false" />
+    <property name="MemberChooser.showClasses" value="true" />
+    <property name="GoToClass.includeLibraries" value="false" />
+    <property name="dynamic.classpath" value="false" />
+    <property name="MemberChooser.copyJavadoc" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="project.structure.last.edited" value="Artifacts" />
+    <property name="project.structure.proportion" value="0.15625" />
+    <property name="project.structure.side.proportion" value="0.2" />
+    <property name="settings.editor.selected.configurable" value="project.propVCSSupport.Mappings" />
+  </component>
+  <component name="RecentsManager">
+    <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
+      <recent name="ui" />
+      <recent name="main" />
+    </key>
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="C:\Users\HairBears\IdeaProjects\OLIP2.0\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" selected="Application.Main">
+    <configuration name="Main" type="Application" factoryName="Application">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
+        <pattern>
+          <option name="PATTERN" value="ui.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="MAIN_CLASS_NAME" value="ui.Main" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="OLIP2.0" />
+      <envs />
+      <RunnerSettings RunnerId="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
+    </configuration>
+    <configuration default="true" type="Applet" factoryName="Applet">
+      <module />
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    </configuration>
+    <configuration default="true" type="Application" factoryName="Application">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="" />
+      <envs />
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <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="$PROJECT_DIR$" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="moduleWithDependencies" />
+      </option>
+      <envs />
+      <patterns />
+    </configuration>
+    <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
+      <module name="" />
+      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m" />
+      <option name="PROGRAM_PARAMETERS" />
+      <predefined_log_file id="idea.log" enabled="true" />
+    </configuration>
+    <configuration default="true" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="5005" />
+    </configuration>
+    <configuration default="true" type="TestNG" factoryName="TestNG">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <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="$PROJECT_DIR$" />
+      <option name="OUTPUT_DIRECTORY" />
+      <option name="ANNOTATION_TYPE" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="moduleWithDependencies" />
+      </option>
+      <option name="USE_DEFAULT_REPORTERS" value="false" />
+      <option name="PROPERTIES_FILE" />
+      <envs />
+      <properties />
+      <listeners />
+    </configuration>
+    <configuration default="true" type="DartUnitRunConfigurationType" factoryName="DartUnit">
+      <option name="VMOptions" />
+      <option name="arguments" />
+      <option name="filePath" />
+      <option name="scope" value="ALL" />
+      <option name="testName" />
+      <method />
+    </configuration>
+    <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
+      <Host>localhost</Host>
+      <Port>5050</Port>
+    </configuration>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false">
+    <option name="remove_strategy" value="false" />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="cdb932d9-7e58-4d94-93a9-e7b232ef17da" name="Default" comment="" />
+      <created>1359379246138</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1359379246138</updated>
+      <workItem from="1359379250712" duration="1302000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="1302000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-11" y="-11" width="3862" height="2122" extended-state="6" />
+    <layout>
+      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32968178" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.17239584" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="13" side_tool="false" content_ui="tabs" />
+      <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.11591512" sideWeight="0.6703755" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.1765625" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Profiler" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3296875" sideWeight="0.5" order="14" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="JetGradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Problems" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3296875" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+    </layout>
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
+    <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/ui/SettingsWindow.java</url>
+          <line>92</line>
+          <properties />
+          <option name="timeStamp" value="31" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/model/Settings.java</url>
+          <line>108</line>
+          <properties />
+          <option name="timeStamp" value="32" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/model/Settings.java</url>
+          <line>112</line>
+          <properties />
+          <option name="timeStamp" value="33" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/ui/Main.java</url>
+          <line>296</line>
+          <properties />
+          <option name="timeStamp" value="37" />
+        </line-breakpoint>
+      </breakpoints>
+      <option name="time" value="38" />
+    </breakpoint-manager>
+    <watches-manager />
+  </component>
+  <component name="antWorkspaceConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/model/Settings.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="575">
+          <caret line="23" column="40" lean-forward="false" selection-start-line="23" selection-start-column="40" selection-end-line="23" selection-end-column="40" />
+          <folding>
+            <element signature="e#2098#2099#0" expanded="true" />
+            <element signature="e#2122#2123#0" expanded="true" />
+            <element signature="e#2177#2178#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/controller/Controller.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2100">
+          <caret line="114" column="0" lean-forward="false" selection-start-line="114" selection-start-column="0" selection-end-line="114" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/controller/Export.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="7675">
+          <caret line="327" column="21" lean-forward="false" selection-start-line="327" selection-start-column="21" selection-end-line="327" selection-end-column="21" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/controller/SettingsController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="225">
+          <caret line="15" column="13" lean-forward="false" selection-start-line="15" selection-start-column="13" selection-end-line="15" 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="825">
+          <caret line="34" column="133" lean-forward="false" selection-start-line="34" selection-start-column="133" selection-end-line="34" selection-end-column="133" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="5000">
+          <caret line="235" column="47" lean-forward="false" selection-start-line="235" selection-start-column="47" selection-end-line="235" selection-end-column="47" />
+          <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="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/model/Settings.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="575">
+          <caret line="23" column="40" lean-forward="false" selection-start-line="23" selection-start-column="40" selection-end-line="23" selection-end-column="40" />
+          <folding>
+            <element signature="e#2098#2099#0" expanded="true" />
+            <element signature="e#2122#2123#0" expanded="true" />
+            <element signature="e#2177#2178#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/controller/Export.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="6775">
+          <caret line="291" column="0" lean-forward="false" selection-start-line="291" selection-start-column="0" selection-end-line="291" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/MainWindow.fxml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="3600">
+          <caret line="144" column="17" lean-forward="true" selection-start-line="144" selection-start-column="17" selection-end-line="144" selection-end-column="17" />
+          <folding />
+        </state>
+      </provider>
+      <provider editor-type-id="JavaFX-Scene-Builder">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/controller/Export.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="7000">
+          <caret line="300" column="25" lean-forward="true" selection-start-line="300" selection-start-column="25" selection-end-line="300" selection-end-column="25" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/MainWindow.fxml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1325">
+          <caret line="53" column="31" lean-forward="false" selection-start-line="53" selection-start-column="31" selection-end-line="53" selection-end-column="31" />
+          <folding />
+        </state>
+      </provider>
+      <provider editor-type-id="JavaFX-Scene-Builder">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="100">
+          <caret line="8" column="0" lean-forward="false" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/Controller.java" />
+    <entry file="file://$PROJECT_DIR$/src/ui/MainWindow.fxml">
+      <provider editor-type-id="text-editor">
+        <state relative-caret-position="1350">
+          <caret line="54" column="0" lean-forward="true" selection-start-line="54" selection-start-column="0" selection-end-line="54" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+      <provider selected="true" editor-type-id="JavaFX-Scene-Builder">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="100">
+          <caret line="8" column="0" lean-forward="false" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/Controller.java" />
+    <entry file="file://$PROJECT_DIR$/src/ui/MainWindow.fxml">
+      <provider editor-type-id="text-editor">
+        <state relative-caret-position="175">
+          <caret line="7" column="11" lean-forward="false" selection-start-line="7" selection-start-column="11" selection-end-line="7" selection-end-column="11" />
+          <folding />
+        </state>
+      </provider>
+      <provider selected="true" editor-type-id="JavaFX-Scene-Builder">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/Main.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="100">
+          <caret line="8" column="0" lean-forward="false" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/MainWindow.fxml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="175">
+          <caret line="7" column="11" lean-forward="true" selection-start-line="7" selection-start-column="11" selection-end-line="7" selection-end-column="11" />
+          <folding />
+        </state>
+      </provider>
+      <provider editor-type-id="JavaFX-Scene-Builder">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/Controller.java" />
+    <entry file="file://$PROJECT_DIR$/src/ui/Controller.java" />
+    <entry file="jar://C:/Program Files/Java/jdk1.8.0_66/javafx-src.zip!/com/sun/glass/ui/win/WinApplication.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="822">
+          <caret line="142" column="24" lean-forward="false" selection-start-line="142" selection-start-column="24" selection-end-line="142" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://C:/Program Files/Java/jdk1.8.0_66/javafx-src.zip!/com/sun/javafx/sg/prism/NGSubScene.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="518">
+          <caret line="207" column="0" lean-forward="false" selection-start-line="207" selection-start-column="0" selection-end-line="207" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://C:/Program Files/Java/jdk1.8.0_66/src.zip!/javax/swing/Timer.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-7">
+          <caret line="149" column="13" lean-forward="false" selection-start-line="149" selection-start-column="13" selection-end-line="149" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://C:/Program Files/Java/jdk1.8.0_66/javafx-src.zip!/javafx/fxml/FXMLLoader.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1490">
+          <caret line="1772" column="0" lean-forward="false" selection-start-line="1772" selection-start-column="0" selection-end-line="1772" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/model/Specifications.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="500">
+          <caret line="21" column="13" lean-forward="false" selection-start-line="21" selection-start-column="13" selection-end-line="21" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://C:/Program Files/Java/jdk1.8.0_66/javafx-src.zip!/javafx/beans/value/ChangeListener.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="975">
+          <caret line="62" column="9" lean-forward="false" selection-start-line="62" selection-start-column="9" selection-end-line="62" selection-end-column="9" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/model/Instructions.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="825">
+          <caret line="34" column="133" lean-forward="false" selection-start-line="34" selection-start-column="133" selection-end-line="34" selection-end-column="133" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/controller/SettingsController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="225">
+          <caret line="15" column="13" lean-forward="false" selection-start-line="15" selection-start-column="13" selection-end-line="15" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/information-icon-6086.png">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="jar://C:/Program Files/Java/jdk1.8.0_66/javafx-src.zip!/javafx/concurrent/Task.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1172">
+          <caret line="1461" column="0" lean-forward="false" selection-start-line="1461" selection-start-column="0" selection-end-line="1461" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/acceleration.png">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/openscadAcceleration.PNG" />
+    <entry file="file://$PROJECT_DIR$/src/model/Settings.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1093">
+          <caret line="112" column="0" lean-forward="false" selection-start-line="112" selection-start-column="0" selection-end-line="112" selection-end-column="0" />
+          <folding>
+            <element signature="e#2098#2099#0" expanded="true" />
+            <element signature="e#2122#2123#0" expanded="true" />
+            <element signature="e#2177#2178#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/SettingsWindow.fxml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1175">
+          <caret line="47" column="47" lean-forward="false" selection-start-line="47" selection-start-column="24" selection-end-line="47" selection-end-column="47" />
+          <folding>
+            <marker date="1513788601917" expanded="true" signature="4335:4455" ph="..." />
+          </folding>
+        </state>
+      </provider>
+      <provider editor-type-id="JavaFX-Scene-Builder">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/simpleAcceleration.png">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/controller/Controller.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="900">
+          <caret line="44" column="16" lean-forward="false" selection-start-line="44" selection-start-column="16" selection-end-line="44" selection-end-column="16" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/simpleTemperatureFreeze.png">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/red.PNG">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/simpleSqueeze.png">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/InformationWindow.fxml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1150">
+          <caret line="46" column="22" lean-forward="false" selection-start-line="46" selection-start-column="22" selection-end-line="46" selection-end-column="22" />
+          <folding>
+            <marker date="1513793527057" expanded="true" signature="2153:2156" ph="..." />
+          </folding>
+        </state>
+      </provider>
+      <provider editor-type-id="JavaFX-Scene-Builder">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/simpleTemperatureMelt.png">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pictures/weight.png">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="jar://C:/Program Files/Java/jdk1.8.0_66/javafx-src.zip!/javafx/event/Event.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1322">
+          <caret line="197" column="0" lean-forward="false" selection-start-line="197" selection-start-column="0" selection-end-line="197" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/SettingsWindow.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2350">
+          <caret line="100" column="27" lean-forward="false" selection-start-line="93" selection-start-column="16" selection-end-line="100" selection-end-column="27" />
+          <folding>
+            <element signature="imports" 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="5200">
+          <caret line="210" column="0" lean-forward="false" selection-start-line="210" selection-start-column="0" selection-end-line="210" selection-end-column="0" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ui/MainWindow.fxml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="4200">
+          <caret line="168" column="26" lean-forward="false" selection-start-line="168" selection-start-column="26" selection-end-line="168" selection-end-column="26" />
+          <folding />
+        </state>
+      </provider>
+      <provider editor-type-id="JavaFX-Scene-Builder">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/controller/Export.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1750">
+          <caret line="90" column="49" lean-forward="false" selection-start-line="90" selection-start-column="49" selection-end-line="90" selection-end-column="49" />
+          <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="842">
+          <caret line="526" column="41" lean-forward="false" selection-start-line="526" selection-start-column="41" selection-end-line="526" selection-end-column="41" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ArtifactsStructureConfigurable.UI">
+        <settings>
+          <artifact-editor />
+          <last-edited>OLIP2.0:jar</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+                <option value="0.5" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="FacetStructureConfigurable.UI">
+        <settings>
+          <last-edited>No facets are configured</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="GlobalLibrariesConfigurable.UI">
+        <settings>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="JdkListConfigurable.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ModuleStructureConfigurable.UI">
+        <settings>
+          <last-edited>OLIP2.0</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+      <state key="ProjectLibrariesConfigurable.UI">
+        <settings>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>

+ 20 - 0
OLIP2.0.iml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/jars/jimStlMeshImporterJFX.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+  </component>
+</module>

+ 3 - 0
src/META-INF/MANIFEST.MF

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

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

+ 114 - 0
src/controller/Controller.java

@@ -0,0 +1,114 @@
+package controller;
+
+import java.nio.file.Path;
+
+import model.Settings;
+import model.Settings.Temp;
+import model.Settings.Tilt;
+
+/**
+ * Controller class that connects the view with the model.
+ * @author Martin Herbers
+ *
+ */
+public class Controller {
+
+	private static Settings settings = Settings.getSettings();
+	
+	private static Controller controller = new Controller();
+	
+	
+	
+	public static Controller getC() {
+		return controller;
+	}
+	
+	
+	public void acceleration(boolean enable) {
+		if (enable)
+      		settings.addAcceleration();
+      	else
+      		settings.removeAcceleration();
+	}
+	
+	public void setAcceleration(double a) {
+		settings.setAcceleration(a);
+	}
+	
+	public void weight(boolean enable) {
+		if (enable)
+      		settings.addWeight();
+      	else
+      		settings.removeWeight();
+	}
+	
+	public void setWeight(int w) {
+		settings.setWeight(w);
+	}
+	
+	public void temperature(boolean enable) {
+		if (enable)
+      		settings.addTemperature();
+      	else
+      		settings.removeTemperature();
+	}
+	
+	public void setTemperature(Temp t) {
+		settings.setTemperature(t);
+	}
+	
+	public void tilt(boolean enable) {
+		if (enable)
+      		settings.addTilt();
+      	else
+      		settings.removeTilt();
+	}
+	
+	public void setTilt(Tilt t) {
+		settings.setTilting(t);
+	}
+	
+	public void squeeze(boolean enable) {
+		if (enable)
+      		settings.addSqueeze();
+      	else
+      		settings.removeSqueeze();
+	}
+
+
+	public void setFill(boolean selected) {
+		settings.setFill(selected);
+	}
+	
+	public boolean getFill() {
+		return settings.getFill();
+	}
+
+	public void setSizeScreen(float f) {
+		settings.setSizeScreen(f);
+	}
+	
+	public float getSizeScreen() {
+		return settings.getSizeScreen();
+	}
+	
+	public void setSizeFinger(float f) {
+		settings.setSizeFinger(f);
+	}
+	
+	public float getSizeFinger() {
+		return settings.getSizeFinger();
+	}
+	
+	public void setOpenSCADPath(Path p) {
+		settings.setOpenSCADPath(p);
+	}
+
+	public Path getOpenSCADPath() {
+		return settings.getOpenSCADPath();
+	}
+	
+	//ADD CODE HERE FOR ADDITIONAL INTERACTION
+	//Only connect model and view, similar to those above
+	
+}

+ 353 - 0
src/controller/Export.java

<
@@ -0,0 +1,353 @@
+package controller;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.List;
+
+import model.Instructions;
+import model.Settings;
+import model.Settings.Temp;
+import model.Settings.Tilt;
+import model.Specifications;
+import ui.Main;
+
+/**
+ * The Export-Class that creates the STLs, instructions and the Android-file.
+ * @author Martin Herbers
+ *
+ */
+public class Export {
+	
+	private static Settings settings = Settings.getSettings();
+	//Depending on the OS, a path with spaces needs different symbols around it. E.g. Windows: "C:\program files\" or MacOS: '/Applications/'
+	private static String pathComma;
+
+	
+	public static void createSTL() {	
+		
+		//Set the console's chaining/parallel starting syntax and the "PathComma" depending on the OS
+		String start = "";
+		if (System.getProperty("os.name").contains("Windows")) {
+			start = " && start ";
+			pathComma = "\"";
+		}
+		else if (System.getProperty("os.name").contains("Linux")) {
+			start = " & ";
+			pathComma = "\"";
+		}
+		else if (System.getProperty("os.name").toLowerCase().contains("mac")) {
+			start = " && open -a ";
+			pathComma = "'";
+		}
+		
+		//Part the command in 5 parts that get additions depending on which object got chosen
+		//comFolder changes the directory to the .exe on Windows or the binary file in MacOs. Not needed in Linux
+		String comFolder = "cd " + pathComma + settings.getOpenSCADPath() + pathComma;
+		//Line for the full non-conductive object
+		String comLine =  start + "openscad "+ (System.getProperty("os.name").toLowerCase().contains("mac")?"-W -n --args ":"") +"-o " + pathComma + System.getProperty("user.dir") + File.separator + "output.stl"+ pathComma + " ";
+		//Line for all conductive parts
+		String comLine2 = start + "openscad "+ (System.getProperty("os.name").toLowerCase().contains("mac")?"-W -n --args ":"") +"-o " + pathComma + System.getProperty("user.dir") + File.separator + "output_conductive.stl" + pathComma + " ";
+		//Line for the non-conductive part for cross-section view
+		String comLine3 = start + "openscad "+ (System.getProperty("os.name").toLowerCase().contains("mac")?"-W -n --args ":"") +"-o " + pathComma + System.getProperty("user.dir") + File.separator + "output_crossSection.stl" + pathComma + " ";
+		//Line for the conducive parts for cross-section view
+		String comLine4 = start + "openscad "+ (System.getProperty("os.name").toLowerCase().contains("mac")?"-W -n --args ":"") +"-o " + pathComma + System.getProperty("user.dir") + File.separator + "output_crossSection_conductive.stl" + pathComma + " ";
+		//Instructions that will be added to the .txt file
+		List<String> instructions = null;
+		//Specification of the selected object, used for the android app to show the correct shape
+		List<String> android = null;
+		//Copy the OpenSCAD-file temporarily from the .jar, otherwise it can't be used by OpenSCAD.
+		File tempFile = null;
+		
+		//If weight is selected...
+		if (settings.isWeight()) {
+			tempFile = new File("weight.scad");
+			//Copy the .scad file
+			try {
+				InputStream in = Export.class.getResourceAsStream("/OpenSCADFiles/weight.scad");
+				OutputStream out = new FileOutputStream(tempFile);
+				int read;
+				byte[] bytes = new byte[1024];
+
+				while ((read = in.read(bytes)) != -1) {
+					out.write(bytes, 0, read);
+				}
+				in.close();
+				out.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			//Add the necessary variables to the command line arguments
+			int walls = Math.round(settings.getWeight()/27);
+			comLine += "-D numberSupports=" + walls + " -D conductive=false -D crossSection=false -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "weight.scad" + pathComma;
+			comLine2+= "-D numberSupports=" + walls + " -D conductive=true -D crossSection=false -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "weight.scad" + pathComma;
+			comLine3+= "-D numberSupports=" + walls + " -D conductive=false -D crossSection=true -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "weight.scad" + pathComma;
+			comLine4+= "-D numberSupports=" + walls + " -D conductive=true -D crossSection=true -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "weight.scad" + pathComma;
+			instructions = Instructions.getWeightInstruction();
+			android = Specifications.getWeightSpecs();
+		}
+		
+		else if (settings.isAcceleration()) {
+				tempFile = new File("acceleration.scad");
+				try {
+					InputStream in = Export.class.getResourceAsStream("/OpenSCADFiles/acceleration.scad");
+					OutputStream out = new FileOutputStream(tempFile);
+					int read;
+					byte[] bytes = new byte[1024];
+
+					while ((read = in.read(bytes)) != -1) {
+						out.write(bytes, 0, read);
+					}
+					in.close();
+					out.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+			double height = (settings.getAcceleration()<8?10:18);//TODO function from acceleration to wall height? linear? exponential? something else?
+			comLine += "-D wallHeight=" + height + " -D conductive=false -D crossSection=false -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "acceleration.scad" + pathComma;
+			comLine2+= "-D wallHeight=" + height + " -D conductive=true -D crossSection=false -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "acceleration.scad" + pathComma;
+			comLine3+= "-D wallHeight=" + height + " -D conductive=false -D crossSection=true -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "acceleration.scad" + pathComma;
+			comLine4+= "-D wallHeight=" + height + " -D conductive=true -D crossSection=true -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "acceleration.scad" + pathComma;
+			instructions = Instructions.getAccelerationInstruction();
+			android = Specifications.getAccelerationSpecs();
+		}
+		
+		else if (settings.isSqueeze()) {
+				tempFile = new File("squeeze.scad");
+				try {
+					InputStream in = Export.class.getResourceAsStream("/OpenSCADFiles/squeeze.scad");
+					OutputStream out = new FileOutputStream(tempFile);
+					int read;
+					byte[] bytes = new byte[1024];
+
+					while ((read = in.read(bytes)) != -1) {
+						out.write(bytes, 0, read);
+					}
+					in.close();
+					out.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+			comLine += "-D conductive=false -D crossSection=false -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "squeeze.scad" + pathComma;
+			comLine2+= "-D conductive=true -D crossSection=false -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "squeeze.scad" + pathComma;
+			comLine3+= "-D conductive=false -D crossSection=true -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "squeeze.scad" + pathComma;
+			comLine4+= "-D conductive=true -D crossSection=true -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "squeeze.scad" + pathComma;
+			instructions = Instructions.getSqueezeInstruction();
+			android = Specifications.getSqueezeSpecs();
+		}
+		
+		else if (settings.isTemperature()) {
+			if (settings.getTemperature() == Temp.OVER0) {
+					tempFile = new File("iceMelting.scad");
+					try {
+						InputStream in = Export.class.getResourceAsStream("/OpenSCADFiles/iceMelting.scad");
+						OutputStream out = new FileOutputStream(tempFile);
+						int read;
+						byte[] bytes = new byte[1024];
+
+						while ((read = in.read(bytes)) != -1) {
+							out.write(bytes, 0, read);
+						}
+						in.close();
+						out.close();
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+				
+				comLine += "-D conductive=false -D crossSection=false -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "iceMelting.scad" + pathComma;
+				comLine2+= "-D conductive=true -D crossSection=false -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "iceMelting.scad" + pathComma; 
+				comLine3+= "-D conductive=false -D crossSection=true -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "iceMelting.scad" + pathComma; 
+				comLine4+= "-D conductive=true -D crossSection=true -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "iceMelting.scad" + pathComma;
+				instructions = Instructions.getTemperatureMeltInstruction();
+				android = Specifications.getTemperatureMeltSpecs();
+			}
+			else {
+					tempFile = new File("iceFreezing.scad");
+					try {
+						InputStream in = Export.class.getResourceAsStream("/OpenSCADFiles/iceFreezing.scad");
+						OutputStream out = new FileOutputStream(tempFile);
+						int read;
+						byte[] bytes = new byte[1024];
+
+						while ((read = in.read(bytes)) != -1) {
+							out.write(bytes, 0, read);
+						}
+						in.close();
+						out.close();
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+					
+				comLine += "-D conductive=false -D crossSection=false -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "iceFreezing.scad" + pathComma;  
+				comLine2+= "-D conductive=true -D crossSection=false -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "iceFreezing.scad" + pathComma;  
+				comLine3+= "-D conductive=false -D crossSection=true -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "iceFreezing.scad" + pathComma;   
+				comLine4+= "-D conductive=true -D crossSection=true -D fillLater="+ settings.getFill() +" -D sizeScreen=" + settings.getSizeScreen() + " -D sizeFinger=" + settings.getSizeFinger() + " " + pathComma + System.getProperty("user.dir") + File.separator + "iceFreezing.scad" + pathComma;  
+				instructions = Instructions.getTemperatureFreezeInstruction();
+				android = Specifications.getTemperatureFreezeSpecs();
+			}
+		}
+		
+		else if (settings.isTilt()) {
+			if (settings.getTilting().equals(Tilt.FLIP)) {
+					tempFile = new File("flip.scad");
+					try {
+						InputStream in = Export.class.getResourceAsStream("/OpenSCADFiles/flip.scad");
+						OutputStream out = new FileOutputStream(tempFile);
+						int read;
+						byte[] bytes = new byte[1024];
+
+						while ((read = in.read(bytes)) != -1) {
+							out.write(bytes, 0, read);