Browse Source

Uupdate 09 2024

Volker Philippent 1 year ago
parent
commit
c6dcee7361
100 changed files with 1868 additions and 10220 deletions
  1. 0 99
      2d3d/Alten-Alpenverein.svg
  2. 0 59
      2d3d/Among-SUS.svg
  3. 0 58
      2d3d/Flaschenoeffner-final.svg
  4. 0 71
      2d3d/Flaschenoeffner.svg
  5. 0 133
      2d3d/IG-KLETTERN-Logo-embroider-Rohdaten.svg
  6. 0 338
      2d3d/IG-KLETTERN-Logo-embroider.svg
  7. 0 338
      2d3d/IG-KLETTERN-Logo-embroider.svg.2021_10_28_10_04_32.0.svg
  8. 0 9
      2d3d/IG-KLETTERN-Logo.svg
  9. 0 59
      2d3d/Inkscape-Workshop.htm
  10. BIN
      2d3d/Quarto2021/Luer-Konus.jpg
  11. 0 77
      2d3d/Quarto2021/Spielstein.scad
  12. 0 106
      2d3d/Quarto2021/Spielstein2.scad
  13. 0 2
      2d3d/SRAM/LICENSE.txt
  14. 0 1
      2d3d/SRAM/README.txt
  15. BIN
      2d3d/SRAM/files/SRAM_ADJUSTMENT_TOOL.f3d
  16. 0 2505
      2d3d/SRAM/files/SRAM_ADJUSTMENT_TOOL.step
  17. 0 227
      2d3d/Steckrohr.svg
  18. 0 120
      2d3d/Tough_Belt_Clip(T212873)/tough_belt_clip.scad
  19. 0 170
      2d3d/VESA Kamerahalter.svg
  20. 0 85
      2d3d/auslass.scad
  21. 0 31
      2d3d/campingbox.scad
  22. 0 38
      2d3d/deflationcap.scad
  23. 0 70
      2d3d/dice-d6.scad
  24. 0 3112
      2d3d/dicetower.svg
  25. 0 23
      2d3d/extrusion-joint.json
  26. 0 74
      2d3d/extrusion-joint.scad
  27. 0 34
      2d3d/inkscape.md
  28. 0 33
      2d3d/kocher-pressure.scad
  29. 0 58
      2d3d/kocherdeckel.scad
  30. 0 23
      2d3d/quarto.scad
  31. 0 40
      2d3d/rohrreiniger.scad
  32. 0 21
      2d3d/scad-utils/LICENSE
  33. 0 81
      2d3d/scad-utils/README.md
  34. 0 324
      2d3d/scad-utils/hull.scad
  35. 0 32
      2d3d/scad-utils/linalg.scad
  36. 0 48
      2d3d/scad-utils/lists.scad
  37. 0 30
      2d3d/scad-utils/mirror.scad
  38. 0 109
      2d3d/scad-utils/morphology.scad
  39. 0 60
      2d3d/scad-utils/se3.scad
  40. 0 16
      2d3d/scad-utils/shapes.scad
  41. 0 82
      2d3d/scad-utils/so3.scad
  42. 0 113
      2d3d/scad-utils/spline.scad
  43. 0 43
      2d3d/scad-utils/trajectory.scad
  44. 0 89
      2d3d/scad-utils/trajectory_path.scad
  45. 0 43
      2d3d/scad-utils/transformations.scad
  46. 0 2
      2d3d/sum.scad
  47. 0 57
      2d3d/sus.svg
  48. 0 404
      2d3d/threads.scad
  49. 0 13
      2d3d/turm.scad
  50. 0 47
      2d3d/winkelverbinder.json
  51. 0 118
      2d3d/winkelverbinder.scad
  52. 0 78
      2d3d/zapfen2.scad
  53. 217 0
      AbsperrSchieber-160.svg
  54. 116 0
      Balance_Wuerfel.svg
  55. 103 0
      Beamer Stativ Halterung.svg
  56. 0 0
      Borletti/0_BORLETTI-Kodierscheibe-V2.dxf
  57. 0 0
      Borletti/0_BORLETTI-Kodierscheibe-V2.svg
  58. 0 0
      Borletti/0_borletti.scad
  59. 0 0
      Borletti/borletti-2-zickzack.svg
  60. 0 0
      Borletti/borletti-3-zickzack.svg
  61. 0 0
      Borletti/borletti-4-zickzack.svg
  62. 0 0
      Borletti/borletti-lycrastich.svg
  63. 0 0
      Borletti/borletti-overlock.svg
  64. 0 0
      Borletti/borletti-universal.svg
  65. 0 0
      Borletti/borletti.scad
  66. 0 0
      Borletti/kontrolle-blindstich.svg
  67. 0 0
      Calibrationtest.scad
  68. 0 0
      Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/1-update.SH4
  69. 0 0
      Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/2-V2_P316_CTB_ZNP04_F23.CBD
  70. 0 0
      Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/3-mars2-mainboard.txt
  71. 0 0
      Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/mars2ChiTu CN Mainboard SpecificationV3.0.920200902.gcode.txt
  72. 0 0
      Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/UI/4-MARS 2 Multi-Language-UI_ 2020914.bin
  73. 0 0
      Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/UI/5-MARS 2 Boot-Interface 480x320.logo
  74. 79 0
      Frontplatte-11kW.svg
  75. 47 0
      Halter-Laserfuss.svg
  76. 26 375
      IG-KLETTERN-Logo-embroider.svg
  77. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.dst
  78. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.exp
  79. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.jef
  80. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.pec
  81. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.pes
  82. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.svg
  83. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.txt
  84. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.u01
  85. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.vp3
  86. 0 0
      IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider_threadlist.txt
  87. 106 0
      Kindergarten-Puzzle-Kalender.1.svg
  88. 48 0
      Kindergarten-Puzzle-Kalender.2.svg
  89. 47 0
      Kindergarten-Schiene-Verbinder.2d.svg
  90. 9 0
      Kindergarten-Schiene-Verbinder.3d.scad
  91. 61 0
      Kindergarten-Schiene.svg
  92. 0 0
      Kreis-rund-1920.svg
  93. 244 0
      Lasercutter/Druckluft.svg
  94. 83 0
      Lasercutter/Halter2Schleppkette.svg
  95. 285 0
      Lasercutter/LaserfussDuplo-V2.svg
  96. 43 0
      Lasercutter/Laserhalter-Pur.svg
  97. 44 22
      Lasercutter/Lichtschranke.svg
  98. 1 2
      Lasercutter/MontagePlatte-Fest.svg
  99. 11 18
      Lasercutter/MotorHalter.svg
  100. 298 0
      Lasercutter/NeutrikPanel.svg

File diff suppressed because it is too large
+ 0 - 99
2d3d/Alten-Alpenverein.svg


File diff suppressed because it is too large
+ 0 - 59
2d3d/Among-SUS.svg


+ 0 - 58
2d3d/Flaschenoeffner-final.svg

@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   width="210mm"
-   height="297mm"
-   viewBox="0 0 210 297"
-   version="1.1"
-   id="svg938"
-   inkscape:version="1.1 (1:1.1+202105261517+ce6663b3b7)"
-   sodipodi:docname="Flaschenoeffner-final.svg"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:svg="http://www.w3.org/2000/svg">
-  <sodipodi:namedview
-     id="namedview940"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     inkscape:pagecheckerboard="0"
-     inkscape:document-units="mm"
-     showgrid="false"
-     inkscape:zoom="4.8751298"
-     inkscape:cx="90.664253"
-     inkscape:cy="999.97338"
-     inkscape:window-width="2560"
-     inkscape:window-height="1390"
-     inkscape:window-x="1920"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="layer1"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:object-paths="true"
-     inkscape:snap-midpoints="false"
-     inkscape:object-nodes="true"
-     inkscape:snap-nodes="true">
-    <sodipodi:guide
-       position="25.611132,33.980571"
-       orientation="0,-1"
-       id="guide1313" />
-  </sodipodi:namedview>
-  <defs
-     id="defs935" />
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       id="rect1311"
-       style="opacity:0.65;fill:#00ff00;stroke-width:0.279157"
-       d="m 18.111333,241.90361 c -4.155,0 -7.499801,3.34531 -7.499801,7.50031 v 30.75004 c 2.12166,16.1142 27.621116,-0.68904 20.586862,-3.50056 H 26.1403 v -13.63397 h 9.255764 c 1.06992,0 1.93115,-0.76538 1.93115,-1.71618 v -2.98018 c 0,-0.2072 -0.0474,-0.40293 -0.12247,-0.58653 v 0 c 0.12247,-6.94202 -7.86496,-15.58408 -19.093411,-15.83293 z m 0,4.75007 c 1.518752,-1.2e-4 2.750055,1.23095 2.750219,2.7497 1.22e-4,1.51896 -1.231265,2.75034 -2.750219,2.75022 -1.518955,1.2e-4 -2.750341,-1.23126 -2.75022,-2.75022 1.64e-4,-1.51875 1.231467,-2.74982 2.75022,-2.7497 z m 0,29.99972 c 1.518954,-1.2e-4 2.750341,1.23127 2.750219,2.75022 1.22e-4,1.51895 -1.231265,2.75034 -2.750219,2.75022 -1.518955,1.2e-4 -2.750341,-1.23127 -2.75022,-2.75022 -1.21e-4,-1.51895 1.231265,-2.75034 2.75022,-2.75022 z"
-       sodipodi:nodetypes="csccccsssccccccccccccc" />
-  </g>
-</svg>

+ 0 - 71
2d3d/Flaschenoeffner.svg

@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   width="210mm"
-   height="297mm"
-   viewBox="0 0 210 297"
-   version="1.1"
-   id="svg5"
-   inkscape:version="1.1 (1:1.1+202105261517+ce6663b3b7)"
-   sodipodi:docname="Flaschenoeffner.svg"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:svg="http://www.w3.org/2000/svg">
-  <sodipodi:namedview
-     id="namedview7"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     inkscape:pagecheckerboard="0"
-     inkscape:document-units="mm"
-     showgrid="false"
-     inkscape:snap-midpoints="true"
-     inkscape:lockguides="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-bbox="false"
-     inkscape:bbox-nodes="false"
-     inkscape:object-nodes="true"
-     inkscape:snap-others="true"
-     inkscape:snap-bbox-edge-midpoints="false"
-     inkscape:snap-intersection-paths="true"
-     inkscape:object-paths="false"
-     inkscape:snap-smooth-nodes="true"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:snap-nodes="true"
-     inkscape:zoom="4.8623526"
-     inkscape:cx="129.56691"
-     inkscape:cy="176.45779"
-     inkscape:window-width="2560"
-     inkscape:window-height="1390"
-     inkscape:window-x="1920"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="layer1" />
-  <defs
-     id="defs2" />
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       id="rect1311"
-       style="opacity:0.65;fill:#00ff00;stroke-width:1.05508"
-       d="m 74.818359,75.574303 c -15.703935,0 -28.345703,12.643718 -28.345703,28.347657 l 0,116.22062 c 0,37.31918 52.70912,26.8628 71.808594,18.89647 v -11.33789 h -15.11719 v -17.00781 -15.44922 h 36.98242 c 4.0438,0 7.29883,-2.89276 7.29883,-6.48633 v -11.26367 c 0,-0.78313 -0.17924,-1.52291 -0.46289,-2.2168 v 0 C 147.44531,149.03974 117.2566,76.514863 74.818359,75.574303 Z m 0,17.953041 c 5.740168,-4.59e-4 10.393911,4.652408 10.394532,10.392576 4.58e-4,5.74093 -4.653601,10.39499 -10.394532,10.39453 -5.74093,4.6e-4 -10.394989,-4.6536 -10.394531,-10.39453 6.21e-4,-5.740167 4.654364,-10.393034 10.394531,-10.392576 z m 0,113.384766 c 5.740931,-4.6e-4 10.39499,4.6536 10.394532,10.39453 4.58e-4,5.74093 -4.653601,10.39499 -10.394532,10.39453 -5.74093,4.6e-4 -10.394989,-4.6536 -10.394531,-10.39453 -4.58e-4,-5.74093 4.653601,-10.39499 10.394531,-10.39453 z"
-       transform="scale(0.26458333)"
-       sodipodi:nodetypes="csccccccsssccccccccccccc" />
-    <path
-       id="rect1311-8"
-       style="opacity:0.65;fill:#00ff00;stroke-width:0.279157"
-       d="m 93.420671,25.886301 c -4.155,0 -7.4998,3.345317 -7.4998,7.500317 v 34.999931 c 0,4.154997 3.3448,7.499797 7.4998,7.499797 h 7.499799 3.99976 v -2.99981 h -3.99976 v -4.499987 -2.500107 h 9.78493 c 1.06992,0 1.93115,-0.765376 1.93115,-1.716174 v -4.56768 c 0,-0.950798 -0.86123,-1.716174 -1.93115,-1.716174 h -9.78493 V 33.386618 c 0,-4.155 -3.344799,-7.500317 -7.499799,-7.500317 z m 0,7.250203 a 2.75,2.75 0 0 1 2.75022,2.749702 2.75,2.75 0 0 1 -2.75022,2.75022 2.75,2.75 0 0 1 -2.75022,-2.75022 2.75,2.75 0 0 1 2.75022,-2.749702 z m 0,29.999719 a 2.75,2.75 0 0 1 2.75022,2.750219 2.75,2.75 0 0 1 -2.75022,2.75022 2.75,2.75 0 0 1 -2.75022,-2.75022 2.75,2.75 0 0 1 2.75022,-2.750219 z" />
-    <path
-       style="font-variation-settings:normal;opacity:0.65;vector-effect:none;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.279157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
-       d="m 100.92047,57.886414 -0.69458,-27.666452 12.29622,28.797134 z"
-       id="path2217-8"
-       sodipodi:nodetypes="cccc" />
-  </g>
-</svg>

File diff suppressed because it is too large
+ 0 - 133
2d3d/IG-KLETTERN-Logo-embroider-Rohdaten.svg


File diff suppressed because it is too large
+ 0 - 338
2d3d/IG-KLETTERN-Logo-embroider.svg


File diff suppressed because it is too large
+ 0 - 338
2d3d/IG-KLETTERN-Logo-embroider.svg.2021_10_28_10_04_32.0.svg


File diff suppressed because it is too large
+ 0 - 9
2d3d/IG-KLETTERN-Logo.svg


+ 0 - 59
2d3d/Inkscape-Workshop.htm

@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Inkscape Workshop</title>
-    <link href="favicon.png" rel="icon" type="image/png"/>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-    <style type="text/css">
-      @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
-      @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
-      @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);
-
-      body { font-family: 'Droid Serif'; }
-      h1, h2, h3 {
-        font-family: 'Yanone Kaffeesatz';
-        font-weight: normal;
-      }
-      .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
-    </style>
-  </head>
-  <body>
-    <textarea id="source">
-
-class: center, middle
-
-# Inkscape Workshop
-
-Volker @OWBA
-
-???
-
----
-
-# Agenda
-
-1. **Roomtour**  
-   Rundgang durchs Tool
-1. **Relevante Konfiguration**
-1. **Arbeiten mit Inkscape**
-1. **Copypaste, Duplikate und Stempel**
-1. **Path Math**  
-   Mengenlehre mit Objekten/Pfaden
-1. **Ausrichten und einrasten**  
-   oder einrichten und ausrasten?
-1. **Trampelpfade**  
-   Vektoren zu Fuß
-
-Bei Fragen: fragen.
----
-
-# Introduction
-
-    </textarea>
-    <script src="https://remarkjs.com/downloads/remark-latest.min.js" type="text/javascript">
-    </script>
-    <script type="text/javascript">
-      var slideshow = remark.create();
-    </script>
-  </body>
-</html>

BIN
2d3d/Quarto2021/Luer-Konus.jpg


+ 0 - 77
2d3d/Quarto2021/Spielstein.scad

@@ -1,77 +0,0 @@
-/* [OpenSCAD] */
-$fn=90;
-
-/* [Spielstein] */
-// Form, Größe, Füllung
-Form = 0; // [0:Eckig, 1:Rund]
-Size = 1; // [0:Klein, 1:Groß]
-Hut = 0; // [0:Nein, 1:Ja]
-
-/* [Spielstein] */
-// Loch für Magnet im Fuß
-Magnet = 0; // [0:Nein, 1:Ja]
-
-/* [Hidden] */
-
-module piece(f, s, h) {
-}
-
-
-module fuss() {
-  hull() {
-    translate([0,0,1]) rotate_extrude() translate([9,0]) circle(d=2);
-    cylinder(d=20, h=0.01, center=false);
-  }
-  cylinder(d=6, h=10);
-}
-
-module wuerfel() {
-  // https://reprap.org/forum/read.php?247,458171,458591#msg-458591
-  w=90-acos(sqrt(2/3)); // Winkel der Raumdiagonale
-  scale(20/sqrt(3)) for (i=[0:60:360]) {
-    rotate([0, w, i]) translate([-sqrt(2)/2, 0, 0.5]) rotate([0, 0, 45]) cube(1, center=true);
-  }
-}
-
-module hut() {
-  cylinder(d=8, h=1);
-  cylinder(d=5, h=4);
-}
-
-module eckig(hut) {
-  fuss();
-  wuerfel();
-  if (hut==1) translate([0,0,18]) scale(1/3) wuerfel();
-}
-
-module rund(hut) {
-  fuss();
-  translate([0,0,10]) sphere(d=20);
-  if (hut==1) translate([0,0,21]) scale(1/3) sphere(d=20);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////
-
-difference() {
-  union() {
-    if (Form==0) {
-      if (Size==0) {
-        scale(1/sqrt(2)) eckig(Hut);
-      }
-      else {
-        eckig(Hut);
-      }
-    }
-    else {
-      if (Size==0) {
-        scale(1/sqrt(2)) rund(Hut);
-      }
-      else {
-        rund(Hut);
-      }
-    }
-  }
-  if (Magnet==1) {
-    translate([0,0,-0.01]) cylinder(d=3, h=5.5);
-  }
-}

+ 0 - 106
2d3d/Quarto2021/Spielstein2.scad

@@ -1,106 +0,0 @@
-/* [OpenSCAD] */
-$fn=90;
-
-//* [Spielstein] */
-// Form, Größe, Füllung
-//Form = 0; // [0:Eckig, 1:Rund]
-//Size = 1; // [0:Klein, 1:Groß]
-//Hohl = 0; // [0:Nein, 1:Ja]
-
-/* [Maße] */
-// Breite bzw. Durchmesser
-Breite = 20; 
-// Höhe [lang, kurz] +5mm
-Hoehe = [20, 30];
-
-/* [Spielstein] */
-// Loch für Magnet im Fuß
-Magnet = 0; // [0:Nein, 1:Ja]
-
-/* [Hidden] */
-
-/////////////////////////////////////////////////////////////
-
-translate([0,15,0]) spielstein(0,0,0);
-translate([30,15,0]) spielstein(0,0,1);
-translate([60,15,0]) spielstein(0,1,0);
-translate([90,15,0]) spielstein(0,1,1);
-translate([0,-15,0]) spielstein(1,0,0);
-translate([30,-15,0]) spielstein(1,0,1);
-translate([60,-15,0]) spielstein(1,1,0);
-translate([90,-15,0]) spielstein(1,1,1);
-
-/////////////////////////////////////////////////////////////
-
-// Param: Form, Size, Hohl
-module spielstein(F,S,H) {
-  difference() {
-    union() {
-      if (F==0) {
-        eckig(F,S,H);
-      }
-      else {
-        rund(F,S,H);
-      }
-    }
-    if (Magnet==1) {
-      translate([0,0,-0.01]) union() {
-        cylinder(d=3, h=5);
-        translate([0,0,5]) cylinder(d1=3, d2=1, h=1.5);
-      }
-      rotate([90,0,0]) cylinder(d=1, h=2*Breite, center=true);
-      rotate([90,0,90]) cylinder(d=1, h=2*Breite, center=true);
-      translate([0,0,0.5*Hoehe[S]]) cylinder(d=1, h=2*Hoehe[S], center=true);
-      // Luer-Konus fuer Spritze
-      translate([0,0,0.75]) mirror([0,0,1]) cylinder(d1=4.0, d2=4.3, h=7.5); 
-    }
-  }
-}
-
-module eckig_umfang(hoehe) {
-  Kanten_Radius = 1.5;
-  hull() {
-    for (i=[0:90:360]) {  
-      rotate([0,0,i]) translate([ (Breite/2-Kanten_Radius), (Breite/2-Kanten_Radius), 0]) cylinder(r=Kanten_Radius, h=hoehe);
-    }
-  }
-}
-module oben(F){
-  intersection(){
-    translate([0,0,-20]) sphere(25);
-    if (F==1) {
-      translate([0,0,3]) cylinder(d=Breite, h=6, center=true);
-    } 
-    else {
-      eckig_umfang(6);
-    }
-  }
-}
-
-module eckig(F,S,H) {
-  difference() {
-    hull() {
-      translate([0,0,Hoehe[S]]) oben(F);
-      eckig_umfang(2);
-    }
-    if (H==1) { 
-      translate([0,0,Hoehe[S]+5]) cylinder(d=8, h=10, center=true);
-    }
-    translate([0,0,8]) for (i=[0:90:360]) {
-      rotate([0,0,i]) translate([Breite/2,0,0]) rotate([90,0,0]) cylinder(d=2, h=2*Breite, center=true);
-    }
-  }
-}
-
-module rund(F,S,H) {
-  difference() {
-    hull() {
-      translate([0,0,Hoehe[S]]) oben(F);
-      translate([0,0,1]) cylinder(d=Breite, h=2, center=true);
-    }
-    if (H==1) { 
-      translate([0,0,Hoehe[S]+5]) cylinder(d=8, h=10, center=true);
-    }
-    translate([0,0,8]) rotate_extrude() translate([Breite/2,0]) circle(d=2);
-  }
-}

+ 0 - 2
2d3d/SRAM/LICENSE.txt

@@ -1,2 +0,0 @@
-Liscened to El Manu 
- License: cc

+ 0 - 1
2d3d/SRAM/README.txt

@@ -1 +0,0 @@
-Creator: El Manu

BIN
2d3d/SRAM/files/SRAM_ADJUSTMENT_TOOL.f3d


+ 0 - 2505
2d3d/SRAM/files/SRAM_ADJUSTMENT_TOOL.step

@@ -1,2505 +0,0 @@
-ISO-10303-21;
-HEADER;
-/* Generated by software containing ST-Developer
- * from STEP Tools, Inc. (www.steptools.com) 
- */
-
-FILE_DESCRIPTION(
-/* description */ (''),
-/* implementation_level */ '2;1');
-
-FILE_NAME(
-/* name */ 
-'/var/folders/z_/wsl5zgpn6qg78k5jddhtjl6h0000gn/T/com.autodesk.mas.fus
-ion360/Neutron/db7839d8-a053-42c9-9e13-9abb25ff4674.stp',
-/* time_stamp */ '2018-07-20T18:24:56+02:00',
-/* author */ ('manuel.paulin'),
-/* organization */ (''),
-/* preprocessor_version */ 'ST-DEVELOPER v17',
-/* originating_system */ 'Autodesk Translation Framework v7.1.0.215',
-/* authorisation */ '');
-
-FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }'));
-ENDSEC;
-
-DATA;
-#10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#13),#2408);
-#11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#2415,#12);
-#12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#14),#2407);
-#13=STYLED_ITEM('',(#2424),#14);
-#14=MANIFOLD_SOLID_BREP('Body1',#1400);
-#15=FACE_BOUND('',#254,.T.);
-#16=FACE_BOUND('',#272,.T.);
-#17=CIRCLE('',#1416,4.00000000000001);
-#18=CIRCLE('',#1417,4.00000000000001);
-#19=CIRCLE('',#1420,25.);
-#20=CIRCLE('',#1421,25.);
-#21=CIRCLE('',#1424,4.);
-#22=CIRCLE('',#1425,4.);
-#23=CIRCLE('',#1428,25.);
-#24=CIRCLE('',#1429,25.);
-#25=CIRCLE('',#1432,4.);
-#26=CIRCLE('',#1433,4.);
-#27=CIRCLE('',#1436,25.);
-#28=CIRCLE('',#1437,25.);
-#29=CIRCLE('',#1440,4.);
-#30=CIRCLE('',#1441,4.);
-#31=CIRCLE('',#1444,25.);
-#32=CIRCLE('',#1445,25.);
-#33=CIRCLE('',#1448,4.);
-#34=CIRCLE('',#1449,4.);
-#35=CIRCLE('',#1452,25.);
-#36=CIRCLE('',#1453,25.);
-#37=CIRCLE('',#1456,3.99999999999999);
-#38=CIRCLE('',#1457,3.99999999999999);
-#39=CIRCLE('',#1460,3.99999999999999);
-#40=CIRCLE('',#1461,3.99999999999999);
-#41=CIRCLE('',#1464,25.);
-#42=CIRCLE('',#1465,25.);
-#43=CIRCLE('',#1467,5.);
-#44=CIRCLE('',#1468,18.);
-#45=CIRCLE('',#1470,105.);
-#46=CIRCLE('',#1471,105.);
-#47=CIRCLE('',#1474,4.00000000000001);
-#48=CIRCLE('',#1475,4.00000000000001);
-#49=CIRCLE('',#1478,105.);
-#50=CIRCLE('',#1479,105.);
-#51=CIRCLE('',#1482,4.00000000000003);
-#52=CIRCLE('',#1483,4.00000000000003);
-#53=CIRCLE('',#1486,4.00000000000007);
-#54=CIRCLE('',#1487,4.00000000000007);
-#55=CIRCLE('',#1490,105.);
-#56=CIRCLE('',#1491,105.);
-#57=CIRCLE('',#1494,3.99999999999999);
-#58=CIRCLE('',#1495,3.99999999999999);
-#59=CIRCLE('',#1498,41.5);
-#60=CIRCLE('',#1499,41.5);
-#61=CIRCLE('',#1502,40.5);
-#62=CIRCLE('',#1503,40.5);
-#63=CIRCLE('',#1505,41.5);
-#64=CIRCLE('',#1506,41.5);
-#65=CIRCLE('',#1509,4.00000000000009);
-#66=CIRCLE('',#1510,4.00000000000009);
-#67=CIRCLE('',#1513,60.);
-#68=CIRCLE('',#1514,4.99999999999999);
-#69=CIRCLE('',#1517,4.99999999999999);
-#70=CIRCLE('',#1519,60.);
-#71=CIRCLE('',#1520,60.);
-#72=CIRCLE('',#1522,5.);
-#73=CIRCLE('',#1524,27.5);
-#74=CIRCLE('',#1525,26.);
-#75=CIRCLE('',#1526,5.);
-#76=CIRCLE('',#1527,4.);
-#77=CIRCLE('',#1530,26.);
-#78=CIRCLE('',#1532,27.5);
-#79=CIRCLE('',#1534,27.5);
-#80=CIRCLE('',#1535,5.);
-#81=CIRCLE('',#1536,4.99999999999999);
-#82=CIRCLE('',#1537,50.);
-#83=CIRCLE('',#1538,5.);
-#84=CIRCLE('',#1540,4.);
-#85=CIRCLE('',#1543,5.);
-#86=CIRCLE('',#1545,27.5);
-#87=CIRCLE('',#1547,5.);
-#88=CIRCLE('',#1550,18.);
-#89=CIRCLE('',#1552,5.);
-#90=CIRCLE('',#1555,5.);
-#91=CIRCLE('',#1557,50.);
-#92=CIRCLE('',#1559,4.99999999999999);
-#93=CYLINDRICAL_SURFACE('',#1415,4.00000000000001);
-#94=CYLINDRICAL_SURFACE('',#1419,25.);
-#95=CYLINDRICAL_SURFACE('',#1423,4.);
-#96=CYLINDRICAL_SURFACE('',#1427,25.);
-#97=CYLINDRICAL_SURFACE('',#1431,4.);
-#98=CYLINDRICAL_SURFACE('',#1435,25.);
-#99=CYLINDRICAL_SURFACE('',#1439,4.);
-#100=CYLINDRICAL_SURFACE('',#1443,25.);
-#101=CYLINDRICAL_SURFACE('',#1447,4.);
-#102=CYLINDRICAL_SURFACE('',#1451,25.);
-#103=CYLINDRICAL_SURFACE('',#1455,3.99999999999999);
-#104=CYLINDRICAL_SURFACE('',#1459,3.99999999999999);
-#105=CYLINDRICAL_SURFACE('',#1463,25.);
-#106=CYLINDRICAL_SURFACE('',#1469,105.);
-#107=CYLINDRICAL_SURFACE('',#1473,4.00000000000001);
-#108=CYLINDRICAL_SURFACE('',#1477,105.);
-#109=CYLINDRICAL_SURFACE('',#1481,4.00000000000003);
-#110=CYLINDRICAL_SURFACE('',#1485,4.00000000000007);
-#111=CYLINDRICAL_SURFACE('',#1489,105.);
-#112=CYLINDRICAL_SURFACE('',#1493,3.99999999999999);
-#113=CYLINDRICAL_SURFACE('',#1497,41.5);
-#114=CYLINDRICAL_SURFACE('',#1501,40.5);
-#115=CYLINDRICAL_SURFACE('',#1504,41.5);
-#116=CYLINDRICAL_SURFACE('',#1508,4.00000000000009);
-#117=CYLINDRICAL_SURFACE('',#1516,4.99999999999999);
-#118=CYLINDRICAL_SURFACE('',#1518,60.);
-#119=CYLINDRICAL_SURFACE('',#1529,26.);
-#120=CYLINDRICAL_SURFACE('',#1539,4.);
-#121=CYLINDRICAL_SURFACE('',#1542,5.);
-#122=CYLINDRICAL_SURFACE('',#1544,27.5);
-#123=CYLINDRICAL_SURFACE('',#1546,5.);
-#124=CYLINDRICAL_SURFACE('',#1549,18.);
-#125=CYLINDRICAL_SURFACE('',#1551,5.);
-#126=CYLINDRICAL_SURFACE('',#1554,5.);
-#127=CYLINDRICAL_SURFACE('',#1556,50.);
-#128=CYLINDRICAL_SURFACE('',#1558,4.99999999999999);
-#129=FACE_OUTER_BOUND('',#200,.T.);
-#130=FACE_OUTER_BOUND('',#201,.T.);
-#131=FACE_OUTER_BOUND('',#202,.T.);
-#132=FACE_OUTER_BOUND('',#203,.T.);
-#133=FACE_OUTER_BOUND('',#204,.T.);
-#134=FACE_OUTER_BOUND('',#205,.T.);
-#135=FACE_OUTER_BOUND('',#206,.T.);
-#136=FACE_OUTER_BOUND('',#207,.T.);
-#137=FACE_OUTER_BOUND('',#208,.T.);
-#138=FACE_OUTER_BOUND('',#209,.T.);
-#139=FACE_OUTER_BOUND('',#210,.T.);
-#140=FACE_OUTER_BOUND('',#211,.T.);
-#141=FACE_OUTER_BOUND('',#212,.T.);
-#142=FACE_OUTER_BOUND('',#213,.T.);
-#143=FACE_OUTER_BOUND('',#214,.T.);
-#144=FACE_OUTER_BOUND('',#215,.T.);
-#145=FACE_OUTER_BOUND('',#216,.T.);
-#146=FACE_OUTER_BOUND('',#217,.T.);
-#147=FACE_OUTER_BOUND('',#218,.T.);
-#148=FACE_OUTER_BOUND('',#219,.T.);
-#149=FACE_OUTER_BOUND('',#220,.T.);
-#150=FACE_OUTER_BOUND('',#221,.T.);
-#151=FACE_OUTER_BOUND('',#222,.T.);
-#152=FACE_OUTER_BOUND('',#223,.T.);
-#153=FACE_OUTER_BOUND('',#224,.T.);
-#154=FACE_OUTER_BOUND('',#225,.T.);
-#155=FACE_OUTER_BOUND('',#226,.T.);
-#156=FACE_OUTER_BOUND('',#227,.T.);
-#157=FACE_OUTER_BOUND('',#228,.T.);
-#158=FACE_OUTER_BOUND('',#229,.T.);
-#159=FACE_OUTER_BOUND('',#230,.T.);
-#160=FACE_OUTER_BOUND('',#231,.T.);
-#161=FACE_OUTER_BOUND('',#232,.T.);
-#162=FACE_OUTER_BOUND('',#233,.T.);
-#163=FACE_OUTER_BOUND('',#234,.T.);
-#164=FACE_OUTER_BOUND('',#235,.T.);
-#165=FACE_OUTER_BOUND('',#236,.T.);
-#166=FACE_OUTER_BOUND('',#237,.T.);
-#167=FACE_OUTER_BOUND('',#238,.T.);
-#168=FACE_OUTER_BOUND('',#239,.T.);
-#169=FACE_OUTER_BOUND('',#240,.T.);
-#170=FACE_OUTER_BOUND('',#241,.T.);
-#171=FACE_OUTER_BOUND('',#242,.T.);
-#172=FACE_OUTER_BOUND('',#243,.T.);
-#173=FACE_OUTER_BOUND('',#244,.T.);
-#174=FACE_OUTER_BOUND('',#245,.T.);
-#175=FACE_OUTER_BOUND('',#246,.T.);
-#176=FACE_OUTER_BOUND('',#247,.T.);
-#177=FACE_OUTER_BOUND('',#248,.T.);
-#178=FACE_OUTER_BOUND('',#249,.T.);
-#179=FACE_OUTER_BOUND('',#250,.T.);
-#180=FACE_OUTER_BOUND('',#251,.T.);
-#181=FACE_OUTER_BOUND('',#252,.T.);
-#182=FACE_OUTER_BOUND('',#253,.T.);
-#183=FACE_OUTER_BOUND('',#255,.T.);
-#184=FACE_OUTER_BOUND('',#256,.T.);
-#185=FACE_OUTER_BOUND('',#257,.T.);
-#186=FACE_OUTER_BOUND('',#258,.T.);
-#187=FACE_OUTER_BOUND('',#259,.T.);
-#188=FACE_OUTER_BOUND('',#260,.T.);
-#189=FACE_OUTER_BOUND('',#261,.T.);
-#190=FACE_OUTER_BOUND('',#262,.T.);
-#191=FACE_OUTER_BOUND('',#263,.T.);
-#192=FACE_OUTER_BOUND('',#264,.T.);
-#193=FACE_OUTER_BOUND('',#265,.T.);
-#194=FACE_OUTER_BOUND('',#266,.T.);
-#195=FACE_OUTER_BOUND('',#267,.T.);
-#196=FACE_OUTER_BOUND('',#268,.T.);
-#197=FACE_OUTER_BOUND('',#269,.T.);
-#198=FACE_OUTER_BOUND('',#270,.T.);
-#199=FACE_OUTER_BOUND('',#271,.T.);
-#200=EDGE_LOOP('',(#880,#881,#882,#883));
-#201=EDGE_LOOP('',(#884,#885,#886,#887));
-#202=EDGE_LOOP('',(#888,#889,#890,#891));
-#203=EDGE_LOOP('',(#892,#893,#894,#895));
-#204=EDGE_LOOP('',(#896,#897,#898,#899));
-#205=EDGE_LOOP('',(#900,#901,#902,#903));
-#206=EDGE_LOOP('',(#904,#905,#906,#907));
-#207=EDGE_LOOP('',(#908,#909,#910,#911));
-#208=EDGE_LOOP('',(#912,#913,#914,#915));
-#209=EDGE_LOOP('',(#916,#917,#918,#919));
-#210=EDGE_LOOP('',(#920,#921,#922,#923));
-#211=EDGE_LOOP('',(#924,#925,#926,#927));
-#212=EDGE_LOOP('',(#928,#929,#930,#931));
-#213=EDGE_LOOP('',(#932,#933,#934,#935));
-#214=EDGE_LOOP('',(#936,#937,#938,#939));
-#215=EDGE_LOOP('',(#940,#941,#942,#943));
-#216=EDGE_LOOP('',(#944,#945,#946,#947));
-#217=EDGE_LOOP('',(#948,#949,#950,#951));
-#218=EDGE_LOOP('',(#952,#953,#954,#955));
-#219=EDGE_LOOP('',(#956,#957,#958,#959));
-#220=EDGE_LOOP('',(#960,#961,#962,#963));
-#221=EDGE_LOOP('',(#964,#965,#966,#967));
-#222=EDGE_LOOP('',(#968,#969,#970,#971));
-#223=EDGE_LOOP('',(#972,#973,#974,#975));
-#224=EDGE_LOOP('',(#976,#977,#978,#979));
-#225=EDGE_LOOP('',(#980,#981,#982,#983));
-#226=EDGE_LOOP('',(#984,#985,#986,#987,#988,#989,#990,#991,#992,#993,#994,
-#995,#996,#997,#998,#999,#1000,#1001,#1002,#1003,#1004,#1005,#1006,#1007,
-#1008,#1009,#1010,#1011,#1012));
-#227=EDGE_LOOP('',(#1013,#1014,#1015,#1016));
-#228=EDGE_LOOP('',(#1017,#1018,#1019,#1020));
-#229=EDGE_LOOP('',(#1021,#1022,#1023,#1024));
-#230=EDGE_LOOP('',(#1025,#1026,#1027,#1028));
-#231=EDGE_LOOP('',(#1029,#1030,#1031,#1032));
-#232=EDGE_LOOP('',(#1033,#1034,#1035,#1036));
-#233=EDGE_LOOP('',(#1037,#1038,#1039,#1040));
-#234=EDGE_LOOP('',(#1041,#1042,#1043,#1044));
-#235=EDGE_LOOP('',(#1045,#1046,#1047,#1048));
-#236=EDGE_LOOP('',(#1049,#1050,#1051,#1052));
-#237=EDGE_LOOP('',(#1053,#1054,#1055,#1056));
-#238=EDGE_LOOP('',(#1057,#1058,#1059,#1060));
-#239=EDGE_LOOP('',(#1061,#1062,#1063,#1064));
-#240=EDGE_LOOP('',(#1065,#1066,#1067,#1068));
-#241=EDGE_LOOP('',(#1069,#1070,#1071,#1072));
-#242=EDGE_LOOP('',(#1073,#1074,#1075,#1076));
-#243=EDGE_LOOP('',(#1077,#1078,#1079,#1080));
-#244=EDGE_LOOP('',(#1081,#1082,#1083,#1084));
-#245=EDGE_LOOP('',(#1085,#1086,#1087,#1088));
-#246=EDGE_LOOP('',(#1089,#1090,#1091,#1092));
-#247=EDGE_LOOP('',(#1093,#1094,#1095,#1096));
-#248=EDGE_LOOP('',(#1097,#1098,#1099,#1100,#1101,#1102,#1103,#1104,#1105,
-#1106,#1107,#1108,#1109,#1110,#1111,#1112,#1113,#1114,#1115,#1116,#1117,
-#1118,#1119,#1120,#1121));
-#249=EDGE_LOOP('',(#1122,#1123,#1124,#1125,#1126,#1127));
-#250=EDGE_LOOP('',(#1128,#1129,#1130,#1131));
-#251=EDGE_LOOP('',(#1132,#1133,#1134,#1135,#1136,#1137));
-#252=EDGE_LOOP('',(#1138,#1139,#1140,#1141,#1142,#1143,#1144,#1145,#1146,
-#1147,#1148,#1149,#1150,#1151));
-#253=EDGE_LOOP('',(#1152,#1153,#1154,#1155,#1156,#1157,#1158,#1159,#1160,
-#1161,#1162,#1163,#1164,#1165,#1166,#1167,#1168,#1169,#1170,#1171,#1172,
-#1173,#1174,#1175,#1176,#1177,#1178,#1179,#1180,#1181,#1182,#1183,#1184,
-#1185,#1186,#1187,#1188,#1189,#1190,#1191,#1192,#1193,#1194));
-#254=EDGE_LOOP('',(#1195));
-#255=EDGE_LOOP('',(#1196,#1197,#1198,#1199));
-#256=EDGE_LOOP('',(#1200,#1201,#1202,#1203));
-#257=EDGE_LOOP('',(#1204,#1205,#1206,#1207));
-#258=EDGE_LOOP('',(#1208,#1209,#1210,#1211,#1212,#1213,#1214));
-#259=EDGE_LOOP('',(#1215,#1216,#1217,#1218));
-#260=EDGE_LOOP('',(#1219,#1220,#1221,#1222));
-#261=EDGE_LOOP('',(#1223,#1224,#1225,#1226));
-#262=EDGE_LOOP('',(#1227,#1228,#1229,#1230,#1231,#1232,#1233,#1234));
-#263=EDGE_LOOP('',(#1235,#1236,#1237,#1238));
-#264=EDGE_LOOP('',(#1239,#1240,#1241,#1242,#1243,#1244,#1245,#1246,#1247,
-#1248));
-#265=EDGE_LOOP('',(#1249,#1250,#1251,#1252));
-#266=EDGE_LOOP('',(#1253,#1254,#1255,#1256,#1257,#1258));
-#267=EDGE_LOOP('',(#1259,#1260,#1261,#1262,#1263,#1264,#1265,#1266));
-#268=EDGE_LOOP('',(#1267,#1268,#1269,#1270));
-#269=EDGE_LOOP('',(#1271,#1272,#1273,#1274));
-#270=EDGE_LOOP('',(#1275,#1276,#1277,#1278));
-#271=EDGE_LOOP('',(#1279,#1280,#1281,#1282,#1283,#1284,#1285,#1286,#1287,
-#1288,#1289,#1290,#1291,#1292));
-#272=EDGE_LOOP('',(#1293));
-#273=LINE('',#1992,#404);
-#274=LINE('',#1994,#405);
-#275=LINE('',#1996,#406);
-#276=LINE('',#1997,#407);
-#277=LINE('',#2002,#408);
-#278=LINE('',#2006,#409);
-#279=LINE('',#2008,#410);
-#280=LINE('',#2009,#411);
-#281=LINE('',#2014,#412);
-#282=LINE('',#2018,#413);
-#283=LINE('',#2020,#414);
-#284=LINE('',#2021,#415);
-#285=LINE('',#2026,#416);
-#286=LINE('',#2030,#417);
-#287=LINE('',#2032,#418);
-#288=LINE('',#2033,#419);
-#289=LINE('',#2038,#420);
-#290=LINE('',#2042,#421);
-#291=LINE('',#2044,#422);
-#292=LINE('',#2045,#423);
-#293=LINE('',#2050,#424);
-#294=LINE('',#2054,#425);
-#295=LINE('',#2056,#426);
-#296=LINE('',#2057,#427);
-#297=LINE('',#2062,#428);
-#298=LINE('',#2066,#429);
-#299=LINE('',#2068,#430);
-#300=LINE('',#2069,#431);
-#301=LINE('',#2074,#432);
-#302=LINE('',#2078,#433);
-#303=LINE('',#2080,#434);
-#304=LINE('',#2081,#435);
-#305=LINE('',#2086,#436);
-#306=LINE('',#2090,#437);
-#307=LINE('',#2092,#438);
-#308=LINE('',#2093,#439);
-#309=LINE('',#2098,#440);
-#310=LINE('',#2102,#441);
-#311=LINE('',#2104,#442);
-#312=LINE('',#2105,#443);
-#313=LINE('',#2110,#444);
-#314=LINE('',#2114,#445);
-#315=LINE('',#2116,#446);
-#316=LINE('',#2117,#447);
-#317=LINE('',#2122,#448);
-#318=LINE('',#2126,#449);
-#319=LINE('',#2128,#450);
-#320=LINE('',#2129,#451);
-#321=LINE('',#2135,#452);
-#322=LINE('',#2138,#453);
-#323=LINE('',#2141,#454);
-#324=LINE('',#2143,#455);
-#325=LINE('',#2144,#456);
-#326=LINE('',#2153,#457);
-#327=LINE('',#2159,#458);
-#328=LINE('',#2162,#459);
-#329=LINE('',#2165,#460);
-#330=LINE('',#2167,#461);
-#331=LINE('',#2168,#462);
-#332=LINE('',#2173,#463);
-#333=LINE('',#2177,#464);
-#334=LINE('',#2179,#465);
-#335=LINE('',#2180,#466);
-#336=LINE('',#2185,#467);
-#337=LINE('',#2189,#468);
-#338=LINE('',#2191,#469);
-#339=LINE('',#2192,#470);
-#340=LINE('',#2197,#471);
-#341=LINE('',#2202,#472);
-#342=LINE('',#2204,#473);
-#343=LINE('',#2206,#474);
-#344=LINE('',#2207,#475);
-#345=LINE('',#2212,#476);
-#346=LINE('',#2216,#477);
-#347=LINE('',#2218,#478);
-#348=LINE('',#2219,#479);
-#349=LINE('',#2224,#480);
-#350=LINE('',#2228,#481);
-#351=LINE('',#2230,#482);
-#352=LINE('',#2231,#483);
-#353=LINE('',#2236,#484);
-#354=LINE('',#2240,#485);
-#355=LINE('',#2242,#486);
-#356=LINE('',#2243,#487);
-#357=LINE('',#2248,#488);
-#358=LINE('',#2252,#489);
-#359=LINE('',#2254,#490);
-#360=LINE('',#2255,#491);
-#361=LINE('',#2260,#492);
-#362=LINE('',#2267,#493);
-#363=LINE('',#2270,#494);
-#364=LINE('',#2273,#495);
-#365=LINE('',#2275,#496);
-#366=LINE('',#2276,#497);
-#367=LINE('',#2281,#498);
-#368=LINE('',#2284,#499);
-#369=LINE('',#2285,#500);
-#370=LINE('',#2291,#501);
-#371=LINE('',#2292,#502);
-#372=LINE('',#2295,#503);
-#373=LINE('',#2297,#504);
-#374=LINE('',#2299,#505);
-#375=LINE('',#2300,#506);
-#376=LINE('',#2303,#507);
-#377=LINE('',#2309,#508);
-#378=LINE('',#2313,#509);
-#379=LINE('',#2316,#510);
-#380=LINE('',#2320,#511);
-#381=LINE('',#2324,#512);
-#382=LINE('',#2330,#513);
-#383=LINE('',#2332,#514);
-#384=LINE('',#2333,#515);
-#385=LINE('',#2337,#516);
-#386=LINE('',#2341,#517);
-#387=LINE('',#2349,#518);
-#388=LINE('',#2356,#519);
-#389=LINE('',#2359,#520);
-#390=LINE('',#2364,#521);
-#391=LINE('',#2365,#522);
-#392=LINE('',#2366,#523);
-#393=LINE('',#2370,#524);
-#394=LINE('',#2373,#525);
-#395=LINE('',#2377,#526);
-#396=LINE('',#2380,#527);
-#397=LINE('',#2381,#528);
-#398=LINE('',#2384,#529);
-#399=LINE('',#2388,#530);
-#400=LINE('',#2392,#531);
-#401=LINE('',#2393,#532);
-#402=LINE('',#2397,#533);
-#403=LINE('',#2401,#534);
-#404=VECTOR('',#1565,10.);
-#405=VECTOR('',#1566,10.);
-#406=VECTOR('',#1567,10.);
-#407=VECTOR('',#1568,10.);
-#408=VECTOR('',#1573,10.);
-#409=VECTOR('',#1578,10.);
-#410=VECTOR('',#1579,10.);
-#411=VECTOR('',#1580,10.);
-#412=VECTOR('',#1585,10.);
-#413=VECTOR('',#1590,10.);
-#414=VECTOR('',#1591,10.);
-#415=VECTOR('',#1592,10.);
-#416=VECTOR('',#1597,10.);
-#417=VECTOR('',#1602,10.);
-#418=VECTOR('',#1603,10.);
-#419=VECTOR('',#1604,10.);
-#420=VECTOR('',#1609,10.);
-#421=VECTOR('',#1614,10.);
-#422=VECTOR('',#1615,10.);
-#423=VECTOR('',#1616,10.);
-#424=VECTOR('',#1621,10.);
-#425=VECTOR('',#1626,10.);
-#426=VECTOR('',#1627,10.);
-#427=VECTOR('',#1628,10.);
-#428=VECTOR('',#1633,10.);
-#429=VECTOR('',#1638,10.);
-#430=VECTOR('',#1639,10.);
-#431=VECTOR('',#1640,10.);
-#432=VECTOR('',#1645,10.);
-#433=VECTOR('',#1650,10.);
-#434=VECTOR('',#1651,10.);
-#435=VECTOR('',#1652,10.);
-#436=VECTOR('',#1657,10.);
-#437=VECTOR('',#1662,10.);
-#438=VECTOR('',#1663,10.);
-#439=VECTOR('',#1664,10.);
-#440=VECTOR('',#1669,10.);
-#441=VECTOR('',#1674,10.);
-#442=VECTOR('',#1675,10.);
-#443=VECTOR('',#1676,10.);
-#444=VECTOR('',#1681,10.);
-#445=VECTOR('',#1686,10.);
-#446=VECTOR('',#1687,10.);
-#447=VECTOR('',#1688,10.);
-#448=VECTOR('',#1693,10.);
-#449=VECTOR('',#1698,10.);
-#450=VECTOR('',#1699,10.);
-#451=VECTOR('',#1700,10.);
-#452=VECTOR('',#1705,10.);
-#453=VECTOR('',#1708,10.);
-#454=VECTOR('',#1711,10.);
-#455=VECTOR('',#1712,10.);
-#456=VECTOR('',#1713,10.);
-#457=VECTOR('',#1726,10.);
-#458=VECTOR('',#1731,10.);
-#459=VECTOR('',#1734,10.);
-#460=VECTOR('',#1737,10.);
-#461=VECTOR('',#1738,10.);
-#462=VECTOR('',#1739,10.);
-#463=VECTOR('',#1744,10.);
-#464=VECTOR('',#1749,10.);
-#465=VECTOR('',#1750,10.);
-#466=VECTOR('',#1751,10.);
-#467=VECTOR('',#1756,10.);
-#468=VECTOR('',#1761,10.);
-#469=VECTOR('',#1762,10.);
-#470=VECTOR('',#1763,10.);
-#471=VECTOR('',#1768,10.);
-#472=VECTOR('',#1773,10.);
-#473=VECTOR('',#1774,10.);
-#474=VECTOR('',#1775,10.);
-#475=VECTOR('',#1776,10.);
-#476=VECTOR('',#1781,10.);
-#477=VECTOR('',#1786,10.);
-#478=VECTOR('',#1787,10.);
-#479=VECTOR('',#1788,10.);
-#480=VECTOR('',#1793,10.);
-#481=VECTOR('',#1798,10.);
-#482=VECTOR('',#1799,10.);
-#483=VECTOR('',#1800,10.);
-#484=VECTOR('',#1805,10.);
-#485=VECTOR('',#1810,10.);
-#486=VECTOR('',#1811,10.);
-#487=VECTOR('',#1812,10.);
-#488=VECTOR('',#1817,10.);
-#489=VECTOR('',#1822,10.);
-#490=VECTOR('',#1823,10.);
-#491=VECTOR('',#1824,10.);
-#492=VECTOR('',#1829,10.);
-#493=VECTOR('',#1836,10.);
-#494=VECTOR('',#1839,10.);
-#495=VECTOR('',#1842,10.);
-#496=VECTOR('',#1843,10.);
-#497=VECTOR('',#1844,10.);
-#498=VECTOR('',#1849,10.);
-#499=VECTOR('',#1854,10.);
-#500=VECTOR('',#1855,10.);
-#501=VECTOR('',#1862,10.);
-#502=VECTOR('',#1863,10.);
-#503=VECTOR('',#1866,10.);
-#504=VECTOR('',#1867,10.);
-#505=VECTOR('',#1868,10.);
-#506=VECTOR('',#1869,10.);
-#507=VECTOR('',#1872,10.);
-#508=VECTOR('',#1879,10.);
-#509=VECTOR('',#1884,10.);
-#510=VECTOR('',#1889,10.);
-#511=VECTOR('',#1892,10.);
-#512=VECTOR('',#1895,10.);
-#513=VECTOR('',#1902,10.);
-#514=VECTOR('',#1903,10.);
-#515=VECTOR('',#1904,10.);
-#516=VECTOR('',#1909,10.);
-#517=VECTOR('',#1914,10.);
-#518=VECTOR('',#1921,10.);
-#519=VECTOR('',#1928,10.);
-#520=VECTOR('',#1931,4.);
-#521=VECTOR('',#1936,10.);
-#522=VECTOR('',#1937,10.);
-#523=VECTOR('',#1938,10.);
-#524=VECTOR('',#1943,10.);
-#525=VECTOR('',#1948,10.);
-#526=VECTOR('',#1953,10.);
-#527=VECTOR('',#1956,10.);
-#528=VECTOR('',#1957,10.);
-#529=VECTOR('',#1960,10.);
-#530=VECTOR('',#1965,10.);
-#531=VECTOR('',#1970,10.);
-#532=VECTOR('',#1971,10.);
-#533=VECTOR('',#1976,10.);
-#534=VECTOR('',#1981,10.);
-#535=VERTEX_POINT('',#1990);
-#536=VERTEX_POINT('',#1991);
-#537=VERTEX_POINT('',#1993);
-#538=VERTEX_POINT('',#1995);
-#539=VERTEX_POINT('',#1999);
-#540=VERTEX_POINT('',#2001);
-#541=VERTEX_POINT('',#2005);
-#542=VERTEX_POINT('',#2007);
-#543=VERTEX_POINT('',#2011);
-#544=VERTEX_POINT('',#2013);
-#545=VERTEX_POINT('',#2017);
-#546=VERTEX_POINT('',#2019);
-#547=VERTEX_POINT('',#2023);
-#548=VERTEX_POINT('',#2025);
-#549=VERTEX_POINT('',#2029);
-#550=VERTEX_POINT('',#2031);
-#551=VERTEX_POINT('',#2035);
-#552=VERTEX_POINT('',#2037);
-#553=VERTEX_POINT('',#2041);
-#554=VERTEX_POINT('',#2043);
-#555=VERTEX_POINT('',#2047);
-#556=VERTEX_POINT('',#2049);
-#557=VERTEX_POINT('',#2053);
-#558=VERTEX_POINT('',#2055);
-#559=VERTEX_POINT('',#2059);
-#560=VERTEX_POINT('',#2061);
-#561=VERTEX_POINT('',#2065);
-#562=VERTEX_POINT('',#2067);
-#563=VERTEX_POINT('',#2071);
-#564=VERTEX_POINT('',#2073);
-#565=VERTEX_POINT('',#2077);
-#566=VERTEX_POINT('',#2079);
-#567=VERTEX_POINT('',#2083);
-#568=VERTEX_POINT('',#2085);
-#569=VERTEX_POINT('',#2089);
-#570=VERTEX_POINT('',#2091);
-#571=VERTEX_POINT('',#2095);
-#572=VERTEX_POINT('',#2097);
-#573=VERTEX_POINT('',#2101);
-#574=VERTEX_POINT('',#2103);
-#575=VERTEX_POINT('',#2107);
-#576=VERTEX_POINT('',#2109);
-#577=VERTEX_POINT('',#2113);
-#578=VERTEX_POINT('',#2115);
-#579=VERTEX_POINT('',#2119);
-#580=VERTEX_POINT('',#2121);
-#581=VERTEX_POINT('',#2125);
-#582=VERTEX_POINT('',#2127);
-#583=VERTEX_POINT('',#2131);
-#584=VERTEX_POINT('',#2132);
-#585=VERTEX_POINT('',#2134);
-#586=VERTEX_POINT('',#2136);
-#587=VERTEX_POINT('',#2140);
-#588=VERTEX_POINT('',#2142);
-#589=VERTEX_POINT('',#2149);
-#590=VERTEX_POINT('',#2151);
-#591=VERTEX_POINT('',#2155);
-#592=VERTEX_POINT('',#2156);
-#593=VERTEX_POINT('',#2158);
-#594=VERTEX_POINT('',#2160);
-#595=VERTEX_POINT('',#2164);
-#596=VERTEX_POINT('',#2166);
-#597=VERTEX_POINT('',#2170);
-#598=VERTEX_POINT('',#2172);
-#599=VERTEX_POINT('',#2176);
-#600=VERTEX_POINT('',#2178);
-#601=VERTEX_POINT('',#2182);
-#602=VERTEX_POINT('',#2184);
-#603=VERTEX_POINT('',#2188);
-#604=VERTEX_POINT('',#2190);
-#605=VERTEX_POINT('',#2194);
-#606=VERTEX_POINT('',#2196);
-#607=VERTEX_POINT('',#2200);
-#608=VERTEX_POINT('',#2201);
-#609=VERTEX_POINT('',#2203);
-#610=VERTEX_POINT('',#2205);
-#611=VERTEX_POINT('',#2209);
-#612=VERTEX_POINT('',#2211);
-#613=VERTEX_POINT('',#2215);
-#614=VERTEX_POINT('',#2217);
-#615=VERTEX_POINT('',#2221);
-#616=VERTEX_POINT('',#2223);
-#617=VERTEX_POINT('',#2227);
-#618=VERTEX_POINT('',#2229);
-#619=VERTEX_POINT('',#2233);
-#620=VERTEX_POINT('',#2235);
-#621=VERTEX_POINT('',#2239);
-#622=VERTEX_POINT('',#2241);
-#623=VERTEX_POINT('',#2245);
-#624=VERTEX_POINT('',#2247);
-#625=VERTEX_POINT('',#2251);
-#626=VERTEX_POINT('',#2253);
-#627=VERTEX_POINT('',#2257);
-#628=VERTEX_POINT('',#2259);
-#629=VERTEX_POINT('',#2263);
-#630=VERTEX_POINT('',#2264);
-#631=VERTEX_POINT('',#2266);
-#632=VERTEX_POINT('',#2268);
-#633=VERTEX_POINT('',#2272);
-#634=VERTEX_POINT('',#2274);
-#635=VERTEX_POINT('',#2278);
-#636=VERTEX_POINT('',#2280);
-#637=VERTEX_POINT('',#2287);
-#638=VERTEX_POINT('',#2289);
-#639=VERTEX_POINT('',#2294);
-#640=VERTEX_POINT('',#2296);
-#641=VERTEX_POINT('',#2298);
-#642=VERTEX_POINT('',#2302);
-#643=VERTEX_POINT('',#2306);
-#644=VERTEX_POINT('',#2308);
-#645=VERTEX_POINT('',#2312);
-#646=VERTEX_POINT('',#2317);
-#647=VERTEX_POINT('',#2319);
-#648=VERTEX_POINT('',#2321);
-#649=VERTEX_POINT('',#2323);
-#650=VERTEX_POINT('',#2326);
-#651=VERTEX_POINT('',#2329);
-#652=VERTEX_POINT('',#2331);
-#653=VERTEX_POINT('',#2335);
-#654=VERTEX_POINT('',#2339);
-#655=VERTEX_POINT('',#2343);
-#656=VERTEX_POINT('',#2344);
-#657=VERTEX_POINT('',#2346);
-#658=VERTEX_POINT('',#2348);
-#659=VERTEX_POINT('',#2350);
-#660=VERTEX_POINT('',#2352);
-#661=VERTEX_POINT('',#2354);
-#662=VERTEX_POINT('',#2358);
-#663=VERTEX_POINT('',#2362);
-#664=VERTEX_POINT('',#2363);
-#665=VERTEX_POINT('',#2368);
-#666=VERTEX_POINT('',#2375);
-#667=VERTEX_POINT('',#2379);
-#668=VERTEX_POINT('',#2383);
-#669=VERTEX_POINT('',#2387);
-#670=VERTEX_POINT('',#2391);
-#671=VERTEX_POINT('',#2395);
-#672=VERTEX_POINT('',#2399);
-#673=EDGE_CURVE('',#535,#536,#273,.T.);
-#674=EDGE_CURVE('',#535,#537,#274,.T.);
-#675=EDGE_CURVE('',#537,#538,#275,.T.);
-#676=EDGE_CURVE('',#536,#538,#276,.T.);
-#677=EDGE_CURVE('',#539,#535,#17,.T.);
-#678=EDGE_CURVE('',#539,#540,#277,.T.);
-#679=EDGE_CURVE('',#540,#537,#18,.T.);
-#680=EDGE_CURVE('',#541,#539,#278,.T.);
-#681=EDGE_CURVE('',#541,#542,#279,.T.);
-#682=EDGE_CURVE('',#542,#540,#280,.T.);
-#683=EDGE_CURVE('',#543,#541,#19,.T.);
-#684=EDGE_CURVE('',#543,#544,#281,.T.);
-#685=EDGE_CURVE('',#544,#542,#20,.T.);
-#686=EDGE_CURVE('',#545,#543,#282,.T.);
-#687=EDGE_CURVE('',#545,#546,#283,.T.);
-#688=EDGE_CURVE('',#546,#544,#284,.T.);
-#689=EDGE_CURVE('',#547,#545,#21,.T.);
-#690=EDGE_CURVE('',#547,#548,#285,.T.);
-#691=EDGE_CURVE('',#548,#546,#22,.T.);
-#692=EDGE_CURVE('',#549,#547,#286,.T.);
-#693=EDGE_CURVE('',#549,#550,#287,.T.);
-#694=EDGE_CURVE('',#550,#548,#288,.T.);
-#695=EDGE_CURVE('',#551,#549,#23,.T.);
-#696=EDGE_CURVE('',#551,#552,#289,.T.);
-#697=EDGE_CURVE('',#552,#550,#24,.T.);
-#698=EDGE_CURVE('',#553,#551,#290,.T.);
-#699=EDGE_CURVE('',#553,#554,#291,.T.);
-#700=EDGE_CURVE('',#554,#552,#292,.T.);
-#701=EDGE_CURVE('',#555,#553,#25,.T.);
-#702=EDGE_CURVE('',#555,#556,#293,.T.);
-#703=EDGE_CURVE('',#556,#554,#26,.T.);
-#704=EDGE_CURVE('',#557,#555,#294,.T.);
-#705=EDGE_CURVE('',#557,#558,#295,.T.);
-#706=EDGE_CURVE('',#558,#556,#296,.T.);
-#707=EDGE_CURVE('',#559,#557,#27,.T.);
-#708=EDGE_CURVE('',#559,#560,#297,.T.);
-#709=EDGE_CURVE('',#560,#558,#28,.T.);
-#710=EDGE_CURVE('',#561,#559,#298,.T.);
-#711=EDGE_CURVE('',#561,#562,#299,.T.);
-#712=EDGE_CURVE('',#562,#560,#300,.T.);
-#713=EDGE_CURVE('',#563,#561,#29,.T.);
-#714=EDGE_CURVE('',#563,#564,#301,.T.);
-#715=EDGE_CURVE('',#564,#562,#30,.T.);
-#716=EDGE_CURVE('',#565,#563,#302,.T.);
-#717=EDGE_CURVE('',#565,#566,#303,.T.);
-#718=EDGE_CURVE('',#566,#564,#304,.T.);
-#719=EDGE_CURVE('',#567,#565,#31,.T.);
-#720=EDGE_CURVE('',#567,#568,#305,.T.);
-#721=EDGE_CURVE('',#568,#566,#32,.T.);
-#722=EDGE_CURVE('',#569,#567,#306,.T.);
-#723=EDGE_CURVE('',#569,#570,#307,.T.);
-#724=EDGE_CURVE('',#570,#568,#308,.T.);
-#725=EDGE_CURVE('',#571,#569,#33,.T.);
-#726=EDGE_CURVE('',#571,#572,#309,.T.);
-#727=EDGE_CURVE('',#572,#570,#34,.T.);
-#728=EDGE_CURVE('',#573,#571,#310,.T.);
-#729=EDGE_CURVE('',#573,#574,#311,.T.);
-#730=EDGE_CURVE('',#574,#572,#312,.T.);
-#731=EDGE_CURVE('',#575,#573,#35,.T.);
-#732=EDGE_CURVE('',#575,#576,#313,.T.);
-#733=EDGE_CURVE('',#576,#574,#36,.T.);
-#734=EDGE_CURVE('',#577,#575,#314,.T.);
-#735=EDGE_CURVE('',#577,#578,#315,.T.);
-#736=EDGE_CURVE('',#578,#576,#316,.T.);
-#737=EDGE_CURVE('',#579,#577,#37,.T.);
-#738=EDGE_CURVE('',#579,#580,#317,.T.);
-#739=EDGE_CURVE('',#580,#578,#38,.T.);
-#740=EDGE_CURVE('',#581,#579,#318,.T.);
-#741=EDGE_CURVE('',#582,#581,#319,.T.);
-#742=EDGE_CURVE('',#582,#580,#320,.T.);
-#743=EDGE_CURVE('',#583,#584,#39,.T.);
-#744=EDGE_CURVE('',#583,#585,#321,.T.);
-#745=EDGE_CURVE('',#585,#586,#40,.T.);
-#746=EDGE_CURVE('',#584,#586,#322,.T.);
-#747=EDGE_CURVE('',#587,#583,#323,.T.);
-#748=EDGE_CURVE('',#587,#588,#324,.T.);
-#749=EDGE_CURVE('',#588,#585,#325,.T.);
-#750=EDGE_CURVE('',#536,#587,#41,.T.);
-#751=EDGE_CURVE('',#538,#588,#42,.T.);
-#752=EDGE_CURVE('',#589,#582,#43,.T.);
-#753=EDGE_CURVE('',#590,#589,#44,.T.);
-#754=EDGE_CURVE('',#586,#590,#326,.T.);
-#755=EDGE_CURVE('',#591,#592,#45,.T.);
-#756=EDGE_CURVE('',#591,#593,#327,.T.);
-#757=EDGE_CURVE('',#593,#594,#46,.T.);
-#758=EDGE_CURVE('',#592,#594,#328,.T.);
-#759=EDGE_CURVE('',#595,#591,#329,.T.);
-#760=EDGE_CURVE('',#595,#596,#330,.T.);
-#761=EDGE_CURVE('',#596,#593,#331,.T.);
-#762=EDGE_CURVE('',#597,#595,#47,.T.);
-#763=EDGE_CURVE('',#597,#598,#332,.T.);
-#764=EDGE_CURVE('',#598,#596,#48,.T.);
-#765=EDGE_CURVE('',#599,#597,#333,.T.);
-#766=EDGE_CURVE('',#599,#600,#334,.T.);
-#767=EDGE_CURVE('',#600,#598,#335,.T.);
-#768=EDGE_CURVE('',#601,#599,#49,.T.);
-#769=EDGE_CURVE('',#601,#602,#336,.T.);
-#770=EDGE_CURVE('',#602,#600,#50,.T.);
-#771=EDGE_CURVE('',#603,#601,#337,.T.);
-#772=EDGE_CURVE('',#603,#604,#338,.T.);
-#773=EDGE_CURVE('',#604,#602,#339,.T.);
-#774=EDGE_CURVE('',#605,#603,#51,.T.);
-#775=EDGE_CURVE('',#606,#605,#340,.T.);
-#776=EDGE_CURVE('',#606,#604,#52,.T.);
-#777=EDGE_CURVE('',#607,#608,#341,.T.);
-#778=EDGE_CURVE('',#607,#609,#342,.T.);
-#779=EDGE_CURVE('',#609,#610,#343,.T.);
-#780=EDGE_CURVE('',#608,#610,#344,.T.);
-#781=EDGE_CURVE('',#611,#607,#53,.T.);
-#782=EDGE_CURVE('',#611,#612,#345,.T.);
-#783=EDGE_CURVE('',#612,#609,#54,.T.);
-#784=EDGE_CURVE('',#613,#611,#346,.T.);
-#785=EDGE_CURVE('',#613,#614,#347,.T.);
-#786=EDGE_CURVE('',#614,#612,#348,.T.);
-#787=EDGE_CURVE('',#615,#613,#55,.T.);
-#788=EDGE_CURVE('',#615,#616,#349,.T.);
-#789=EDGE_CURVE('',#616,#614,#56,.T.);
-#790=EDGE_CURVE('',#617,#615,#350,.T.);
-#791=EDGE_CURVE('',#617,#618,#351,.T.);
-#792=EDGE_CURVE('',#618,#616,#352,.T.);
-#793=EDGE_CURVE('',#619,#617,#57,.T.);
-#794=EDGE_CURVE('',#619,#620,#353,.T.);
-#795=EDGE_CURVE('',#620,#618,#58,.T.);
-#796=EDGE_CURVE('',#621,#619,#354,.T.);
-#797=EDGE_CURVE('',#621,#622,#355,.T.);
-#798=EDGE_CURVE('',#622,#620,#356,.T.);
-#799=EDGE_CURVE('',#623,#621,#59,.T.);
-#800=EDGE_CURVE('',#623,#624,#357,.T.);
-#801=EDGE_CURVE('',#624,#622,#60,.T.);
-#802=EDGE_CURVE('',#625,#623,#358,.T.);
-#803=EDGE_CURVE('',#625,#626,#359,.T.);
-#804=EDGE_CURVE('',#626,#624,#360,.T.);
-#805=EDGE_CURVE('',#627,#625,#61,.T.);
-#806=EDGE_CURVE('',#628,#627,#361,.T.);
-#807=EDGE_CURVE('',#628,#626,#62,.T.);
-#808=EDGE_CURVE('',#629,#630,#63,.T.);
-#809=EDGE_CURVE('',#629,#631,#362,.T.);
-#810=EDGE_CURVE('',#631,#632,#64,.T.);
-#811=EDGE_CURVE('',#630,#632,#363,.T.);
-#812=EDGE_CURVE('',#633,#629,#364,.T.);
-#813=EDGE_CURVE('',#633,#634,#365,.T.);
-#814=EDGE_CURVE('',#634,#631,#366,.T.);
-#815=EDGE_CURVE('',#635,#633,#65,.T.);
-#816=EDGE_CURVE('',#635,#636,#367,.T.);
-#817=EDGE_CURVE('',#636,#634,#66,.T.);
-#818=EDGE_CURVE('',#592,#635,#368,.T.);
-#819=EDGE_CURVE('',#594,#636,#369,.T.);
-#820=EDGE_CURVE('',#637,#606,#67,.T.);
-#821=EDGE_CURVE('',#638,#637,#68,.T.);
-#822=EDGE_CURVE('',#610,#638,#370,.T.);
-#823=EDGE_CURVE('',#632,#628,#371,.T.);
-#824=EDGE_CURVE('',#639,#638,#372,.T.);
-#825=EDGE_CURVE('',#640,#639,#373,.T.);
-#826=EDGE_CURVE('',#640,#641,#374,.T.);
-#827=EDGE_CURVE('',#608,#641,#375,.T.);
-#828=EDGE_CURVE('',#642,#637,#376,.T.);
-#829=EDGE_CURVE('',#642,#639,#69,.T.);
-#830=EDGE_CURVE('',#643,#605,#70,.T.);
-#831=EDGE_CURVE('',#644,#643,#377,.T.);
-#832=EDGE_CURVE('',#644,#642,#71,.T.);
-#833=EDGE_CURVE('',#630,#645,#378,.T.);
-#834=EDGE_CURVE('',#645,#643,#72,.T.);
-#835=EDGE_CURVE('',#584,#627,#379,.T.);
-#836=EDGE_CURVE('',#641,#646,#73,.T.);
-#837=EDGE_CURVE('',#646,#647,#380,.T.);
-#838=EDGE_CURVE('',#647,#648,#74,.T.);
-#839=EDGE_CURVE('',#648,#649,#381,.T.);
-#840=EDGE_CURVE('',#649,#581,#75,.T.);
-#841=EDGE_CURVE('',#650,#650,#76,.T.);
-#842=EDGE_CURVE('',#646,#651,#382,.T.);
-#843=EDGE_CURVE('',#652,#651,#383,.T.);
-#844=EDGE_CURVE('',#647,#652,#384,.T.);
-#845=EDGE_CURVE('',#653,#652,#77,.T.);
-#846=EDGE_CURVE('',#648,#653,#385,.T.);
-#847=EDGE_CURVE('',#651,#654,#78,.T.);
-#848=EDGE_CURVE('',#654,#653,#386,.T.);
-#849=EDGE_CURVE('',#655,#656,#79,.T.);
-#850=EDGE_CURVE('',#656,#657,#80,.T.);
-#851=EDGE_CURVE('',#657,#658,#387,.T.);
-#852=EDGE_CURVE('',#658,#659,#81,.T.);
-#853=EDGE_CURVE('',#659,#660,#82,.T.);
-#854=EDGE_CURVE('',#660,#661,#83,.T.);
-#855=EDGE_CURVE('',#661,#655,#388,.T.);
-#856=EDGE_CURVE('',#650,#662,#389,.T.);
-#857=EDGE_CURVE('',#662,#662,#84,.T.);
-#858=EDGE_CURVE('',#663,#664,#390,.T.);
-#859=EDGE_CURVE('',#664,#658,#391,.T.);
-#860=EDGE_CURVE('',#663,#657,#392,.T.);
-#861=EDGE_CURVE('',#663,#665,#85,.T.);
-#862=EDGE_CURVE('',#665,#656,#393,.T.);
-#863=EDGE_CURVE('',#640,#665,#86,.T.);
-#864=EDGE_CURVE('',#655,#654,#394,.T.);
-#865=EDGE_CURVE('',#666,#644,#87,.T.);
-#866=EDGE_CURVE('',#666,#645,#395,.T.);
-#867=EDGE_CURVE('',#667,#590,#396,.T.);
-#868=EDGE_CURVE('',#667,#666,#397,.T.);
-#869=EDGE_CURVE('',#668,#589,#398,.T.);
-#870=EDGE_CURVE('',#667,#668,#88,.T.);
-#871=EDGE_CURVE('',#669,#649,#399,.T.);
-#872=EDGE_CURVE('',#669,#668,#89,.T.);
-#873=EDGE_CURVE('',#669,#670,#400,.T.);
-#874=EDGE_CURVE('',#670,#661,#401,.T.);
-#875=EDGE_CURVE('',#671,#670,#90,.T.);
-#876=EDGE_CURVE('',#671,#660,#402,.T.);
-#877=EDGE_CURVE('',#672,#671,#91,.T.);
-#878=EDGE_CURVE('',#672,#659,#403,.T.);
-#879=EDGE_CURVE('',#664,#672,#92,.T.);
-#880=ORIENTED_EDGE('',*,*,#673,.F.);
-#881=ORIENTED_EDGE('',*,*,#674,.T.);
-#882=ORIENTED_EDGE('',*,*,#675,.T.);
-#883=ORIENTED_EDGE('',*,*,#676,.F.);
-#884=ORIENTED_EDGE('',*,*,#677,.F.);
-#885=ORIENTED_EDGE('',*,*,#678,.T.);
-#886=ORIENTED_EDGE('',*,*,#679,.T.);
-#887=ORIENTED_EDGE('',*,*,#674,.F.);
-#888=ORIENTED_EDGE('',*,*,#680,.F.);
-#889=ORIENTED_EDGE('',*,*,#681,.T.);
-#890=ORIENTED_EDGE('',*,*,#682,.T.);
-#891=ORIENTED_EDGE('',*,*,#678,.F.);
-#892=ORIENTED_EDGE('',*,*,#683,.F.);
-#893=ORIENTED_EDGE('',*,*,#684,.T.);
-#894=ORIENTED_EDGE('',*,*,#685,.T.);
-#895=ORIENTED_EDGE('',*,*,#681,.F.);
-#896=ORIENTED_EDGE('',*,*,#686,.F.);
-#897=ORIENTED_EDGE('',*,*,#687,.T.);
-#898=ORIENTED_EDGE('',*,*,#688,.T.);
-#899=ORIENTED_EDGE('',*,*,#684,.F.);
-#900=ORIENTED_EDGE('',*,*,#689,.F.);
-#901=ORIENTED_EDGE('',*,*,#690,.T.);
-#902=ORIENTED_EDGE('',*,*,#691,.T.);
-#903=ORIENTED_EDGE('',*,*,#687,.F.);
-#904=ORIENTED_EDGE('',*,*,#692,.F.);
-#905=ORIENTED_EDGE('',*,*,#693,.T.);
-#906=ORIENTED_EDGE('',*,*,#694,.T.);
-#907=ORIENTED_EDGE('',*,*,#690,.F.);
-#908=ORIENTED_EDGE('',*,*,#695,.F.);
-#909=ORIENTED_EDGE('',*,*,#696,.T.);
-#910=ORIENTED_EDGE('',*,*,#697,.T.);
-#911=ORIENTED_EDGE('',*,*,#693,.F.);
-#912=ORIENTED_EDGE('',*,*,#698,.F.);
-#913=ORIENTED_EDGE('',*,*,#699,.T.);
-#914=ORIENTED_EDGE('',*,*,#700,.T.);
-#915=ORIENTED_EDGE('',*,*,#696,.F.);
-#916=ORIENTED_EDGE('',*,*,#701,.F.);
-#917=ORIENTED_EDGE('',*,*,#702,.T.);
-#918=ORIENTED_EDGE('',*,*,#703,.T.);
-#919=ORIENTED_EDGE('',*,*,#699,.F.);
-#920=ORIENTED_EDGE('',*,*,#704,.F.);
-#921=ORIENTED_EDGE('',*,*,#705,.T.);
-#922=ORIENTED_EDGE('',*,*,#706,.T.);
-#923=ORIENTED_EDGE('',*,*,#702,.F.);
-#924=ORIENTED_EDGE('',*,*,#707,.F.);
-#925=ORIENTED_EDGE('',*,*,#708,.T.);
-#926=ORIENTED_EDGE('',*,*,#709,.T.);
-#927=ORIENTED_EDGE('',*,*,#705,.F.);
-#928=ORIENTED_EDGE('',*,*,#710,.F.);
-#929=ORIENTED_EDGE('',*,*,#711,.T.);
-#930=ORIENTED_EDGE('',*,*,#712,.T.);
-#931=ORIENTED_EDGE('',*,*,#708,.F.);
-#932=ORIENTED_EDGE('',*,*,#713,.F.);
-#933=ORIENTED_EDGE('',*,*,#714,.T.);
-#934=ORIENTED_EDGE('',*,*,#715,.T.);
-#935=ORIENTED_EDGE('',*,*,#711,.F.);
-#936=ORIENTED_EDGE('',*,*,#716,.F.);
-#937=ORIENTED_EDGE('',*,*,#717,.T.);
-#938=ORIENTED_EDGE('',*,*,#718,.T.);
-#939=ORIENTED_EDGE('',*,*,#714,.F.);
-#940=ORIENTED_EDGE('',*,*,#719,.F.);
-#941=ORIENTED_EDGE('',*,*,#720,.T.);
-#942=ORIENTED_EDGE('',*,*,#721,.T.);
-#943=ORIENTED_EDGE('',*,*,#717,.F.);
-#944=ORIENTED_EDGE('',*,*,#722,.F.);
-#945=ORIENTED_EDGE('',*,*,#723,.T.);
-#946=ORIENTED_EDGE('',*,*,#724,.T.);
-#947=ORIENTED_EDGE('',*,*,#720,.F.);
-#948=ORIENTED_EDGE('',*,*,#725,.F.);
-#949=ORIENTED_EDGE('',*,*,#726,.T.);
-#950=ORIENTED_EDGE('',*,*,#727,.T.);
-#951=ORIENTED_EDGE('',*,*,#723,.F.);
-#952=ORIENTED_EDGE('',*,*,#728,.F.);
-#953=ORIENTED_EDGE('',*,*,#729,.T.);
-#954=ORIENTED_EDGE('',*,*,#730,.T.);
-#955=ORIENTED_EDGE('',*,*,#726,.F.);
-#956=ORIENTED_EDGE('',*,*,#731,.F.);
-#957=ORIENTED_EDGE('',*,*,#732,.T.);
-#958=ORIENTED_EDGE('',*,*,#733,.T.);
-#959=ORIENTED_EDGE('',*,*,#729,.F.);
-#960=ORIENTED_EDGE('',*,*,#734,.F.);
-#961=ORIENTED_EDGE('',*,*,#735,.T.);
-#962=ORIENTED_EDGE('',*,*,#736,.T.);
-#963=ORIENTED_EDGE('',*,*,#732,.F.);
-#964=ORIENTED_EDGE('',*,*,#737,.F.);
-#965=ORIENTED_EDGE('',*,*,#738,.T.);
-#966=ORIENTED_EDGE('',*,*,#739,.T.);
-#967=ORIENTED_EDGE('',*,*,#735,.F.);
-#968=ORIENTED_EDGE('',*,*,#740,.F.);
-#969=ORIENTED_EDGE('',*,*,#741,.F.);
-#970=ORIENTED_EDGE('',*,*,#742,.T.);
-#971=ORIENTED_EDGE('',*,*,#738,.F.);
-#972=ORIENTED_EDGE('',*,*,#743,.F.);
-#973=ORIENTED_EDGE('',*,*,#744,.T.);
-#974=ORIENTED_EDGE('',*,*,#745,.T.);
-#975=ORIENTED_EDGE('',*,*,#746,.F.);
-#976=ORIENTED_EDGE('',*,*,#747,.F.);
-#977=ORIENTED_EDGE('',*,*,#748,.T.);
-#978=ORIENTED_EDGE('',*,*,#749,.T.);
-#979=ORIENTED_EDGE('',*,*,#744,.F.);
-#980=ORIENTED_EDGE('',*,*,#750,.F.);
-#981=ORIENTED_EDGE('',*,*,#676,.T.);
-#982=ORIENTED_EDGE('',*,*,#751,.T.);
-#983=ORIENTED_EDGE('',*,*,#748,.F.);
-#984=ORIENTED_EDGE('',*,*,#751,.F.);
-#985=ORIENTED_EDGE('',*,*,#675,.F.);
-#986=ORIENTED_EDGE('',*,*,#679,.F.);
-#987=ORIENTED_EDGE('',*,*,#682,.F.);
-#988=ORIENTED_EDGE('',*,*,#685,.F.);
-#989=ORIENTED_EDGE('',*,*,#688,.F.);
-#990=ORIENTED_EDGE('',*,*,#691,.F.);
-#991=ORIENTED_EDGE('',*,*,#694,.F.);
-#992=ORIENTED_EDGE('',*,*,#697,.F.);
-#993=ORIENTED_EDGE('',*,*,#700,.F.);
-#994=ORIENTED_EDGE('',*,*,#703,.F.);
-#995=ORIENTED_EDGE('',*,*,#706,.F.);
-#996=ORIENTED_EDGE('',*,*,#709,.F.);
-#997=ORIENTED_EDGE('',*,*,#712,.F.);
-#998=ORIENTED_EDGE('',*,*,#715,.F.);
-#999=ORIENTED_EDGE('',*,*,#718,.F.);
-#1000=ORIENTED_EDGE('',*,*,#721,.F.);
-#1001=ORIENTED_EDGE('',*,*,#724,.F.);
-#1002=ORIENTED_EDGE('',*,*,#727,.F.);
-#1003=ORIENTED_EDGE('',*,*,#730,.F.);
-#1004=ORIENTED_EDGE('',*,*,#733,.F.);
-#1005=ORIENTED_EDGE('',*,*,#736,.F.);
-#1006=ORIENTED_EDGE('',*,*,#739,.F.);
-#1007=ORIENTED_EDGE('',*,*,#742,.F.);
-#1008=ORIENTED_EDGE('',*,*,#752,.F.);
-#1009=ORIENTED_EDGE('',*,*,#753,.F.);
-#1010=ORIENTED_EDGE('',*,*,#754,.F.);
-#1011=ORIENTED_EDGE('',*,*,#745,.F.);
-#1012=ORIENTED_EDGE('',*,*,#749,.F.);
-#1013=ORIENTED_EDGE('',*,*,#755,.F.);
-#1014=ORIENTED_EDGE('',*,*,#756,.T.);
-#1015=ORIENTED_EDGE('',*,*,#757,.T.);
-#1016=ORIENTED_EDGE('',*,*,#758,.F.);
-#1017=ORIENTED_EDGE('',*,*,#759,.F.);
-#1018=ORIENTED_EDGE('',*,*,#760,.T.);
-#1019=ORIENTED_EDGE('',*,*,#761,.T.);
-#1020=ORIENTED_EDGE('',*,*,#756,.F.);
-#1021=ORIENTED_EDGE('',*,*,#762,.F.);
-#1022=ORIENTED_EDGE('',*,*,#763,.T.);
-#1023=ORIENTED_EDGE('',*,*,#764,.T.);
-#1024=ORIENTED_EDGE('',*,*,#760,.F.);
-#1025=ORIENTED_EDGE('',*,*,#765,.F.);
-#1026=ORIENTED_EDGE('',*,*,#766,.T.);
-#1027=ORIENTED_EDGE('',*,*,#767,.T.);
-#1028=ORIENTED_EDGE('',*,*,#763,.F.);
-#1029=ORIENTED_EDGE('',*,*,#768,.F.);
-#1030=ORIENTED_EDGE('',*,*,#769,.T.);
-#1031=ORIENTED_EDGE('',*,*,#770,.T.);
-#1032=ORIENTED_EDGE('',*,*,#766,.F.);
-#1033=ORIENTED_EDGE('',*,*,#771,.F.);
-#1034=ORIENTED_EDGE('',*,*,#772,.T.);
-#1035=ORIENTED_EDGE('',*,*,#773,.T.);
-#1036=ORIENTED_EDGE('',*,*,#769,.F.);
-#1037=ORIENTED_EDGE('',*,*,#774,.F.);
-#1038=ORIENTED_EDGE('',*,*,#775,.F.);
-#1039=ORIENTED_EDGE('',*,*,#776,.T.);
-#1040=ORIENTED_EDGE('',*,*,#772,.F.);
-#1041=ORIENTED_EDGE('',*,*,#777,.F.);
-#1042=ORIENTED_EDGE('',*,*,#778,.T.);
-#1043=ORIENTED_EDGE('',*,*,#779,.T.);
-#1044=ORIENTED_EDGE('',*,*,#780,.F.);
-#1045=ORIENTED_EDGE('',*,*,#781,.F.);
-#1046=ORIENTED_EDGE('',*,*,#782,.T.);
-#1047=ORIENTED_EDGE('',*,*,#783,.T.);
-#1048=ORIENTED_EDGE('',*,*,#778,.F.);
-#1049=ORIENTED_EDGE('',*,*,#784,.F.);
-#1050=ORIENTED_EDGE('',*,*,#785,.T.);
-#1051=ORIENTED_EDGE('',*,*,#786,.T.);
-#1052=ORIENTED_EDGE('',*,*,#782,.F.);
-#1053=ORIENTED_EDGE('',*,*,#787,.F.);
-#1054=ORIENTED_EDGE('',*,*,#788,.T.);
-#1055=ORIENTED_EDGE('',*,*,#789,.T.);
-#1056=ORIENTED_EDGE('',*,*,#785,.F.);
-#1057=ORIENTED_EDGE('',*,*,#790,.F.);
-#1058=ORIENTED_EDGE('',*,*,#791,.T.);
-#1059=ORIENTED_EDGE('',*,*,#792,.T.);
-#1060=ORIENTED_EDGE('',*,*,#788,.F.);
-#1061=ORIENTED_EDGE('',*,*,#793,.F.);
-#1062=ORIENTED_EDGE('',*,*,#794,.T.);
-#1063=ORIENTED_EDGE('',*,*,#795,.T.);
-#1064=ORIENTED_EDGE('',*,*,#791,.F.);
-#1065=ORIENTED_EDGE('',*,*,#796,.F.);
-#1066=ORIENTED_EDGE('',*,*,#797,.T.);
-#1067=ORIENTED_EDGE('',*,*,#798,.T.);
-#1068=ORIENTED_EDGE('',*,*,#794,.F.);
-#1069=ORIENTED_EDGE('',*,*,#799,.F.);
-#1070=ORIENTED_EDGE('',*,*,#800,.T.);
-#1071=ORIENTED_EDGE('',*,*,#801,.T.);
-#1072=ORIENTED_EDGE('',*,*,#797,.F.);
-#1073=ORIENTED_EDGE('',*,*,#802,.F.);
-#1074=ORIENTED_EDGE('',*,*,#803,.T.);
-#1075=ORIENTED_EDGE('',*,*,#804,.T.);
-#1076=ORIENTED_EDGE('',*,*,#800,.F.);
-#1077=ORIENTED_EDGE('',*,*,#805,.F.);
-#1078=ORIENTED_EDGE('',*,*,#806,.F.);
-#1079=ORIENTED_EDGE('',*,*,#807,.T.);
-#1080=ORIENTED_EDGE('',*,*,#803,.F.);
-#1081=ORIENTED_EDGE('',*,*,#808,.F.);
-#1082=ORIENTED_EDGE('',*,*,#809,.T.);
-#1083=ORIENTED_EDGE('',*,*,#810,.T.);
-#1084=ORIENTED_EDGE('',*,*,#811,.F.);
-#1085=ORIENTED_EDGE('',*,*,#812,.F.);
-#1086=ORIENTED_EDGE('',*,*,#813,.T.);
-#1087=ORIENTED_EDGE('',*,*,#814,.T.);
-#1088=ORIENTED_EDGE('',*,*,#809,.F.);
-#1089=ORIENTED_EDGE('',*,*,#815,.F.);
-#1090=ORIENTED_EDGE('',*,*,#816,.T.);
-#1091=ORIENTED_EDGE('',*,*,#817,.T.);
-#1092=ORIENTED_EDGE('',*,*,#813,.F.);
-#1093=ORIENTED_EDGE('',*,*,#818,.F.);
-#1094=ORIENTED_EDGE('',*,*,#758,.T.);
-#1095=ORIENTED_EDGE('',*,*,#819,.T.);
-#1096=ORIENTED_EDGE('',*,*,#816,.F.);
-#1097=ORIENTED_EDGE('',*,*,#819,.F.);
-#1098=ORIENTED_EDGE('',*,*,#757,.F.);
-#1099=ORIENTED_EDGE('',*,*,#761,.F.);
-#1100=ORIENTED_EDGE('',*,*,#764,.F.);
-#1101=ORIENTED_EDGE('',*,*,#767,.F.);
-#1102=ORIENTED_EDGE('',*,*,#770,.F.);
-#1103=ORIENTED_EDGE('',*,*,#773,.F.);
-#1104=ORIENTED_EDGE('',*,*,#776,.F.);
-#1105=ORIENTED_EDGE('',*,*,#820,.F.);
-#1106=ORIENTED_EDGE('',*,*,#821,.F.);
-#1107=ORIENTED_EDGE('',*,*,#822,.F.);
-#1108=ORIENTED_EDGE('',*,*,#779,.F.);
-#1109=ORIENTED_EDGE('',*,*,#783,.F.);
-#1110=ORIENTED_EDGE('',*,*,#786,.F.);
-#1111=ORIENTED_EDGE('',*,*,#789,.F.);
-#1112=ORIENTED_EDGE('',*,*,#792,.F.);
-#1113=ORIENTED_EDGE('',*,*,#795,.F.);
-#1114=ORIENTED_EDGE('',*,*,#798,.F.);
-#1115=ORIENTED_EDGE('',*,*,#801,.F.);
-#1116=ORIENTED_EDGE('',*,*,#804,.F.);
-#1117=ORIENTED_EDGE('',*,*,#807,.F.);
-#1118=ORIENTED_EDGE('',*,*,#823,.F.);
-#1119=ORIENTED_EDGE('',*,*,#810,.F.);
-#1120=ORIENTED_EDGE('',*,*,#814,.F.);
-#1121=ORIENTED_EDGE('',*,*,#817,.F.);
-#1122=ORIENTED_EDGE('',*,*,#780,.T.);
-#1123=ORIENTED_EDGE('',*,*,#822,.T.);
-#1124=ORIENTED_EDGE('',*,*,#824,.F.);
-#1125=ORIENTED_EDGE('',*,*,#825,.F.);
-#1126=ORIENTED_EDGE('',*,*,#826,.T.);
-#1127=ORIENTED_EDGE('',*,*,#827,.F.);
-#1128=ORIENTED_EDGE('',*,*,#821,.T.);
-#1129=ORIENTED_EDGE('',*,*,#828,.F.);
-#1130=ORIENTED_EDGE('',*,*,#829,.T.);
-#1131=ORIENTED_EDGE('',*,*,#824,.T.);
-#1132=ORIENTED_EDGE('',*,*,#820,.T.);
-#1133=ORIENTED_EDGE('',*,*,#775,.T.);
-#1134=ORIENTED_EDGE('',*,*,#830,.F.);
-#1135=ORIENTED_EDGE('',*,*,#831,.F.);
-#1136=ORIENTED_EDGE('',*,*,#832,.T.);
-#1137=ORIENTED_EDGE('',*,*,#828,.T.);
-#1138=ORIENTED_EDGE('',*,*,#774,.T.);
-#1139=ORIENTED_EDGE('',*,*,#771,.T.);
-#1140=ORIENTED_EDGE('',*,*,#768,.T.);
-#1141=ORIENTED_EDGE('',*,*,#765,.T.);
-#1142=ORIENTED_EDGE('',*,*,#762,.T.);
-#1143=ORIENTED_EDGE('',*,*,#759,.T.);
-#1144=ORIENTED_EDGE('',*,*,#755,.T.);
-#1145=ORIENTED_EDGE('',*,*,#818,.T.);
-#1146=ORIENTED_EDGE('',*,*,#815,.T.);
-#1147=ORIENTED_EDGE('',*,*,#812,.T.);
-#1148=ORIENTED_EDGE('',*,*,#808,.T.);
-#1149=ORIENTED_EDGE('',*,*,#833,.T.);
-#1150=ORIENTED_EDGE('',*,*,#834,.T.);
-#1151=ORIENTED_EDGE('',*,*,#830,.T.);
-#1152=ORIENTED_EDGE('',*,*,#740,.T.);
-#1153=ORIENTED_EDGE('',*,*,#737,.T.);
-#1154=ORIENTED_EDGE('',*,*,#734,.T.);
-#1155=ORIENTED_EDGE('',*,*,#731,.T.);
-#1156=ORIENTED_EDGE('',*,*,#728,.T.);
-#1157=ORIENTED_EDGE('',*,*,#725,.T.);
-#1158=ORIENTED_EDGE('',*,*,#722,.T.);
-#1159=ORIENTED_EDGE('',*,*,#719,.T.);
-#1160=ORIENTED_EDGE('',*,*,#716,.T.);
-#1161=ORIENTED_EDGE('',*,*,#713,.T.);
-#1162=ORIENTED_EDGE('',*,*,#710,.T.);
-#1163=ORIENTED_EDGE('',*,*,#707,.T.);
-#1164=ORIENTED_EDGE('',*,*,#704,.T.);
-#1165=ORIENTED_EDGE('',*,*,#701,.T.);
-#1166=ORIENTED_EDGE('',*,*,#698,.T.);
-#1167=ORIENTED_EDGE('',*,*,#695,.T.);
-#1168=ORIENTED_EDGE('',*,*,#692,.T.);
-#1169=ORIENTED_EDGE('',*,*,#689,.T.);
-#1170=ORIENTED_EDGE('',*,*,#686,.T.);
-#1171=ORIENTED_EDGE('',*,*,#683,.T.);
-#1172=ORIENTED_EDGE('',*,*,#680,.T.);
-#1173=ORIENTED_EDGE('',*,*,#677,.T.);
-#1174=ORIENTED_EDGE('',*,*,#673,.T.);
-#1175=ORIENTED_EDGE('',*,*,#750,.T.);
-#1176=ORIENTED_EDGE('',*,*,#747,.T.);
-#1177=ORIENTED_EDGE('',*,*,#743,.T.);
-#1178=ORIENTED_EDGE('',*,*,#835,.T.);
-#1179=ORIENTED_EDGE('',*,*,#805,.T.);
-#1180=ORIENTED_EDGE('',*,*,#802,.T.);
-#1181=ORIENTED_EDGE('',*,*,#799,.T.);
-#1182=ORIENTED_EDGE('',*,*,#796,.T.);
-#1183=ORIENTED_EDGE('',*,*,#793,.T.);
-#1184=ORIENTED_EDGE('',*,*,#790,.T.);
-#1185=ORIENTED_EDGE('',*,*,#787,.T.);
-#1186=ORIENTED_EDGE('',*,*,#784,.T.);
-#1187=ORIENTED_EDGE('',*,*,#781,.T.);
-#1188=ORIENTED_EDGE('',*,*,#777,.T.);
-#1189=ORIENTED_EDGE('',*,*,#827,.T.);
-#1190=ORIENTED_EDGE('',*,*,#836,.T.);
-#1191=ORIENTED_EDGE('',*,*,#837,.T.);
-#1192=ORIENTED_EDGE('',*,*,#838,.T.);
-#1193=ORIENTED_EDGE('',*,*,#839,.T.);
-#1194=ORIENTED_EDGE('',*,*,#840,.T.);
-#1195=ORIENTED_EDGE('',*,*,#841,.T.);
-#1196=ORIENTED_EDGE('',*,*,#837,.F.);
-#1197=ORIENTED_EDGE('',*,*,#842,.T.);
-#1198=ORIENTED_EDGE('',*,*,#843,.F.);
-#1199=ORIENTED_EDGE('',*,*,#844,.F.);
-#1200=ORIENTED_EDGE('',*,*,#838,.F.);
-#1201=ORIENTED_EDGE('',*,*,#844,.T.);
-#1202=ORIENTED_EDGE('',*,*,#845,.F.);
-#1203=ORIENTED_EDGE('',*,*,#846,.F.);
-#1204=ORIENTED_EDGE('',*,*,#847,.T.);
-#1205=ORIENTED_EDGE('',*,*,#848,.T.);
-#1206=ORIENTED_EDGE('',*,*,#845,.T.);
-#1207=ORIENTED_EDGE('',*,*,#843,.T.);
-#1208=ORIENTED_EDGE('',*,*,#849,.T.);
-#1209=ORIENTED_EDGE('',*,*,#850,.T.);
-#1210=ORIENTED_EDGE('',*,*,#851,.T.);
-#1211=ORIENTED_EDGE('',*,*,#852,.T.);
-#1212=ORIENTED_EDGE('',*,*,#853,.T.);
-#1213=ORIENTED_EDGE('',*,*,#854,.T.);
-#1214=ORIENTED_EDGE('',*,*,#855,.T.);
-#1215=ORIENTED_EDGE('',*,*,#841,.F.);
-#1216=ORIENTED_EDGE('',*,*,#856,.T.);
-#1217=ORIENTED_EDGE('',*,*,#857,.T.);
-#1218=ORIENTED_EDGE('',*,*,#856,.F.);
-#1219=ORIENTED_EDGE('',*,*,#858,.T.);
-#1220=ORIENTED_EDGE('',*,*,#859,.T.);
-#1221=ORIENTED_EDGE('',*,*,#851,.F.);
-#1222=ORIENTED_EDGE('',*,*,#860,.F.);
-#1223=ORIENTED_EDGE('',*,*,#861,.F.);
-#1224=ORIENTED_EDGE('',*,*,#860,.T.);
-#1225=ORIENTED_EDGE('',*,*,#850,.F.);
-#1226=ORIENTED_EDGE('',*,*,#862,.F.);
-#1227=ORIENTED_EDGE('',*,*,#863,.T.);
-#1228=ORIENTED_EDGE('',*,*,#862,.T.);
-#1229=ORIENTED_EDGE('',*,*,#849,.F.);
-#1230=ORIENTED_EDGE('',*,*,#864,.T.);
-#1231=ORIENTED_EDGE('',*,*,#847,.F.);
-#1232=ORIENTED_EDGE('',*,*,#842,.F.);
-#1233=ORIENTED_EDGE('',*,*,#836,.F.);
-#1234=ORIENTED_EDGE('',*,*,#826,.F.);
-#1235=ORIENTED_EDGE('',*,*,#865,.T.);
-#1236=ORIENTED_EDGE('',*,*,#831,.T.);
-#1237=ORIENTED_EDGE('',*,*,#834,.F.);
-#1238=ORIENTED_EDGE('',*,*,#866,.F.);
-#1239=ORIENTED_EDGE('',*,*,#754,.T.);
-#1240=ORIENTED_EDGE('',*,*,#867,.F.);
-#1241=ORIENTED_EDGE('',*,*,#868,.T.);
-#1242=ORIENTED_EDGE('',*,*,#866,.T.);
-#1243=ORIENTED_EDGE('',*,*,#833,.F.);
-#1244=ORIENTED_EDGE('',*,*,#811,.T.);
-#1245=ORIENTED_EDGE('',*,*,#823,.T.);
-#1246=ORIENTED_EDGE('',*,*,#806,.T.);
-#1247=ORIENTED_EDGE('',*,*,#835,.F.);
-#1248=ORIENTED_EDGE('',*,*,#746,.T.);
-#1249=ORIENTED_EDGE('',*,*,#753,.T.);
-#1250=ORIENTED_EDGE('',*,*,#869,.F.);
-#1251=ORIENTED_EDGE('',*,*,#870,.F.);
-#1252=ORIENTED_EDGE('',*,*,#867,.T.);
-#1253=ORIENTED_EDGE('',*,*,#741,.T.);
-#1254=ORIENTED_EDGE('',*,*,#840,.F.);
-#1255=ORIENTED_EDGE('',*,*,#871,.F.);
-#1256=ORIENTED_EDGE('',*,*,#872,.T.);
-#1257=ORIENTED_EDGE('',*,*,#869,.T.);
-#1258=ORIENTED_EDGE('',*,*,#752,.T.);
-#1259=ORIENTED_EDGE('',*,*,#873,.F.);
-#1260=ORIENTED_EDGE('',*,*,#871,.T.);
-#1261=ORIENTED_EDGE('',*,*,#839,.F.);
-#1262=ORIENTED_EDGE('',*,*,#846,.T.);
-#1263=ORIENTED_EDGE('',*,*,#848,.F.);
-#1264=ORIENTED_EDGE('',*,*,#864,.F.);
-#1265=ORIENTED_EDGE('',*,*,#855,.F.);
-#1266=ORIENTED_EDGE('',*,*,#874,.F.);
-#1267=ORIENTED_EDGE('',*,*,#875,.T.);
-#1268=ORIENTED_EDGE('',*,*,#874,.T.);
-#1269=ORIENTED_EDGE('',*,*,#854,.F.);
-#1270=ORIENTED_EDGE('',*,*,#876,.F.);
-#1271=ORIENTED_EDGE('',*,*,#877,.T.);
-#1272=ORIENTED_EDGE('',*,*,#876,.T.);
-#1273=ORIENTED_EDGE('',*,*,#853,.F.);
-#1274=ORIENTED_EDGE('',*,*,#878,.F.);
-#1275=ORIENTED_EDGE('',*,*,#879,.T.);
-#1276=ORIENTED_EDGE('',*,*,#878,.T.);
-#1277=ORIENTED_EDGE('',*,*,#852,.F.);
-#1278=ORIENTED_EDGE('',*,*,#859,.F.);
-#1279=ORIENTED_EDGE('',*,*,#879,.F.);
-#1280=ORIENTED_EDGE('',*,*,#858,.F.);
-#1281=ORIENTED_EDGE('',*,*,#861,.T.);
-#1282=ORIENTED_EDGE('',*,*,#863,.F.);
-#1283=ORIENTED_EDGE('',*,*,#825,.T.);
-#1284=ORIENTED_EDGE('',*,*,#829,.F.);
-#1285=ORIENTED_EDGE('',*,*,#832,.F.);
-#1286=ORIENTED_EDGE('',*,*,#865,.F.);
-#1287=ORIENTED_EDGE('',*,*,#868,.F.);
-#1288=ORIENTED_EDGE('',*,*,#870,.T.);
-#1289=ORIENTED_EDGE('',*,*,#872,.F.);
-#1290=ORIENTED_EDGE('',*,*,#873,.T.);
-#1291=ORIENTED_EDGE('',*,*,#875,.F.);
-#1292=ORIENTED_EDGE('',*,*,#877,.F.);
-#1293=ORIENTED_EDGE('',*,*,#857,.F.);
-#1294=PLANE('',#1414);
-#1295=PLANE('',#1418);
-#1296=PLANE('',#1422);
-#1297=PLANE('',#1426);
-#1298=PLANE('',#1430);
-#1299=PLANE('',#1434);
-#1300=PLANE('',#1438);
-#1301=PLANE('',#1442);
-#1302=PLANE('',#1446);
-#1303=PLANE('',#1450);
-#1304=PLANE('',#1454);
-#1305=PLANE('',#1458);
-#1306=PLANE('',#1462);
-#1307=PLANE('',#1466);
-#1308=PLANE('',#1472);
-#1309=PLANE('',#1476);
-#1310=PLANE('',#1480);
-#1311=PLANE('',#1484);
-#1312=PLANE('',#1488);
-#1313=PLANE('',#1492);
-#1314=PLANE('',#1496);
-#1315=PLANE('',#1500);
-#1316=PLANE('',#1507);
-#1317=PLANE('',#1511);
-#1318=PLANE('',#1512);
-#1319=PLANE('',#1515);
-#1320=PLANE('',#1521);
-#1321=PLANE('',#1523);
-#1322=PLANE('',#1528);
-#1323=PLANE('',#1531);
-#1324=PLANE('',#1533);
-#1325=PLANE('',#1541);
-#1326=PLANE('',#1548);
-#1327=PLANE('',#1553);
-#1328=PLANE('',#1560);
-#1329=ADVANCED_FACE('',(#129),#1294,.F.);
-#1330=ADVANCED_FACE('',(#130),#93,.T.);
-#1331=ADVANCED_FACE('',(#131),#1295,.F.);
-#1332=ADVANCED_FACE('',(#132),#94,.F.);
-#1333=ADVANCED_FACE('',(#133),#1296,.F.);
-#1334=ADVANCED_FACE('',(#134),#95,.T.);
-#1335=ADVANCED_FACE('',(#135),#1297,.F.);
-#1336=ADVANCED_FACE('',(#136),#96,.F.);
-#1337=ADVANCED_FACE('',(#137),#1298,.F.);
-#1338=ADVANCED_FACE('',(#138),#97,.T.);
-#1339=ADVANCED_FACE('',(#139),#1299,.F.);
-#1340=ADVANCED_FACE('',(#140),#98,.F.);
-#1341=ADVANCED_FACE('',(#141),#1300,.F.);
-#1342=ADVANCED_FACE('',(#142),#99,.T.);
-#1343=ADVANCED_FACE('',(#143),#1301,.F.);
-#1344=ADVANCED_FACE('',(#144),#100,.F.);
-#1345=ADVANCED_FACE('',(#145),#1302,.F.);
-#1346=ADVANCED_FACE('',(#146),#101,.T.);
-#1347=ADVANCED_FACE('',(#147),#1303,.F.);
-#1348=ADVANCED_FACE('',(#148),#102,.F.);
-#1349=ADVANCED_FACE('',(#149),#1304,.F.);
-#1350=ADVANCED_FACE('',(#150),#103,.T.);
-#1351=ADVANCED_FACE('',(#151),#1305,.F.);
-#1352=ADVANCED_FACE('',(#152),#104,.T.);
-#1353=ADVANCED_FACE('',(#153),#1306,.F.);
-#1354=ADVANCED_FACE('',(#154),#105,.F.);
-#1355=ADVANCED_FACE('',(#155),#1307,.T.);
-#1356=ADVANCED_FACE('',(#156),#106,.F.);
-#1357=ADVANCED_FACE('',(#157),#1308,.F.);
-#1358=ADVANCED_FACE('',(#158),#107,.T.);
-#1359=ADVANCED_FACE('',(#159),#1309,.F.);
-#1360=ADVANCED_FACE('',(#160),#108,.F.);
-#1361=ADVANCED_FACE('',(#161),#1310,.F.);
-#1362=ADVANCED_FACE('',(#162),#109,.T.);
-#1363=ADVANCED_FACE('',(#163),#1311,.F.);
-#1364=ADVANCED_FACE('',(#164),#110,.T.);
-#1365=ADVANCED_FACE('',(#165),#1312,.F.);
-#1366=ADVANCED_FACE('',(#166),#111,.F.);
-#1367=ADVANCED_FACE('',(#167),#1313,.F.);
-#1368=ADVANCED_FACE('',(#168),#112,.T.);
-#1369=ADVANCED_FACE('',(#169),#1314,.F.);
-#1370=ADVANCED_FACE('',(#170),#113,.F.);
-#1371=ADVANCED_FACE('',(#171),#1315,.F.);
-#1372=ADVANCED_FACE('',(#172),#114,.T.);
-#1373=ADVANCED_FACE('',(#173),#115,.F.);
-#1374=ADVANCED_FACE('',(#174),#1316,.F.);
-#1375=ADVANCED_FACE('',(#175),#116,.T.);
-#1376=ADVANCED_FACE('',(#176),#1317,.F.);
-#1377=ADVANCED_FACE('',(#177),#1318,.T.);
-#1378=ADVANCED_FACE('',(#178),#1319,.T.);
-#1379=ADVANCED_FACE('',(#179),#117,.T.);
-#1380=ADVANCED_FACE('',(#180),#118,.T.);
-#1381=ADVANCED_FACE('',(#181),#1320,.T.);
-#1382=ADVANCED_FACE('',(#182,#15),#1321,.T.);
-#1383=ADVANCED_FACE('',(#183),#1322,.T.);
-#1384=ADVANCED_FACE('',(#184),#119,.F.);
-#1385=ADVANCED_FACE('',(#185),#1323,.T.);
-#1386=ADVANCED_FACE('',(#186),#1324,.T.);
-#1387=ADVANCED_FACE('',(#187),#120,.F.);
-#1388=ADVANCED_FACE('',(#188),#1325,.T.);
-#1389=ADVANCED_FACE('',(#189),#121,.F.);
-#1390=ADVANCED_FACE('',(#190),#122,.T.);
-#1391=ADVANCED_FACE('',(#191),#123,.T.);
-#1392=ADVANCED_FACE('',(#192),#1326,.T.);
-#1393=ADVANCED_FACE('',(#193),#124,.F.);
-#1394=ADVANCED_FACE('',(#194),#125,.T.);
-#1395=ADVANCED_FACE('',(#195),#1327,.T.);
-#1396=ADVANCED_FACE('',(#196),#126,.T.);
-#1397=ADVANCED_FACE('',(#197),#127,.T.);
-#1398=ADVANCED_FACE('',(#198),#128,.T.);
-#1399=ADVANCED_FACE('',(#199,#16),#1328,.F.);
-#1400=CLOSED_SHELL('',(#1329,#1330,#1331,#1332,#1333,#1334,#1335,#1336,
-#1337,#1338,#1339,#1340,#1341,#1342,#1343,#1344,#1345,#1346,#1347,#1348,
-#1349,#1350,#1351,#1352,#1353,#1354,#1355,#1356,#1357,#1358,#1359,#1360,
-#1361,#1362,#1363,#1364,#1365,#1366,#1367,#1368,#1369,#1370,#1371,#1372,
-#1373,#1374,#1375,#1376,#1377,#1378,#1379,#1380,#1381,#1382,#1383,#1384,
-#1385,#1386,#1387,#1388,#1389,#1390,#1391,#1392,#1393,#1394,#1395,#1396,
-#1397,#1398,#1399));
-#1401=DERIVED_UNIT_ELEMENT(#1403,1.);
-#1402=DERIVED_UNIT_ELEMENT(#2412,3.);
-#1403=(
-MASS_UNIT()
-NAMED_UNIT(*)
-SI_UNIT(.KILO.,.GRAM.)
-);
-#1404=DERIVED_UNIT((#1401,#1402));
-#1405=MEASURE_REPRESENTATION_ITEM('density measure',
-POSITIVE_RATIO_MEASURE(7850.),#1404);
-#1406=PROPERTY_DEFINITION_REPRESENTATION(#1411,#1408);
-#1407=PROPERTY_DEFINITION_REPRESENTATION(#1412,#1409);
-#1408=REPRESENTATION('material name',(#1410),#2407);
-#1409=REPRESENTATION('density',(#1405),#2407);
-#1410=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel');
-#1411=PROPERTY_DEFINITION('material property','material name',#2417);
-#1412=PROPERTY_DEFINITION('material property','density of part',#2417);
-#1413=AXIS2_PLACEMENT_3D('placement',#1988,#1561,#1562);
-#1414=AXIS2_PLACEMENT_3D('',#1989,#1563,#1564);
-#1415=AXIS2_PLACEMENT_3D('',#1998,#1569,#1570);
-#1416=AXIS2_PLACEMENT_3D('',#2000,#1571,#1572);
-#1417=AXIS2_PLACEMENT_3D('',#2003,#1574,#1575);
-#1418=AXIS2_PLACEMENT_3D('',#2004,#1576,#1577);
-#1419=AXIS2_PLACEMENT_3D('',#2010,#1581,#1582);
-#1420=AXIS2_PLACEMENT_3D('',#2012,#1583,#1584);
-#1421=AXIS2_PLACEMENT_3D('',#2015,#1586,#1587);
-#1422=AXIS2_PLACEMENT_3D('',#2016,#1588,#1589);
-#1423=AXIS2_PLACEMENT_3D('',#2022,#1593,#1594);
-#1424=AXIS2_PLACEMENT_3D('',#2024,#1595,#1596);
-#1425=AXIS2_PLACEMENT_3D('',#2027,#1598,#1599);
-#1426=AXIS2_PLACEMENT_3D('',#2028,#1600,#1601);
-#1427=AXIS2_PLACEMENT_3D('',#2034,#1605,#1606);
-#1428=AXIS2_PLACEMENT_3D('',#2036,#1607,#1608);
-#1429=AXIS2_PLACEMENT_3D('',#2039,#1610,#1611);
-#1430=AXIS2_PLACEMENT_3D('',#2040,#1612,#1613);
-#1431=AXIS2_PLACEMENT_3D('',#2046,#1617,#1618);
-#1432=AXIS2_PLACEMENT_3D('',#2048,#1619,#1620);
-#1433=AXIS2_PLACEMENT_3D('',#2051,#1622,#1623);
-#1434=AXIS2_PLACEMENT_3D('',#2052,#1624,#1625);
-#1435=AXIS2_PLACEMENT_3D('',#2058,#1629,#1630);
-#1436=AXIS2_PLACEMENT_3D('',#2060,#1631,#1632);
-#1437=AXIS2_PLACEMENT_3D('',#2063,#1634,#1635);
-#1438=AXIS2_PLACEMENT_3D('',#2064,#1636,#1637);
-#1439=AXIS2_PLACEMENT_3D('',#2070,#1641,#1642);
-#1440=AXIS2_PLACEMENT_3D('',#2072,#1643,#1644);
-#1441=AXIS2_PLACEMENT_3D('',#2075,#1646,#1647);
-#1442=AXIS2_PLACEMENT_3D('',#2076,#1648,#1649);
-#1443=AXIS2_PLACEMENT_3D('',#2082,#1653,#1654);
-#1444=AXIS2_PLACEMENT_3D('',#2084,#1655,#1656);
-#1445=AXIS2_PLACEMENT_3D('',#2087,#1658,#1659);
-#1446=AXIS2_PLACEMENT_3D('',#2088,#1660,#1661);
-#1447=AXIS2_PLACEMENT_3D('',#2094,#1665,#1666);
-#1448=AXIS2_PLACEMENT_3D('',#2096,#1667,#1668);
-#1449=AXIS2_PLACEMENT_3D('',#2099,#1670,#1671);
-#1450=AXIS2_PLACEMENT_3D('',#2100,#1672,#1673);
-#1451=AXIS2_PLACEMENT_3D('',#2106,#1677,#1678);
-#1452=AXIS2_PLACEMENT_3D('',#2108,#1679,#1680);
-#1453=AXIS2_PLACEMENT_3D('',#2111,#1682,#1683);
-#1454=AXIS2_PLACEMENT_3D('',#2112,#1684,#1685);
-#1455=AXIS2_PLACEMENT_3D('',#2118,#1689,#1690);
-#1456=AXIS2_PLACEMENT_3D('',#2120,#1691,#1692);
-#1457=AXIS2_PLACEMENT_3D('',#2123,#1694,#1695);
-#1458=AXIS2_PLACEMENT_3D('',#2124,#1696,#1697);
-#1459=AXIS2_PLACEMENT_3D('',#2130,#1701,#1702);
-#1460=AXIS2_PLACEMENT_3D('',#2133,#1703,#1704);
-#1461=AXIS2_PLACEMENT_3D('',#2137,#1706,#1707);
-#1462=AXIS2_PLACEMENT_3D('',#2139,#1709,#1710);
-#1463=AXIS2_PLACEMENT_3D('',#2145,#1714,#1715);
-#1464=AXIS2_PLACEMENT_3D('',#2146,#1716,#1717);
-#1465=AXIS2_PLACEMENT_3D('',#2147,#1718,#1719);
-#1466=AXIS2_PLACEMENT_3D('',#2148,#1720,#1721);
-#1467=AXIS2_PLACEMENT_3D('',#2150,#1722,#1723);
-#1468=AXIS2_PLACEMENT_3D('',#2152,#1724,#1725);
-#1469=AXIS2_PLACEMENT_3D('',#2154,#1727,#1728);
-#1470=AXIS2_PLACEMENT_3D('',#2157,#1729,#1730);
-#1471=AXIS2_PLACEMENT_3D('',#2161,#1732,#1733);
-#1472=AXIS2_PLACEMENT_3D('',#2163,#1735,#1736);
-#1473=AXIS2_PLACEMENT_3D('',#2169,#1740,#1741);
-#1474=AXIS2_PLACEMENT_3D('',#2171,#1742,#1743);
-#1475=AXIS2_PLACEMENT_3D('',#2174,#1745,#1746);
-#1476=AXIS2_PLACEMENT_3D('',#2175,#1747,#1748);
-#1477=AXIS2_PLACEMENT_3D('',#2181,#1752,#1753);
-#1478=AXIS2_PLACEMENT_3D('',#2183,#1754,#1755);
-#1479=AXIS2_PLACEMENT_3D('',#2186,#1757,#1758);
-#1480=AXIS2_PLACEMENT_3D('',#2187,#1759,#1760);
-#1481=AXIS2_PLACEMENT_3D('',#2193,#1764,#1765);
-#1482=AXIS2_PLACEMENT_3D('',#2195,#1766,#1767);
-#1483=AXIS2_PLACEMENT_3D('',#2198,#1769,#1770);
-#1484=AXIS2_PLACEMENT_3D('',#2199,#1771,#1772);
-#1485=AXIS2_PLACEMENT_3D('',#2208,#1777,#1778);
-#1486=AXIS2_PLACEMENT_3D('',#2210,#1779,#1780);
-#1487=AXIS2_PLACEMENT_3D('',#2213,#1782,#1783);
-#1488=AXIS2_PLACEMENT_3D('',#2214,#1784,#1785);
-#1489=AXIS2_PLACEMENT_3D('',#2220,#1789,#1790);
-#1490=AXIS2_PLACEMENT_3D('',#2222,#1791,#1792);
-#1491=AXIS2_PLACEMENT_3D('',#2225,#1794,#1795);
-#1492=AXIS2_PLACEMENT_3D('',#2226,#1796,#1797);
-#1493=AXIS2_PLACEMENT_3D('',#2232,#1801,#1802);
-#1494=AXIS2_PLACEMENT_3D('',#2234,#1803,#1804);
-#1495=AXIS2_PLACEMENT_3D('',#2237,#1806,#1807);
-#1496=AXIS2_PLACEMENT_3D('',#2238,#1808,#1809);
-#1497=AXIS2_PLACEMENT_3D('',#2244,#1813,#1814);
-#1498=AXIS2_PLACEMENT_3D('',#2246,#1815,#1816);
-#1499=AXIS2_PLACEMENT_3D('',#2249,#1818,#1819);
-#1500=AXIS2_PLACEMENT_3D('',#2250,#1820,#1821);
-#1501=AXIS2_PLACEMENT_3D('',#2256,#1825,#1826);
-#1502=AXIS2_PLACEMENT_3D('',#2258,#1827,#1828);
-#1503=AXIS2_PLACEMENT_3D('',#2261,#1830,#1831);
-#1504=AXIS2_PLACEMENT_3D('',#2262,#1832,#1833);
-#1505=AXIS2_PLACEMENT_3D('',#2265,#1834,#1835);
-#1506=AXIS2_PLACEMENT_3D('',#2269,#1837,#1838);
-#1507=AXIS2_PLACEMENT_3D('',#2271,#1840,#1841);
-#1508=AXIS2_PLACEMENT_3D('',#2277,#1845,#1846);
-#1509=AXIS2_PLACEMENT_3D('',#2279,#1847,#1848);
-#1510=AXIS2_PLACEMENT_3D('',#2282,#1850,#1851);
-#1511=AXIS2_PLACEMENT_3D('',#2283,#1852,#1853);
-#1512=AXIS2_PLACEMENT_3D('',#2286,#1856,#1857);
-#1513=AXIS2_PLACEMENT_3D('',#2288,#1858,#1859);
-#1514=AXIS2_PLACEMENT_3D('',#2290,#1860,#1861);
-#1515=AXIS2_PLACEMENT_3D('',#2293,#1864,#1865);
-#1516=AXIS2_PLACEMENT_3D('',#2301,#1870,#1871);
-#1517=AXIS2_PLACEMENT_3D('',#2304,#1873,#1874);
-#1518=AXIS2_PLACEMENT_3D('',#2305,#1875,#1876);
-#1519=AXIS2_PLACEMENT_3D('',#2307,#1877,#1878);
-#1520=AXIS2_PLACEMENT_3D('',#2310,#1880,#1881);
-#1521=AXIS2_PLACEMENT_3D('',#2311,#1882,#1883);
-#1522=AXIS2_PLACEMENT_3D('',#2314,#1885,#1886);
-#1523=AXIS2_PLACEMENT_3D('',#2315,#1887,#1888);
-#1524=AXIS2_PLACEMENT_3D('',#2318,#1890,#1891);
-#1525=AXIS2_PLACEMENT_3D('',#2322,#1893,#1894);
-#1526=AXIS2_PLACEMENT_3D('',#2325,#1896,#1897);
-#1527=AXIS2_PLACEMENT_3D('',#2327,#1898,#1899);
-#1528=AXIS2_PLACEMENT_3D('',#2328,#1900,#1901);
-#1529=AXIS2_PLACEMENT_3D('',#2334,#1905,#1906);
-#1530=AXIS2_PLACEMENT_3D('',#2336,#1907,#1908);
-#1531=AXIS2_PLACEMENT_3D('',#2338,#1910,#1911);
-#1532=AXIS2_PLACEMENT_3D('',#2340,#1912,#1913);
-#1533=AXIS2_PLACEMENT_3D('',#2342,#1915,#1916);
-#1534=AXIS2_PLACEMENT_3D('',#2345,#1917,#1918);
-#1535=AXIS2_PLACEMENT_3D('',#2347,#1919,#1920);
-#1536=AXIS2_PLACEMENT_3D('',#2351,#1922,#1923);
-#1537=AXIS2_PLACEMENT_3D('',#2353,#1924,#1925);
-#1538=AXIS2_PLACEMENT_3D('',#2355,#1926,#1927);
-#1539=AXIS2_PLACEMENT_3D('',#2357,#1929,#1930);
-#1540=AXIS2_PLACEMENT_3D('',#2360,#1932,#1933);
-#1541=AXIS2_PLACEMENT_3D('',#2361,#1934,#1935);
-#1542=AXIS2_PLACEMENT_3D('',#2367,#1939,#1940);
-#1543=AXIS2_PLACEMENT_3D('',#2369,#1941,#1942);
-#1544=AXIS2_PLACEMENT_3D('',#2371,#1944,#1945);
-#1545=AXIS2_PLACEMENT_3D('',#2372,#1946,#1947);
-#1546=AXIS2_PLACEMENT_3D('',#2374,#1949,#1950);
-#1547=AXIS2_PLACEMENT_3D('',#2376,#1951,#1952);
-#1548=AXIS2_PLACEMENT_3D('',#2378,#1954,#1955);
-#1549=AXIS2_PLACEMENT_3D('',#2382,#1958,#1959);
-#1550=AXIS2_PLACEMENT_3D('',#2385,#1961,#1962);
-#1551=AXIS2_PLACEMENT_3D('',#2386,#1963,#1964);
-#1552=AXIS2_PLACEMENT_3D('',#2389,#1966,#1967);
-#1553=AXIS2_PLACEMENT_3D('',#2390,#1968,#1969);
-#1554=AXIS2_PLACEMENT_3D('',#2394,#1972,#1973);
-#1555=AXIS2_PLACEMENT_3D('',#2396,#1974,#1975);
-#1556=AXIS2_PLACEMENT_3D('',#2398,#1977,#1978);
-#1557=AXIS2_PLACEMENT_3D('',#2400,#1979,#1980);
-#1558=AXIS2_PLACEMENT_3D('',#2402,#1982,#1983);
-#1559=AXIS2_PLACEMENT_3D('',#2403,#1984,#1985);
-#1560=AXIS2_PLACEMENT_3D('',#2404,#1986,#1987);
-#1561=DIRECTION('axis',(0.,0.,1.));
-#1562=DIRECTION('refdir',(1.,0.,0.));
-#1563=DIRECTION('center_axis',(-0.944323537506677,-0.329018322454655,0.));
-#1564=DIRECTION('ref_axis',(-0.329018322454655,0.944323537506677,0.));
-#1565=DIRECTION('',(-0.329018322454655,0.944323537506677,0.));
-#1566=DIRECTION('',(0.,0.,-1.));
-#1567=DIRECTION('',(-0.329018322454655,0.944323537506677,0.));
-#1568=DIRECTION('',(0.,0.,-1.));
-#1569=DIRECTION('center_axis',(0.,0.,-1.));
-#1570=DIRECTION('ref_axis',(-0.238377476852116,-0.971172579168924,0.));
-#1571=DIRECTION('center_axis',(0.,0.,1.));
-#1572=DIRECTION('ref_axis',(-0.238377476852116,-0.971172579168924,0.));
-#1573=DIRECTION('',(0.,0.,-1.));
-#1574=DIRECTION('center_axis',(0.,0.,1.));
-#1575=DIRECTION('ref_axis',(-0.238377476852116,-0.971172579168924,0.));
-#1576=DIRECTION('center_axis',(0.238377476852119,0.971172579168923,0.));
-#1577=DIRECTION('ref_axis',(0.971172579168923,-0.238377476852119,0.));
-#1578=DIRECTION('',(0.971172579168923,-0.238377476852119,0.));
-#1579=DIRECTION('',(0.,0.,-1.));
-#1580=DIRECTION('',(0.971172579168923,-0.238377476852119,0.));
-#1581=DIRECTION('center_axis',(0.,0.,-1.));
-#1582=DIRECTION('ref_axis',(1.,0.,0.));
-#1583=DIRECTION('center_axis',(0.,0.,-1.));
-#1584=DIRECTION('ref_axis',(1.,0.,0.));
-#1585=DIRECTION('',(0.,0.,-1.));
-#1586=DIRECTION('center_axis',(0.,0.,-1.));
-#1587=DIRECTION('ref_axis',(1.,0.,0.));
-#1588=DIRECTION('center_axis',(-0.653299011645042,-0.757099994309609,0.));
-#1589=DIRECTION('ref_axis',(-0.757099994309609,0.653299011645042,0.));
-#1590=DIRECTION('',(-0.757099994309609,0.653299011645042,0.));
-#1591=DIRECTION('',(0.,0.,-1.));
-#1592=DIRECTION('',(-0.757099994309609,0.653299011645042,0.));
-#1593=DIRECTION('center_axis',(0.,0.,-1.));
-#1594=DIRECTION('ref_axis',(0.279145338940489,-0.9602488634452,0.));
-#1595=DIRECTION('center_axis',(0.,0.,1.));
-#1596=DIRECTION('ref_axis',(0.279145338940489,-0.9602488634452,0.));
-#1597=DIRECTION('',(0.,0.,-1.));
-#1598=DIRECTION('center_axis',(0.,0.,1.));
-#1599=DIRECTION('ref_axis',(0.279145338940489,-0.9602488634452,0.));
-#1600=DIRECTION('center_axis',(-0.27914533894049,0.9602488634452,0.));
-#1601=DIRECTION('ref_axis',(0.9602488634452,0.27914533894049,0.));
-#1602=DIRECTION('',(0.9602488634452,0.27914533894049,0.));
-#1603=DIRECTION('',(0.,0.,-1.));
-#1604=DIRECTION('',(0.9602488634452,0.27914533894049,0.));
-#1605=DIRECTION('center_axis',(0.,0.,-1.));
-#1606=DIRECTION('ref_axis',(-0.998882296127811,-0.0472668856857734,0.));
-#1607=DIRECTION('center_axis',(0.,0.,-1.));
-#1608=DIRECTION('ref_axis',(1.,0.,0.));
-#1609=DIRECTION('',(0.,0.,-1.));
-#1610=DIRECTION('center_axis',(0.,0.,-1.));
-#1611=DIRECTION('ref_axis',(1.,0.,0.));
-#1612=DIRECTION('center_axis',(-0.187223543197068,-0.982317334099697,0.));
-#1613=DIRECTION('ref_axis',(-0.982317334099697,0.187223543197068,0.));
-#1614=DIRECTION('',(-0.982317334099697,0.187223543197068,0.));
-#1615=DIRECTION('',(0.,0.,-1.));
-#1616=DIRECTION('',(-0.982317334099697,0.187223543197068,0.));
-#1617=DIRECTION('center_axis',(0.,0.,-1.));
-#1618=DIRECTION('ref_axis',(0.721871386593082,-0.692027240228433,0.));
-#1619=DIRECTION('center_axis',(0.,0.,1.));
-#1620=DIRECTION('ref_axis',(0.721871386593082,-0.692027240228433,0.));
-#1621=DIRECTION('',(0.,0.,-1.));
-#1622=DIRECTION('center_axis',(0.,0.,1.));
-#1623=DIRECTION('ref_axis',(0.721871386593082,-0.692027240228433,0.));
-#1624=DIRECTION('center_axis',(-0.721871386593082,0.692027240228433,0.));
-#1625=DIRECTION('ref_axis',(0.692027240228433,0.721871386593082,0.));
-#1626=DIRECTION('',(0.692027240228433,0.721871386593082,0.));
-#1627=DIRECTION('',(0.,0.,-1.));
-#1628=DIRECTION('',(0.692027240228433,0.721871386593082,0.));
-#1629=DIRECTION('center_axis',(0.,0.,-1.));
-#1630=DIRECTION('ref_axis',(1.,0.,0.));
-#1631=DIRECTION('center_axis',(0.,0.,-1.));
-#1632=DIRECTION('ref_axis',(1.,0.,0.));
-#1633=DIRECTION('',(0.,0.,-1.));
-#1634=DIRECTION('center_axis',(0.,0.,-1.));
-#1635=DIRECTION('ref_axis',(1.,0.,0.));
-#1636=DIRECTION('center_axis',(0.329018322454654,-0.944323537506677,0.));
-#1637=DIRECTION('ref_axis',(-0.944323537506677,-0.329018322454654,0.));
-#1638=DIRECTION('',(-0.944323537506677,-0.329018322454654,0.));
-#1639=DIRECTION('',(0.,0.,-1.));
-#1640=DIRECTION('',(-0.944323537506677,-0.329018322454654,0.));
-#1641=DIRECTION('center_axis',(0.,0.,-1.));
-#1642=DIRECTION('ref_axis',(0.971172579168923,-0.238377476852119,0.));
-#1643=DIRECTION('center_axis',(0.,0.,1.));
-#1644=DIRECTION('ref_axis',(0.971172579168923,-0.238377476852119,0.));
-#1645=DIRECTION('',(0.,0.,-1.));
-#1646=DIRECTION('center_axis',(0.,0.,1.));
-#1647=DIRECTION('ref_axis',(0.971172579168923,-0.238377476852119,0.));
-#1648=DIRECTION('center_axis',(-0.971172579168923,0.238377476852119,0.));
-#1649=DIRECTION('ref_axis',(0.238377476852119,0.971172579168923,0.));
-#1650=DIRECTION('',(0.238377476852119,0.971172579168923,0.));
-#1651=DIRECTION('',(0.,0.,-1.));
-#1652=DIRECTION('',(0.238377476852119,0.971172579168923,0.));
-#1653=DIRECTION('center_axis',(0.,0.,-1.));
-#1654=DIRECTION('ref_axis',(1.,0.,0.));
-#1655=DIRECTION('center_axis',(0.,0.,-1.));
-#1656=DIRECTION('ref_axis',(1.,0.,0.));
-#1657=DIRECTION('',(0.,0.,-1.));
-#1658=DIRECTION('center_axis',(0.,0.,-1.));
-#1659=DIRECTION('ref_axis',(1.,0.,0.));
-#1660=DIRECTION('center_axis',(0.757099994309609,-0.653299011645043,0.));
-#1661=DIRECTION('ref_axis',(-0.653299011645043,-0.757099994309609,0.));
-#1662=DIRECTION('',(-0.653299011645043,-0.757099994309609,0.));
-#1663=DIRECTION('',(0.,0.,-1.));
-#1664=DIRECTION('',(-0.653299011645043,-0.757099994309609,0.));
-#1665=DIRECTION('center_axis',(0.,0.,-1.));
-#1666=DIRECTION('ref_axis',(0.9602488634452,0.279145338940489,0.));
-#1667=DIRECTION('center_axis',(0.,0.,1.));
-#1668=DIRECTION('ref_axis',(0.9602488634452,0.279145338940489,0.));
-#1669=DIRECTION('',(0.,0.,-1.));
-#1670=DIRECTION('center_axis',(0.,0.,1.));
-#1671=DIRECTION('ref_axis',(0.9602488634452,0.279145338940489,0.));
-#1672=DIRECTION('center_axis',(-0.9602488634452,-0.27914533894049,0.));
-#1673=DIRECTION('ref_axis',(-0.27914533894049,0.9602488634452,0.));
-#1674=DIRECTION('',(-0.27914533894049,0.9602488634452,0.));
-#1675=DIRECTION('',(0.,0.,-1.));
-#1676=DIRECTION('',(-0.27914533894049,0.9602488634452,0.));
-#1677=DIRECTION('center_axis',(0.,0.,-1.));
-#1678=DIRECTION('ref_axis',(1.,0.,0.));
-#1679=DIRECTION('center_axis',(0.,0.,-1.));
-#1680=DIRECTION('ref_axis',(1.,0.,0.));
-#1681=DIRECTION('',(0.,0.,-1.));
-#1682=DIRECTION('center_axis',(0.,0.,-1.));
-#1683=DIRECTION('ref_axis',(1.,0.,0.));
-#1684=DIRECTION('center_axis',(0.982317334099697,-0.187223543197069,0.));
-#1685=DIRECTION('ref_axis',(-0.187223543197069,-0.982317334099697,0.));
-#1686=DIRECTION('',(-0.187223543197069,-0.982317334099697,0.));
-#1687=DIRECTION('',(0.,0.,-1.));
-#1688=DIRECTION('',(-0.187223543197069,-0.982317334099697,0.));
-#1689=DIRECTION('center_axis',(0.,0.,-1.));
-#1690=DIRECTION('ref_axis',(0.692027240228434,0.721871386593081,0.));
-#1691=DIRECTION('center_axis',(0.,0.,1.));
-#1692=DIRECTION('ref_axis',(0.692027240228434,0.721871386593081,0.));
-#1693=DIRECTION('',(0.,0.,-1.));
-#1694=DIRECTION('center_axis',(0.,0.,1.));
-#1695=DIRECTION('ref_axis',(0.692027240228434,0.721871386593081,0.));
-#1696=DIRECTION('center_axis',(-0.692027240228433,-0.721871386593082,0.));
-#1697=DIRECTION('ref_axis',(-0.721871386593082,0.692027240228433,0.));
-#1698=DIRECTION('',(-0.721871386593082,0.692027240228433,0.));
-#1699=DIRECTION('',(0.,0.,1.));
-#1700=DIRECTION('',(-0.721871386593082,0.692027240228433,0.));
-#1701=DIRECTION('center_axis',(0.,0.,-1.));
-#1702=DIRECTION('ref_axis',(-0.692027240228434,-0.721871386593081,0.));
-#1703=DIRECTION('center_axis',(0.,0.,1.));
-#1704=DIRECTION('ref_axis',(-0.692027240228434,-0.721871386593081,0.));
-#1705=DIRECTION('',(0.,0.,-1.));
-#1706=DIRECTION('center_axis',(0.,0.,1.));
-#1707=DIRECTION('ref_axis',(-0.692027240228434,-0.721871386593081,0.));
-#1708=DIRECTION('',(0.,0.,-1.));
-#1709=DIRECTION('center_axis',(0.692027240228433,0.721871386593082,0.));
-#1710=DIRECTION('ref_axis',(0.721871386593082,-0.692027240228432,0.));
-#1711=DIRECTION('',(0.721871386593082,-0.692027240228432,0.));
-#1712=DIRECTION('',(0.,0.,-1.));
-#1713=DIRECTION('',(0.721871386593082,-0.692027240228432,0.));
-#1714=DIRECTION('center_axis',(0.,0.,-1.));
-#1715=DIRECTION('ref_axis',(1.,0.,0.));
-#1716=DIRECTION('center_axis',(0.,0.,-1.));
-#1717=DIRECTION('ref_axis',(1.,0.,0.));
-#1718=DIRECTION('center_axis',(0.,0.,-1.));
-#1719=DIRECTION('ref_axis',(1.,0.,0.));
-#1720=DIRECTION('center_axis',(0.,0.,1.));
-#1721=DIRECTION('ref_axis',(1.,0.,0.));
-#1722=DIRECTION('center_axis',(0.,0.,-1.));
-#1723=DIRECTION('ref_axis',(1.,0.,0.));
-#1724=DIRECTION('center_axis',(0.,0.,1.));
-#1725=DIRECTION('ref_axis',(-0.787494253961058,0.616321993748655,0.));
-#1726=DIRECTION('',(-0.616321993748656,-0.787494253961057,0.));
-#1727=DIRECTION('center_axis',(0.,0.,-1.));
-#1728=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1729=DIRECTION('center_axis',(0.,0.,-1.));
-#1730=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1731=DIRECTION('',(0.,0.,-1.));
-#1732=DIRECTION('center_axis',(0.,0.,-1.));
-#1733=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1734=DIRECTION('',(0.,0.,-1.));
-#1735=DIRECTION('center_axis',(0.99828046005034,0.0586184534228113,0.));
-#1736=DIRECTION('ref_axis',(0.0586184534228113,-0.99828046005034,0.));
-#1737=DIRECTION('',(0.0586184534228113,-0.99828046005034,0.));
-#1738=DIRECTION('',(0.,0.,-1.));
-#1739=DIRECTION('',(0.0586184534228113,-0.99828046005034,0.));
-#1740=DIRECTION('center_axis',(0.,0.,-1.));
-#1741=DIRECTION('ref_axis',(0.560731652099942,0.827997593192921,0.));
-#1742=DIRECTION('center_axis',(0.,0.,1.));
-#1743=DIRECTION('ref_axis',(0.560731652099942,0.827997593192921,0.));
-#1744=DIRECTION('',(0.,0.,-1.));
-#1745=DIRECTION('center_axis',(0.,0.,1.));
-#1746=DIRECTION('ref_axis',(0.560731652099942,0.827997593192921,0.));
-#1747=DIRECTION('center_axis',(-0.560731652099944,-0.827997593192919,0.));
-#1748=DIRECTION('ref_axis',(-0.827997593192919,0.560731652099944,0.));
-#1749=DIRECTION('',(-0.827997593192919,0.560731652099944,0.));
-#1750=DIRECTION('',(0.,0.,-1.));
-#1751=DIRECTION('',(-0.827997593192919,0.560731652099944,0.));
-#1752=DIRECTION('center_axis',(0.,0.,-1.));
-#1753=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1754=DIRECTION('center_axis',(0.,0.,-1.));
-#1755=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1756=DIRECTION('',(0.,0.,-1.));
-#1757=DIRECTION('center_axis',(0.,0.,-1.));
-#1758=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1759=DIRECTION('center_axis',(0.980708965214959,0.195473592965916,0.));
-#1760=DIRECTION('ref_axis',(0.195473592965916,-0.980708965214959,0.));
-#1761=DIRECTION('',(0.195473592965916,-0.980708965214959,0.));
-#1762=DIRECTION('',(0.,0.,-1.));
-#1763=DIRECTION('',(0.195473592965916,-0.980708965214959,0.));
-#1764=DIRECTION('center_axis',(0.,0.,-1.));
-#1765=DIRECTION('ref_axis',(0.446773458134617,0.89464712434928,0.));
-#1766=DIRECTION('center_axis',(0.,0.,1.));
-#1767=DIRECTION('ref_axis',(0.446773458134617,0.89464712434928,0.));
-#1768=DIRECTION('',(0.,0.,1.));
-#1769=DIRECTION('center_axis',(0.,0.,1.));
-#1770=DIRECTION('ref_axis',(0.446773458134617,0.89464712434928,0.));
-#1771=DIRECTION('center_axis',(0.944861345009072,-0.327470668469174,0.));
-#1772=DIRECTION('ref_axis',(-0.327470668469174,-0.944861345009072,0.));
-#1773=DIRECTION('',(-0.327470668469174,-0.944861345009072,0.));
-#1774=DIRECTION('',(0.,0.,-1.));
-#1775=DIRECTION('',(-0.327470668469174,-0.944861345009072,0.));
-#1776=DIRECTION('',(0.,0.,-1.));
-#1777=DIRECTION('center_axis',(0.,0.,-1.));
-#1778=DIRECTION('ref_axis',(0.837283465859052,0.546769053439433,0.));
-#1779=DIRECTION('center_axis',(0.,0.,1.));
-#1780=DIRECTION('ref_axis',(0.837283465859052,0.546769053439433,0.));
-#1781=DIRECTION('',(0.,0.,-1.));
-#1782=DIRECTION('center_axis',(0.,0.,1.));
-#1783=DIRECTION('ref_axis',(0.837283465859052,0.546769053439433,0.));
-#1784=DIRECTION('center_axis',(-0.837283465859088,-0.546769053439378,0.));
-#1785=DIRECTION('ref_axis',(-0.546769053439377,0.837283465859088,0.));
-#1786=DIRECTION('',(-0.546769053439377,0.837283465859088,0.));
-#1787=DIRECTION('',(0.,0.,-1.));
-#1788=DIRECTION('',(-0.546769053439377,0.837283465859088,0.));
-#1789=DIRECTION('center_axis',(0.,0.,-1.));
-#1790=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1791=DIRECTION('center_axis',(0.,0.,-1.));
-#1792=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1793=DIRECTION('',(0.,0.,-1.));
-#1794=DIRECTION('center_axis',(0.,0.,-1.));
-#1795=DIRECTION('ref_axis',(0.327872450138762,-0.94472199955331,0.));
-#1796=DIRECTION('center_axis',(0.980165986368017,-0.198178301454049,0.));
-#1797=DIRECTION('ref_axis',(-0.198178301454049,-0.980165986368017,0.));
-#1798=DIRECTION('',(-0.198178301454049,-0.980165986368017,0.));
-#1799=DIRECTION('',(0.,0.,-1.));
-#1800=DIRECTION('',(-0.198178301454049,-0.980165986368017,0.));
-#1801=DIRECTION('center_axis',(0.,0.,-1.));
-#1802=DIRECTION('ref_axis',(0.762875269823182,0.646545684922734,0.));
-#1803=DIRECTION('center_axis',(0.,0.,1.));
-#1804=DIRECTION('ref_axis',(0.762875269823182,0.646545684922734,0.));
-#1805=DIRECTION('',(0.,0.,-1.));
-#1806=DIRECTION('center_axis',(0.,0.,1.));
-#1807=DIRECTION('ref_axis',(0.762875269823182,0.646545684922734,0.));
-#1808=DIRECTION('center_axis',(-0.762875269823183,-0.646545684922733,0.));
-#1809=DIRECTION('ref_axis',(-0.646545684922733,0.762875269823183,0.));
-#1810=DIRECTION('',(-0.646545684922733,0.762875269823183,0.));
-#1811=DIRECTION('',(0.,0.,-1.));
-#1812=DIRECTION('',(-0.646545684922733,0.762875269823183,0.));
-#1813=DIRECTION('center_axis',(0.,0.,-1.));
-#1814=DIRECTION('ref_axis',(1.,0.,0.));
-#1815=DIRECTION('center_axis',(0.,0.,-1.));
-#1816=DIRECTION('ref_axis',(1.,0.,0.));
-#1817=DIRECTION('',(0.,0.,-1.));
-#1818=DIRECTION('center_axis',(0.,0.,-1.));
-#1819=DIRECTION('ref_axis',(1.,0.,0.));
-#1820=DIRECTION('center_axis',(-0.960267008235121,-0.279082914015119,0.));
-#1821=DIRECTION('ref_axis',(-0.279082914015119,0.960267008235121,0.));
-#1822=DIRECTION('',(-0.279082914015119,0.960267008235121,0.));
-#1823=DIRECTION('',(0.,0.,-1.));
-#1824=DIRECTION('',(-0.279082914015119,0.960267008235121,0.));
-#1825=DIRECTION('center_axis',(0.,0.,-1.));
-#1826=DIRECTION('ref_axis',(1.,0.,0.));
-#1827=DIRECTION('center_axis',(0.,0.,1.));
-#1828=DIRECTION('ref_axis',(1.,0.,0.));
-#1829=DIRECTION('',(0.,0.,1.));
-#1830=DIRECTION('center_axis',(0.,0.,1.));
-#1831=DIRECTION('ref_axis',(1.,0.,0.));
-#1832=DIRECTION('center_axis',(0.,0.,-1.));
-#1833=DIRECTION('ref_axis',(1.,0.,0.));
-#1834=DIRECTION('center_axis',(0.,0.,-1.));
-#1835=DIRECTION('ref_axis',(1.,0.,0.));
-#1836=DIRECTION('',(0.,0.,-1.));
-#1837=DIRECTION('center_axis',(0.,0.,-1.));
-#1838=DIRECTION('ref_axis',(1.,0.,0.));
-#1839=DIRECTION('',(0.,0.,-1.));
-#1840=DIRECTION('center_axis',(0.997765212479337,-0.0668175184069596,0.));
-#1841=DIRECTION('ref_axis',(-0.0668175184069596,-0.997765212479337,0.));
-#1842=DIRECTION('',(-0.0668175184069596,-0.997765212479337,0.));
-#1843=DIRECTION('',(0.,0.,-1.));
-#1844=DIRECTION('',(-0.0668175184069596,-0.997765212479337,0.));
-#1845=DIRECTION('center_axis',(0.,0.,-1.));
-#1846=DIRECTION('ref_axis',(0.662102677776197,0.749413133112564,0.));
-#1847=DIRECTION('center_axis',(0.,0.,1.));
-#1848=DIRECTION('ref_axis',(0.662102677776197,0.749413133112564,0.));
-#1849=DIRECTION('',(0.,0.,-1.));
-#1850=DIRECTION('center_axis',(0.,0.,1.));
-#1851=DIRECTION('ref_axis',(0.662102677776197,0.749413133112564,0.));
-#1852=DIRECTION('center_axis',(-0.662102677776421,-0.749413133112366,0.));
-#1853=DIRECTION('ref_axis',(-0.749413133112366,0.662102677776421,0.));
-#1854=DIRECTION('',(-0.749413133112366,0.662102677776421,0.));
-#1855=DIRECTION('',(-0.749413133112366,0.662102677776421,0.));
-#1856=DIRECTION('center_axis',(0.,0.,1.));
-#1857=DIRECTION('ref_axis',(1.,0.,0.));
-#1858=DIRECTION('center_axis',(0.,0.,-1.));
-#1859=DIRECTION('ref_axis',(0.230528529045996,0.973065566802099,0.));
-#1860=DIRECTION('center_axis',(0.,0.,-1.));
-#1861=DIRECTION('ref_axis',(-0.647497885155509,0.762067246848428,0.));
-#1862=DIRECTION('',(-0.27908291401512,0.960267008235121,0.));
-#1863=DIRECTION('',(-0.616321993748656,-0.787494253961057,0.));
-#1864=DIRECTION('center_axis',(-0.960267008235121,-0.27908291401512,0.));
-#1865=DIRECTION('ref_axis',(0.27908291401512,-0.960267008235121,0.));
-#1866=DIRECTION('',(0.,0.,1.));
-#1867=DIRECTION('',(-0.27908291401512,0.960267008235121,0.));
-#1868=DIRECTION('',(0.,0.,1.));
-#1869=DIRECTION('',(0.27908291401512,-0.960267008235121,0.));
-#1870=DIRECTION('center_axis',(0.,0.,1.));
-#1871=DIRECTION('ref_axis',(-0.647497885155509,0.762067246848428,0.));
-#1872=DIRECTION('',(0.,0.,1.));
-#1873=DIRECTION('center_axis',(0.,0.,1.));
-#1874=DIRECTION('ref_axis',(-0.647497885155509,0.762067246848428,0.));
-#1875=DIRECTION('center_axis',(0.,0.,1.));
-#1876=DIRECTION('ref_axis',(0.230528529045996,0.973065566802099,0.));
-#1877=DIRECTION('center_axis',(0.,0.,1.));
-#1878=DIRECTION('ref_axis',(0.230528529045996,0.973065566802099,0.));
-#1879=DIRECTION('',(0.,0.,1.));
-#1880=DIRECTION('center_axis',(0.,0.,1.));
-#1881=DIRECTION('ref_axis',(0.230528529045996,0.973065566802099,0.));
-#1882=DIRECTION('center_axis',(0.,0.,1.));
-#1883=DIRECTION('ref_axis',(1.,0.,0.));
-#1884=DIRECTION('',(0.616321993748656,0.787494253961057,0.));
-#1885=DIRECTION('center_axis',(0.,0.,1.));
-#1886=DIRECTION('ref_axis',(0.787494253961057,-0.616321993748656,0.));
-#1887=DIRECTION('center_axis',(0.,0.,1.));
-#1888=DIRECTION('ref_axis',(1.,0.,0.));
-#1889=DIRECTION('',(0.616321993748656,0.787494253961057,0.));
-#1890=DIRECTION('center_axis',(0.,0.,-1.));
-#1891=DIRECTION('ref_axis',(1.,0.,0.));
-#1892=DIRECTION('',(0.861748532772567,-0.507335654438289,0.));
-#1893=DIRECTION('center_axis',(0.,0.,1.));
-#1894=DIRECTION('ref_axis',(1.,0.,0.));
-#1895=DIRECTION('',(0.,1.,0.));
-#1896=DIRECTION('center_axis',(0.,0.,1.));
-#1897=DIRECTION('ref_axis',(1.,0.,0.));
-#1898=DIRECTION('center_axis',(0.,0.,-1.));
-#1899=DIRECTION('ref_axis',(1.,0.,0.));
-#1900=DIRECTION('center_axis',(0.507335654438289,0.861748532772567,0.));
-#1901=DIRECTION('ref_axis',(-0.861748532772567,0.507335654438289,0.));
-#1902=DIRECTION('',(0.,0.,1.));
-#1903=DIRECTION('',(-0.861748532772567,0.507335654438289,0.));
-#1904=DIRECTION('',(0.,0.,1.));
-#1905=DIRECTION('center_axis',(0.,0.,1.));
-#1906=DIRECTION('ref_axis',(-0.744002004814936,-0.668177384256124,0.));
-#1907=DIRECTION('center_axis',(0.,0.,-1.));
-#1908=DIRECTION('ref_axis',(1.,0.,0.));
-#1909=DIRECTION('',(0.,0.,1.));
-#1910=DIRECTION('center_axis',(0.,0.,1.));
-#1911=DIRECTION('ref_axis',(1.,0.,0.));
-#1912=DIRECTION('center_axis',(0.,0.,1.));
-#1913=DIRECTION('ref_axis',(1.,0.,0.));
-#1914=DIRECTION('',(0.,1.,0.));
-#1915=DIRECTION('center_axis',(0.,0.,1.));
-#1916=DIRECTION('ref_axis',(1.,0.,0.));
-#1917=DIRECTION('center_axis',(0.,0.,-1.));
-#1918=DIRECTION('ref_axis',(1.,0.,0.));
-#1919=DIRECTION('center_axis',(0.,0.,-1.));
-#1920=DIRECTION('ref_axis',(1.,8.88178419700124E-16,0.));
-#1921=DIRECTION('',(0.,-1.,0.));
-#1922=DIRECTION('center_axis',(0.,0.,1.));
-#1923=DIRECTION('ref_axis',(-1.,0.,0.));
-#1924=DIRECTION('center_axis',(0.,0.,1.));
-#1925=DIRECTION('ref_axis',(-0.228538726342659,-0.97353482246999,0.));
-#1926=DIRECTION('center_axis',(0.,0.,1.));
-#1927=DIRECTION('ref_axis',(0.127016829212897,-0.991900562101213,0.));
-#1928=DIRECTION('',(0.,1.,0.));
-#1929=DIRECTION('center_axis',(0.,0.,1.));
-#1930=DIRECTION('ref_axis',(1.,0.,0.));
-#1931=DIRECTION('',(0.,0.,-1.));
-#1932=DIRECTION('center_axis',(0.,0.,-1.));
-#1933=DIRECTION('ref_axis',(1.,0.,0.));
-#1934=DIRECTION('center_axis',(-1.,0.,0.));
-#1935=DIRECTION('ref_axis',(0.,-1.,0.));
-#1936=DIRECTION('',(0.,-1.,0.));
-#1937=DIRECTION('',(0.,0.,1.));
-#1938=DIRECTION('',(0.,0.,1.));
-#1939=DIRECTION('center_axis',(0.,0.,1.));
-#1940=DIRECTION('ref_axis',(1.,8.88178419700124E-16,0.));
-#1941=DIRECTION('center_axis',(0.,0.,1.));
-#1942=DIRECTION('ref_axis',(1.,8.88178419700124E-16,0.));
-#1943=DIRECTION('',(0.,0.,1.));
-#1944=DIRECTION('center_axis',(0.,0.,1.));
-#1945=DIRECTION('ref_axis',(-0.960267008235121,-0.27908291401512,0.));
-#1946=DIRECTION('center_axis',(0.,0.,1.));
-#1947=DIRECTION('ref_axis',(-0.960267008235121,-0.27908291401512,0.));
-#1948=DIRECTION('',(0.,0.,1.));
-#1949=DIRECTION('center_axis',(0.,0.,1.));
-#1950=DIRECTION('ref_axis',(0.787494253961057,-0.616321993748656,0.));
-#1951=DIRECTION('center_axis',(0.,0.,1.));
-#1952=DIRECTION('ref_axis',(0.787494253961057,-0.616321993748656,0.));
-#1953=DIRECTION('',(0.,0.,1.));
-#1954=DIRECTION('center_axis',(0.787494253961057,-0.616321993748656,0.));
-#1955=DIRECTION('ref_axis',(0.616321993748656,0.787494253961057,0.));
-#1956=DIRECTION('',(0.,0.,1.));
-#1957=DIRECTION('',(0.616321993748656,0.787494253961057,0.));
-#1958=DIRECTION('center_axis',(0.,0.,1.));
-#1959=DIRECTION('ref_axis',(-0.787494253961058,0.616321993748655,0.));
-#1960=DIRECTION('',(0.,0.,1.));
-#1961=DIRECTION('center_axis',(0.,0.,1.));
-#1962=DIRECTION('ref_axis',(-0.787494253961058,0.616321993748655,0.));
-#1963=DIRECTION('center_axis',(0.,0.,1.));
-#1964=DIRECTION('ref_axis',(1.,0.,0.));
-#1965=DIRECTION('',(0.,0.,1.));
-#1966=DIRECTION('center_axis',(0.,0.,1.));
-#1967=DIRECTION('ref_axis',(1.,0.,0.));
-#1968=DIRECTION('center_axis',(1.,0.,0.));
-#1969=DIRECTION('ref_axis',(0.,1.,0.));
-#1970=DIRECTION('',(0.,-1.,0.));
-#1971=DIRECTION('',(0.,0.,1.));
-#1972=DIRECTION('center_axis',(0.,0.,1.));
-#1973=DIRECTION('ref_axis',(0.127016829212897,-0.991900562101213,0.));
-#1974=DIRECTION('center_axis',(0.,0.,1.));
-#1975=DIRECTION('ref_axis',(0.127016829212897,-0.991900562101213,0.));
-#1976=DIRECTION('',(0.,0.,1.));
-#1977=DIRECTION('center_axis',(0.,0.,1.));
-#1978=DIRECTION('ref_axis',(-0.228538726342659,-0.97353482246999,0.));
-#1979=DIRECTION('center_axis',(0.,0.,1.));
-#1980=DIRECTION('ref_axis',(-0.228538726342659,-0.97353482246999,0.));
-#1981=DIRECTION('',(0.,0.,1.));
-#1982=DIRECTION('center_axis',(0.,0.,1.));
-#1983=DIRECTION('ref_axis',(-1.,0.,0.));
-#1984=DIRECTION('center_axis',(0.,0.,1.));
-#1985=DIRECTION('ref_axis',(-1.,0.,0.));
-#1986=DIRECTION('center_axis',(0.,0.,1.));
-#1987=DIRECTION('ref_axis',(1.,0.,0.));
-#1988=CARTESIAN_POINT('',(0.,0.,0.));
-#1989=CARTESIAN_POINT('Origin',(-14.051154754889,17.5334799629134,2.));
-#1990=CARTESIAN_POINT('',(-14.051154754889,17.5334799629134,2.));
-#1991=CARTESIAN_POINT('',(-14.9290134256489,20.0530436127984,2.));
-#1992=CARTESIAN_POINT('',(-11.9641903584726,11.5436323861237,2.));
-#1993=CARTESIAN_POINT('',(-14.051154754889,17.5334799629134,1.5));
-#1994=CARTESIAN_POINT('',(-14.051154754889,17.5334799629134,2.));
-#1995=CARTESIAN_POINT('',(-14.9290134256489,20.0530436127984,1.5));
-#1996=CARTESIAN_POINT('',(-14.9290134256489,20.0530436127984,1.5));
-#1997=CARTESIAN_POINT('',(-14.9290134256489,20.0530436127984,2.));
-#1998=CARTESIAN_POINT('Origin',(-17.8284489049157,16.2174066730948,2.));
-#1999=CARTESIAN_POINT('',(-18.7819588123242,12.332716356419,2.));
-#2000=CARTESIAN_POINT('Origin',(-17.8284489049157,16.2174066730948,2.));
-#2001=CARTESIAN_POINT('',(-18.7819588123242,12.332716356419,1.5));
-#2002=CARTESIAN_POINT('',(-18.7819588123242,12.332716356419,2.));
-#2003=CARTESIAN_POINT('Origin',(-17.8284489049157,16.2174066730948,1.5));
-#2004=CARTESIAN_POINT('Origin',(-21.3731587888701,12.9687348413693,2.));
-#2005=CARTESIAN_POINT('',(-21.3731587888701,12.9687348413693,2.));
-#2006=CARTESIAN_POINT('',(-15.7789670318309,11.595622230209,2.));
-#2007=CARTESIAN_POINT('',(-21.3731587888701,12.9687348413693,1.5));
-#2008=CARTESIAN_POINT('',(-21.3731587888701,12.9687348413693,2.));
-#2009=CARTESIAN_POINT('',(-21.3731587888701,12.9687348413693,1.5));
-#2010=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2011=CARTESIAN_POINT('',(-22.9554266864501,9.90193847905625,2.));
-#2012=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2013=CARTESIAN_POINT('',(-22.9554266864501,9.90193847905625,1.5));
-#2014=CARTESIAN_POINT('',(-22.9554266864501,9.90193847905625,2.));
-#2015=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2016=CARTESIAN_POINT('Origin',(-20.9353969516971,8.1588616871839,2.));
-#2017=CARTESIAN_POINT('',(-20.9353969516971,8.1588616871839,2.));
-#2018=CARTESIAN_POINT('',(-17.4404477459562,5.14308189716793,2.));
-#2019=CARTESIAN_POINT('',(-20.9353969516971,8.15886168718389,1.5));
-#2020=CARTESIAN_POINT('',(-20.9353969516971,8.1588616871839,2.));
-#2021=CARTESIAN_POINT('',(-22.9554266864501,9.90193847905625,1.5));
-#2022=CARTESIAN_POINT('Origin',(-23.5485929982772,5.13046170994546,2.));
-#2023=CARTESIAN_POINT('',(-22.4320116425153,1.28946625616466,2.));
-#2024=CARTESIAN_POINT('Origin',(-23.5485929982772,5.13046170994546,2.));
-#2025=CARTESIAN_POINT('',(-22.4320116425153,1.28946625616466,1.5));
-#2026=CARTESIAN_POINT('',(-22.4320116425153,1.28946625616466,2.));
-#2027=CARTESIAN_POINT('Origin',(-23.5485929982772,5.13046170994546,1.5));
-#2028=CARTESIAN_POINT('Origin',(-24.9940658909648,0.544674433135155,2.));
-#2029=CARTESIAN_POINT('',(-24.9940658909648,0.544674433135155,2.));
-#2030=CARTESIAN_POINT('',(-18.1602810026425,2.53126277654951,2.));
-#2031=CARTESIAN_POINT('',(-24.9940658909648,0.544674433135155,1.5));
-#2032=CARTESIAN_POINT('',(-24.9940658909648,0.544674433135155,2.));
-#2033=CARTESIAN_POINT('',(-24.9940658909648,0.544674433135155,1.5));
-#2034=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2035=CARTESIAN_POINT('',(-24.8309519047052,-2.9023830736517,2.));
-#2036=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2037=CARTESIAN_POINT('',(-24.8309519047052,-2.9023830736517,1.5));
-#2038=CARTESIAN_POINT('',(-24.8309519047052,-2.9023830736517,2.));
-#2039=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2040=CARTESIAN_POINT('Origin',(-22.2100164420729,-3.40191698878371,2.));
-#2041=CARTESIAN_POINT('',(-22.2100164420729,-3.40191698878371,2.));
-#2042=CARTESIAN_POINT('',(-17.7992390923392,-4.24258357890083,2.));
-#2043=CARTESIAN_POINT('',(-22.2100164420729,-3.40191698878371,1.5));
-#2044=CARTESIAN_POINT('',(-22.2100164420729,-3.40191698878371,2.));
-#2045=CARTESIAN_POINT('',(-24.8309519047052,-2.9023830736517,1.5));
-#2046=CARTESIAN_POINT('Origin',(-22.9589106148612,-7.3311863251825,2.));
-#2047=CARTESIAN_POINT('',(-20.0714250684889,-10.0992952860962,2.));
-#2048=CARTESIAN_POINT('Origin',(-22.9589106148612,-7.3311863251825,2.));
-#2049=CARTESIAN_POINT('',(-20.0714250684889,-10.0992952860962,1.5));
-#2050=CARTESIAN_POINT('',(-20.0714250684889,-10.0992952860962,2.));
-#2051=CARTESIAN_POINT('Origin',(-22.9589106148612,-7.3311863251825,1.5));
-#2052=CARTESIAN_POINT('Origin',(-21.9178332220052,-12.0253310495955,2.));
-#2053=CARTESIAN_POINT('',(-21.9178332220052,-12.0253310495955,2.));
-#2054=CARTESIAN_POINT('',(-15.1627484945215,-4.9789286895196,2.));
-#2055=CARTESIAN_POINT('',(-21.9178332220052,-12.0253310495955,1.5));
-#2056=CARTESIAN_POINT('',(-21.9178332220052,-12.0253310495955,2.));
-#2057=CARTESIAN_POINT('',(-21.9178332220052,-12.0253310495955,1.5));
-#2058=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2059=CARTESIAN_POINT('',(-20.0530436127984,-14.9290134256489,2.));
-#2060=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2061=CARTESIAN_POINT('',(-20.0530436127984,-14.9290134256489,1.5));
-#2062=CARTESIAN_POINT('',(-20.0530436127984,-14.9290134256489,2.));
-#2063=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2064=CARTESIAN_POINT('Origin',(-17.5334799629134,-14.051154754889,2.));
-#2065=CARTESIAN_POINT('',(-17.5334799629134,-14.051154754889,2.));
-#2066=CARTESIAN_POINT('',(-11.8688502033796,-12.0775017569669,2.));
-#2067=CARTESIAN_POINT('',(-17.5334799629134,-14.051154754889,1.5));
-#2068=CARTESIAN_POINT('',(-17.5334799629134,-14.051154754889,2.));
-#2069=CARTESIAN_POINT('',(-20.0530436127984,-14.9290134256489,1.5));
-#2070=CARTESIAN_POINT('Origin',(-16.2174066730947,-17.8284489049157,2.));
-#2071=CARTESIAN_POINT('',(-12.332716356419,-18.7819588123242,2.));
-#2072=CARTESIAN_POINT('Origin',(-16.2174066730947,-17.8284489049157,2.));
-#2073=CARTESIAN_POINT('',(-12.332716356419,-18.7819588123242,1.5));
-#2074=CARTESIAN_POINT('',(-12.332716356419,-18.7819588123242,2.));
-#2075=CARTESIAN_POINT('Origin',(-16.2174066730947,-17.8284489049157,1.5));
-#2076=CARTESIAN_POINT('Origin',(-12.9687348413693,-21.3731587888701,2.));
-#2077=CARTESIAN_POINT('',(-12.9687348413693,-21.3731587888701,2.));
-#2078=CARTESIAN_POINT('',(-9.87329006348256,-8.76202149388051,2.));
-#2079=CARTESIAN_POINT('',(-12.9687348413693,-21.3731587888701,1.5));
-#2080=CARTESIAN_POINT('',(-12.9687348413693,-21.3731587888701,2.));
-#2081=CARTESIAN_POINT('',(-12.9687348413693,-21.3731587888701,1.5));
-#2082=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2083=CARTESIAN_POINT('',(-9.90193847905625,-22.9554266864501,2.));
-#2084=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2085=CARTESIAN_POINT('',(-9.90193847905625,-22.9554266864501,1.5));
-#2086=CARTESIAN_POINT('',(-9.90193847905625,-22.9554266864501,2.));
-#2087=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2088=CARTESIAN_POINT('Origin',(-8.1588616871839,-20.9353969516971,2.));
-#2089=CARTESIAN_POINT('',(-8.1588616871839,-20.9353969516971,2.));
-#2090=CARTESIAN_POINT('',(-2.45075653499791,-14.3203458017548,2.));
-#2091=CARTESIAN_POINT('',(-8.1588616871839,-20.9353969516971,1.5));
-#2092=CARTESIAN_POINT('',(-8.1588616871839,-20.9353969516971,2.));
-#2093=CARTESIAN_POINT('',(-9.90193847905625,-22.9554266864501,1.5));
-#2094=CARTESIAN_POINT('Origin',(-5.13046170994547,-23.5485929982772,2.));
-#2095=CARTESIAN_POINT('',(-1.28946625616466,-22.4320116425153,2.));
-#2096=CARTESIAN_POINT('Origin',(-5.13046170994547,-23.5485929982772,2.));
-#2097=CARTESIAN_POINT('',(-1.28946625616466,-22.4320116425153,1.5));
-#2098=CARTESIAN_POINT('',(-1.28946625616466,-22.4320116425153,2.));
-#2099=CARTESIAN_POINT('Origin',(-5.13046170994547,-23.5485929982772,1.5));
-#2100=CARTESIAN_POINT('Origin',(-0.544674433135164,-24.9940658909648,2.));
-#2101=CARTESIAN_POINT('',(-0.544674433135164,-24.9940658909648,2.));
-#2102=CARTESIAN_POINT('',(-4.99014606485957,-9.70182028857166,2.));
-#2103=CARTESIAN_POINT('',(-0.544674433135164,-24.9940658909648,1.5));
-#2104=CARTESIAN_POINT('',(-0.544674433135164,-24.9940658909648,2.));
-#2105=CARTESIAN_POINT('',(-0.544674433135164,-24.9940658909648,1.5));
-#2106=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2107=CARTESIAN_POINT('',(2.9023830736517,-24.8309519047052,2.));
-#2108=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2109=CARTESIAN_POINT('',(2.9023830736517,-24.8309519047052,1.5));
-#2110=CARTESIAN_POINT('',(2.9023830736517,-24.8309519047052,2.));
-#2111=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2112=CARTESIAN_POINT('Origin',(3.40191698878371,-22.2100164420729,2.));
-#2113=CARTESIAN_POINT('',(3.40191698878371,-22.2100164420729,2.));
-#2114=CARTESIAN_POINT('',(5.64346243507385,-10.4491614263907,2.));
-#2115=CARTESIAN_POINT('',(3.40191698878371,-22.2100164420729,1.5));
-#2116=CARTESIAN_POINT('',(3.40191698878371,-22.2100164420729,2.));
-#2117=CARTESIAN_POINT('',(2.9023830736517,-24.8309519047052,1.5));
-#2118=CARTESIAN_POINT('Origin',(7.33118632518249,-22.9589106148612,2.));
-#2119=CARTESIAN_POINT('',(10.0992952860962,-20.0714250684888,2.));
-#2120=CARTESIAN_POINT('Origin',(7.33118632518249,-22.9589106148612,2.));
-#2121=CARTESIAN_POINT('',(10.0992952860962,-20.0714250684888,1.5));
-#2122=CARTESIAN_POINT('',(10.0992952860962,-20.0714250684888,2.));
-#2123=CARTESIAN_POINT('Origin',(7.33118632518249,-22.9589106148612,1.5));
-#2124=CARTESIAN_POINT('Origin',(10.2859748343917,-20.2503867713812,2.));
-#2125=CARTESIAN_POINT('',(10.2859748343917,-20.2503867713812,2.));
-#2126=CARTESIAN_POINT('',(-1.68862919637172,-8.77084576983617,2.));
-#2127=CARTESIAN_POINT('',(10.2859748343917,-20.2503867713812,1.5));
-#2128=CARTESIAN_POINT('',(10.2859748343917,-20.2503867713812,0.));
-#2129=CARTESIAN_POINT('',(12.0253310495955,-21.9178332220052,1.5));
-#2130=CARTESIAN_POINT('Origin',(-7.33118632518249,22.9589106148612,2.));
-#2131=CARTESIAN_POINT('',(-10.0992952860962,20.0714250684888,2.));
-#2132=CARTESIAN_POINT('',(-7.97814922650179,19.0115774639457,2.));
-#2133=CARTESIAN_POINT('Origin',(-7.33118632518249,22.9589106148612,2.));
-#2134=CARTESIAN_POINT('',(-10.0992952860962,20.0714250684888,1.5));
-#2135=CARTESIAN_POINT('',(-10.0992952860962,20.0714250684888,2.));
-#2136=CARTESIAN_POINT('',(-7.97814922650179,19.0115774639457,1.5));
-#2137=CARTESIAN_POINT('Origin',(-7.33118632518249,22.9589106148612,1.5));
-#2138=CARTESIAN_POINT('',(-7.97814922650178,19.0115774639457,2.));
-#2139=CARTESIAN_POINT('Origin',(-12.0253310495955,21.9178332220052,2.));
-#2140=CARTESIAN_POINT('',(-12.0253310495955,21.9178332220052,2.));
-#2141=CARTESIAN_POINT('',(-7.65407783665205,17.7272996263052,2.));
-#2142=CARTESIAN_POINT('',(-12.0253310495955,21.9178332220052,1.5));
-#2143=CARTESIAN_POINT('',(-12.0253310495955,21.9178332220052,2.));
-#2144=CARTESIAN_POINT('',(-12.0253310495955,21.9178332220052,1.5));
-#2145=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2146=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2147=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2148=CARTESIAN_POINT('Origin',(-7.35701258280416,-1.54108338899739,1.5));
-#2149=CARTESIAN_POINT('',(4.4732013766281,-17.435322464587,1.5));
-#2150=CARTESIAN_POINT('Origin',(5.71575731458035,-22.278467593639,1.5));
-#2151=CARTESIAN_POINT('',(-14.174896571299,11.0937958874758,1.5));
-#2152=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2153=CARTESIAN_POINT('',(-15.9461699193399,8.83058347914914,1.5));
-#2154=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,2.));
-#2155=CARTESIAN_POINT('',(-0.950880198493982,44.549525052717,2.));
-#2156=CARTESIAN_POINT('',(-3.22910535168046,43.4408183674494,2.));
-#2157=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,2.));
-#2158=CARTESIAN_POINT('',(-0.950880198493982,44.549525052717,1.5));
-#2159=CARTESIAN_POINT('',(-0.950880198493982,44.549525052717,2.));
-#2160=CARTESIAN_POINT('',(-3.22910535168046,43.4408183674494,1.5));
-#2161=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,1.5));
-#2162=CARTESIAN_POINT('',(-3.22910535168046,43.4408183674494,2.));
-#2163=CARTESIAN_POINT('Origin',(-1.2191108046577,49.117529789882,2.));
-#2164=CARTESIAN_POINT('',(-1.21911080465768,49.117529789882,2.));
-#2165=CARTESIAN_POINT('',(0.0541105100859285,27.434392729607,2.));
-#2166=CARTESIAN_POINT('',(-1.21911080465768,49.117529789882,1.5));
-#2167=CARTESIAN_POINT('',(-1.21911080465768,49.117529789882,2.));
-#2168=CARTESIAN_POINT('',(-0.950880198493949,44.5495250527163,1.5));
-#2169=CARTESIAN_POINT('Origin',(2.77401103554371,49.352003603573,2.));
-#2170=CARTESIAN_POINT('',(5.01693764394349,52.6639939763446,2.));
-#2171=CARTESIAN_POINT('Origin',(2.77401103554371,49.352003603573,2.));
-#2172=CARTESIAN_POINT('',(5.01693764394349,52.6639939763446,1.5));
-#2173=CARTESIAN_POINT('',(5.01693764394349,52.6639939763446,2.));
-#2174=CARTESIAN_POINT('Origin',(2.77401103554371,49.352003603573,1.5));
-#2175=CARTESIAN_POINT('Origin',(8.7919978443837,50.1074699473232,2.));
-#2176=CARTESIAN_POINT('',(8.7919978443837,50.1074699473232,2.));
-#2177=CARTESIAN_POINT('',(12.3188819310229,47.7190142840163,2.));
-#2178=CARTESIAN_POINT('',(8.7919978443837,50.1074699473232,1.5));
-#2179=CARTESIAN_POINT('',(8.7919978443837,50.1074699473232,2.));
-#2180=CARTESIAN_POINT('',(8.7919978443837,50.1074699473232,1.5));
-#2181=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,2.));
-#2182=CARTESIAN_POINT('',(10.9510941933914,51.5349806804144,2.));
-#2183=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,2.));
-#2184=CARTESIAN_POINT('',(10.9510941933914,51.5349806804144,1.5));
-#2185=CARTESIAN_POINT('',(10.9510941933914,51.5349806804144,2.));
-#2186=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,1.5));
-#2187=CARTESIAN_POINT('Origin',(10.0666940435695,55.9720974418537,2.));
-#2188=CARTESIAN_POINT('',(10.0666940435695,55.9720974418537,2.));
-#2189=CARTESIAN_POINT('',(14.5410446496112,33.5238695954191,2.));
-#2190=CARTESIAN_POINT('',(10.0666940435695,55.9720974418537,1.5));
-#2191=CARTESIAN_POINT('',(10.0666940435695,55.9720974418537,2.));
-#2192=CARTESIAN_POINT('',(10.9510941933914,51.5349806804144,1.5));
-#2193=CARTESIAN_POINT('Origin',(13.9895299044293,56.7539918137174,2.));
-#2194=CARTESIAN_POINT('',(10.7052217246014,59.0372613510071,2.));
-#2195=CARTESIAN_POINT('Origin',(13.9895299044293,56.7539918137174,2.));
-#2196=CARTESIAN_POINT('',(10.7052217246014,59.0372613510071,1.5));
-#2197=CARTESIAN_POINT('',(10.7052217246014,59.0372613510071,2.));
-#2198=CARTESIAN_POINT('Origin',(13.9895299044293,56.7539918137174,1.5));
-#2199=CARTESIAN_POINT('Origin',(-39.0346976657583,37.9936082294472,2.));
-#2200=CARTESIAN_POINT('',(-39.0346976657584,37.9936082294472,2.));
-#2201=CARTESIAN_POINT('',(-39.385663262776,36.9809562334677,2.));
-#2202=CARTESIAN_POINT('',(-42.660888514939,27.5308465444597,2.));
-#2203=CARTESIAN_POINT('',(-39.0346976657584,37.9936082294472,1.5));
-#2204=CARTESIAN_POINT('',(-39.0346976657584,37.9936082294472,2.));
-#2205=CARTESIAN_POINT('',(-39.385663262776,36.9809562334677,1.5));
-#2206=CARTESIAN_POINT('',(-40.4575384428235,33.8882413071632,1.5));
-#2207=CARTESIAN_POINT('',(-39.385663262776,36.9809562334677,1.));
-#2208=CARTESIAN_POINT('Origin',(-35.255252285722,36.6837255555705,2.));
-#2209=CARTESIAN_POINT('',(-31.9061184222857,38.8708017693282,2.));
-#2210=CARTESIAN_POINT('Origin',(-35.255252285722,36.6837255555705,2.));
-#2211=CARTESIAN_POINT('',(-31.9061184222857,38.8708017693282,1.5));
-#2212=CARTESIAN_POINT('',(-31.9061184222857,38.8708017693282,2.));
-#2213=CARTESIAN_POINT('Origin',(-35.255252285722,36.6837255555705,1.5));
-#2214=CARTESIAN_POINT('Origin',(-29.4205806165643,35.0646249284712,2.));
-#2215=CARTESIAN_POINT('',(-29.4205806165642,35.0646249284712,2.));
-#2216=CARTESIAN_POINT('',(-19.8550575052958,20.4166592234297,2.));
-#2217=CARTESIAN_POINT('',(-29.4205806165642,35.0646249284712,1.5));
-#2218=CARTESIAN_POINT('',(-29.4205806165642,35.0646249284712,2.));
-#2219=CARTESIAN_POINT('',(-29.4205806165643,35.0646249284712,1.5));
-#2220=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,2.));
-#2221=CARTESIAN_POINT('',(-26.8851786745754,35.553552849962,2.));
-#2222=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,2.));
-#2223=CARTESIAN_POINT('',(-26.8851786745754,35.553552849962,1.5));
-#2224=CARTESIAN_POINT('',(-26.8851786745754,35.553552849962,2.));
-#2225=CARTESIAN_POINT('Origin',(-48.0333139453287,138.40177293456,1.5));
-#2226=CARTESIAN_POINT('Origin',(-25.9815096471525,40.0229909121283,2.));
-#2227=CARTESIAN_POINT('',(-25.9815096471525,40.0229909121283,2.));
-#2228=CARTESIAN_POINT('',(-29.0980433484906,24.6089909585081,2.));
-#2229=CARTESIAN_POINT('',(-25.9815096471525,40.0229909121283,1.5));
-#2230=CARTESIAN_POINT('',(-25.9815096471525,40.0229909121283,2.));
-#2231=CARTESIAN_POINT('',(-26.8851786745754,35.553552849962,1.5));
-#2232=CARTESIAN_POINT('Origin',(-22.0608457016805,39.2302777063122,2.));
-#2233=CARTESIAN_POINT('',(-19.0093446223877,41.8164604460031,2.));
-#2234=CARTESIAN_POINT('Origin',(-22.0608457016805,39.2302777063122,2.));
-#2235=CARTESIAN_POINT('',(-19.0093446223877,41.8164604460031,1.5));
-#2236=CARTESIAN_POINT('',(-19.0093446223877,41.8164604460031,2.));
-#2237=CARTESIAN_POINT('Origin',(-22.0608457016805,39.2302777063122,1.5));
-#2238=CARTESIAN_POINT('Origin',(-16.0162600088612,38.284845766028,2.));
-#2239=CARTESIAN_POINT('',(-16.0162600088612,38.284845766028,2.));
-#2240=CARTESIAN_POINT('',(-6.85674049050055,27.4773017873606,2.));
-#2241=CARTESIAN_POINT('',(-16.0162600088612,38.284845766028,1.5));
-#2242=CARTESIAN_POINT('',(-16.0162600088612,38.284845766028,2.));
-#2243=CARTESIAN_POINT('',(-16.0162600088612,38.284845766028,1.5));
-#2244=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2245=CARTESIAN_POINT('',(-29.3007626358736,29.3890338214136,2.));
-#2246=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2247=CARTESIAN_POINT('',(-29.3007626358736,29.3890338214136,1.5));
-#2248=CARTESIAN_POINT('',(-29.3007626358736,29.3890338214136,2.));
-#2249=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2250=CARTESIAN_POINT('Origin',(-28.981378588664,28.2900988881363,2.));
-#2251=CARTESIAN_POINT('',(-28.981378588664,28.2900988881363,2.));
-#2252=CARTESIAN_POINT('',(-25.1784869314222,15.205129472402,2.));
-#2253=CARTESIAN_POINT('',(-28.981378588664,28.2900988881363,1.5));
-#2254=CARTESIAN_POINT('',(-28.981378588664,28.2900988881363,2.));
-#2255=CARTESIAN_POINT('',(-29.3007626358736,29.3890338214136,1.5));
-#2256=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2257=CARTESIAN_POINT('',(8.18536389166205,39.6642133157973,2.));
-#2258=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2259=CARTESIAN_POINT('',(8.18536389166205,39.6642133157973,1.5));
-#2260=CARTESIAN_POINT('',(8.18536389166206,39.6642133157973,2.));
-#2261=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2262=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2263=CARTESIAN_POINT('',(-13.6067066807587,39.2059629814624,2.));
-#2264=CARTESIAN_POINT('',(8.87134341637972,40.5407112171044,2.));
-#2265=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2266=CARTESIAN_POINT('',(-13.6067066807587,39.2059629814624,1.5));
-#2267=CARTESIAN_POINT('',(-13.6067066807587,39.2059629814624,2.));
-#2268=CARTESIAN_POINT('',(8.87134341637972,40.5407112171044,1.5));
-#2269=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2270=CARTESIAN_POINT('',(8.87134341637972,40.5407112171044,2.));
-#2271=CARTESIAN_POINT('Origin',(-13.3027717004992,43.7445294740314,2.));
-#2272=CARTESIAN_POINT('',(-13.3027717004992,43.7445294740314,2.));
-#2273=CARTESIAN_POINT('',(-14.5901868917746,24.5199589946498,2.));
-#2274=CARTESIAN_POINT('',(-13.3027717004992,43.7445294740314,1.5));
-#2275=CARTESIAN_POINT('',(-13.3027717004992,43.7445294740314,2.));
-#2276=CARTESIAN_POINT('',(-13.6067066807587,39.2059629814624,1.5));
-#2277=CARTESIAN_POINT('Origin',(-9.3117108505818,43.4772594004036,2.));
-#2278=CARTESIAN_POINT('',(-6.66330013947696,46.4749119328539,2.));
-#2279=CARTESIAN_POINT('Origin',(-9.3117108505818,43.4772594004036,2.));
-#2280=CARTESIAN_POINT('',(-6.66330013947696,46.4749119328539,1.5));
-#2281=CARTESIAN_POINT('',(-6.66330013947696,46.4749119328539,2.));
-#2282=CARTESIAN_POINT('Origin',(-9.3117108505818,43.4772594004036,1.5));
-#2283=CARTESIAN_POINT('Origin',(-3.22910535168046,43.4408183674493,2.));
-#2284=CARTESIAN_POINT('',(3.99465239732688,37.0586652693814,2.));
-#2285=CARTESIAN_POINT('',(-3.22910535167948,43.4408183674485,1.5));
-#2286=CARTESIAN_POINT('Origin',(-14.8306447450808,44.1450494440681,1.5));
-#2287=CARTESIAN_POINT('',(-38.8498731093305,45.7240348109057,1.5));
-#2288=CARTESIAN_POINT('Origin',(0.,0.,1.5));
-#2289=CARTESIAN_POINT('',(-40.4137187247286,40.518284006588,1.5));
-#2290=CARTESIAN_POINT('Origin',(-35.612383683553,41.9136985766636,1.5));
-#2291=CARTESIAN_POINT('',(-39.9033966891206,38.7623706569689,1.5));
-#2292=CARTESIAN_POINT('',(-6.27872703066051,21.1829833651679,1.5));
-#2293=CARTESIAN_POINT('Origin',(-40.4137187247286,40.518284006588,0.));
-#2294=CARTESIAN_POINT('',(-40.4137187247286,40.518284006588,0.));
-#2295=CARTESIAN_POINT('',(-40.4137187247286,40.518284006588,0.));
-#2296=CARTESIAN_POINT('',(-26.4073427264658,-7.67478013541579,0.));
-#2297=CARTESIAN_POINT('',(-26.4073427264658,-7.67478013541579,0.));
-#2298=CARTESIAN_POINT('',(-26.4073427264658,-7.67478013541579,2.));
-#2299=CARTESIAN_POINT('',(-26.4073427264658,-7.67478013541579,0.));
-#2300=CARTESIAN_POINT('',(-26.4073427264658,-7.67478013541579,2.));
-#2301=CARTESIAN_POINT('Origin',(-35.612383683553,41.9136985766636,0.));
-#2302=CARTESIAN_POINT('',(-38.8498731093305,45.7240348109057,0.));
-#2303=CARTESIAN_POINT('',(-38.8498731093305,45.7240348109057,0.));
-#2304=CARTESIAN_POINT('Origin',(-35.612383683553,41.9136985766636,0.));
-#2305=CARTESIAN_POINT('Origin',(0.,0.,0.));
-#2306=CARTESIAN_POINT('',(13.8317117427598,58.3839340081259,2.));
-#2307=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2308=CARTESIAN_POINT('',(13.8317117427598,58.3839340081259,0.));
-#2309=CARTESIAN_POINT('',(13.8317117427598,58.3839340081259,0.));
-#2310=CARTESIAN_POINT('Origin',(0.,0.,0.));
-#2311=CARTESIAN_POINT('Origin',(-11.4666572930116,4.99999999999999,2.));
-#2312=CARTESIAN_POINT('',(16.6165403673351,50.4369962053721,2.));
-#2313=CARTESIAN_POINT('',(-14.174896571299,11.0937958874758,2.));
-#2314=CARTESIAN_POINT('Origin',(12.6790690975298,53.5186061741154,2.));
-#2315=CARTESIAN_POINT('Origin',(-11.4666572930116,4.99999999999999,2.));
-#2316=CARTESIAN_POINT('',(-14.174896571299,11.0937958874758,2.));
-#2317=CARTESIAN_POINT('',(-23.6980846512456,13.951730497053,2.));
-#2318=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2319=CARTESIAN_POINT('',(-22.4054618520868,13.1907270153955,2.));
-#2320=CARTESIAN_POINT('',(-16.5533505618956,9.74542412442046,2.));
-#2321=CARTESIAN_POINT('',(10.7157573145803,-23.6890807161236,2.));
-#2322=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2323=CARTESIAN_POINT('',(10.7157573145803,-22.278467593639,2.));
-#2324=CARTESIAN_POINT('',(10.7157573145803,-22.278467593639,2.));
-#2325=CARTESIAN_POINT('Origin',(5.71575731458035,-22.278467593639,2.));
-#2326=CARTESIAN_POINT('',(-25.610159349703,20.6664016417525,2.));
-#2327=CARTESIAN_POINT('Origin',(-21.610159349703,20.6664016417525,2.));
-#2328=CARTESIAN_POINT('Origin',(-22.4054618520868,13.1907270153955,2.));
-#2329=CARTESIAN_POINT('',(-23.6980846512456,13.951730497053,5.5));
-#2330=CARTESIAN_POINT('',(-23.6980846512456,13.951730497053,2.));
-#2331=CARTESIAN_POINT('',(-22.4054618520868,13.1907270153955,5.5));
-#2332=CARTESIAN_POINT('',(-23.6980846512456,13.951730497053,5.5));
-#2333=CARTESIAN_POINT('',(-22.4054618520868,13.1907270153955,2.));
-#2334=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2335=CARTESIAN_POINT('',(10.7157573145803,-23.6890807161236,5.5));
-#2336=CARTESIAN_POINT('Origin',(0.,0.,5.5));
-#2337=CARTESIAN_POINT('',(10.7157573145803,-23.6890807161236,2.));
-#2338=CARTESIAN_POINT('Origin',(-8.39212134270983,-6.77413475147353,5.5));
-#2339=CARTESIAN_POINT('',(10.7157573145803,-25.3263211930793,5.5));
-#2340=CARTESIAN_POINT('Origin',(0.,0.,5.5));
-#2341=CARTESIAN_POINT('',(10.7157573145803,-25.3263211930793,5.5));
-#2342=CARTESIAN_POINT('Origin',(-11.4666572930116,4.99999999999999,2.));
-#2343=CARTESIAN_POINT('',(10.7157573145803,-25.3263211930793,2.));
-#2344=CARTESIAN_POINT('',(-17.1635899645859,-21.4863021371191,2.));
-#2345=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2346=CARTESIAN_POINT('',(-15.2842426854197,-25.3929025256862,2.));
-#2347=CARTESIAN_POINT('Origin',(-20.2842426854197,-25.3929025256862,2.));
-#2348=CARTESIAN_POINT('',(-15.2842426854197,-43.8090670111496,2.));
-#2349=CARTESIAN_POINT('',(-15.2842426854197,-25.3929025256862,2.));
-#2350=CARTESIAN_POINT('',(-11.4269363171329,-48.6767411234995,2.));
-#2351=CARTESIAN_POINT('Origin',(-10.2842426854197,-43.8090670111496,2.));
-#2352=CARTESIAN_POINT('',(6.35084146064483,-49.5950281050606,2.));
-#2353=CARTESIAN_POINT('Origin',(0.,0.,2.));
-#2354=CARTESIAN_POINT('',(10.7157573145803,-44.6355252945546,2.));
-#2355=CARTESIAN_POINT('Origin',(5.71575731458035,-44.6355252945546,2.));
-#2356=CARTESIAN_POINT('',(10.7157573145803,-22.278467593639,2.));
-#2357=CARTESIAN_POINT('Origin',(-21.610159349703,20.6664016417525,0.));
-#2358=CARTESIAN_POINT('',(-25.610159349703,20.6664016417525,0.));
-#2359=CARTESIAN_POINT('',(-25.610159349703,20.6664016417525,0.));
-#2360=CARTESIAN_POINT('Origin',(-21.610159349703,20.6664016417525,0.));
-#2361=CARTESIAN_POINT('Origin',(-15.2842426854197,-25.3929025256862,0.));
-#2362=CARTESIAN_POINT('',(-15.2842426854197,-25.3929025256862,0.));
-#2363=CARTESIAN_POINT('',(-15.2842426854197,-43.8090670111496,0.));
-#2364=CARTESIAN_POINT('',(-15.2842426854197,-25.3929025256862,0.));
-#2365=CARTESIAN_POINT('',(-15.2842426854197,-43.8090670111496,0.));
-#2366=CARTESIAN_POINT('',(-15.2842426854197,-25.3929025256862,0.));
-#2367=CARTESIAN_POINT('Origin',(-20.2842426854197,-25.3929025256862,0.));
-#2368=CARTESIAN_POINT('',(-17.1635899645859,-21.4863021371191,0.));
-#2369=CARTESIAN_POINT('Origin',(-20.2842426854197,-25.3929025256862,0.));
-#2370=CARTESIAN_POINT('',(-17.1635899645859,-21.4863021371191,0.));
-#2371=CARTESIAN_POINT('Origin',(0.,0.,0.));
-#2372=CARTESIAN_POINT('Origin',(0.,0.,0.));
-#2373=CARTESIAN_POINT('',(10.7157573145803,-25.3263211930793,2.));
-#2374=CARTESIAN_POINT('Origin',(12.6790690975298,53.5186061741154,0.));
-#2375=CARTESIAN_POINT('',(16.6165403673351,50.4369962053721,0.));
-#2376=CARTESIAN_POINT('Origin',(12.6790690975298,53.5186061741154,0.));
-#2377=CARTESIAN_POINT('',(16.6165403673351,50.4369962053721,0.));
-#2378=CARTESIAN_POINT('Origin',(-14.174896571299,11.0937958874758,0.));
-#2379=CARTESIAN_POINT('',(-14.174896571299,11.0937958874758,0.));
-#2380=CARTESIAN_POINT('',(-14.174896571299,11.0937958874758,0.));
-#2381=CARTESIAN_POINT('',(-14.174896571299,11.0937958874758,0.));
-#2382=CARTESIAN_POINT('Origin',(0.,0.,0.));
-#2383=CARTESIAN_POINT('',(4.4732013766281,-17.435322464587,0.));
-#2384=CARTESIAN_POINT('',(4.4732013766281,-17.435322464587,0.));
-#2385=CARTESIAN_POINT('Origin',(0.,0.,0.));
-#2386=CARTESIAN_POINT('Origin',(5.71575731458035,-22.278467593639,0.));
-#2387=CARTESIAN_POINT('',(10.7157573145803,-22.278467593639,0.));
-#2388=CARTESIAN_POINT('',(10.7157573145803,-22.278467593639,0.));
-#2389=CARTESIAN_POINT('Origin',(5.71575731458035,-22.278467593639,0.));
-#2390=CARTESIAN_POINT('Origin',(10.7157573145803,-44.6355252945546,0.));
-#2391=CARTESIAN_POINT('',(10.7157573145803,-44.6355252945546,0.));
-#2392=CARTESIAN_POINT('',(10.7157573145803,-22.278467593639,0.));
-#2393=CARTESIAN_POINT('',(10.7157573145803,-44.6355252945546,0.));
-#2394=CARTESIAN_POINT('Origin',(5.71575731458035,-44.6355252945546,0.));
-#2395=CARTESIAN_POINT('',(6.35084146064483,-49.5950281050606,0.));
-#2396=CARTESIAN_POINT('Origin',(5.71575731458035,-44.6355252945546,0.));
-#2397=CARTESIAN_POINT('',(6.35084146064483,-49.5950281050606,0.));
-#2398=CARTESIAN_POINT('Origin',(0.,0.,0.));
-#2399=CARTESIAN_POINT('',(-11.4269363171329,-48.6767411234995,0.));
-#2400=CARTESIAN_POINT('Origin',(0.,0.,0.));
-#2401=CARTESIAN_POINT('',(-11.4269363171329,-48.6767411234995,0.));
-#2402=CARTESIAN_POINT('Origin',(-10.2842426854197,-43.8090670111496,0.));
-#2403=CARTESIAN_POINT('Origin',(-10.2842426854197,-43.8090670111496,0.));
-#2404=CARTESIAN_POINT('Origin',(-11.4666572930116,4.99999999999999,0.));
-#2405=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#2411,
-'DISTANCE_ACCURACY_VALUE',
-'Maximum model space distance between geometric entities at asserted c
-onnectivities');
-#2406=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#2411,
-'DISTANCE_ACCURACY_VALUE',
-'Maximum model space distance between geometric entities at asserted c
-onnectivities');
-#2407=(
-GEOMETRIC_REPRESENTATION_CONTEXT(3)
-GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2405))
-GLOBAL_UNIT_ASSIGNED_CONTEXT((#2411,#2410,#2409))
-REPRESENTATION_CONTEXT('','3D')
-);
-#2408=(
-GEOMETRIC_REPRESENTATION_CONTEXT(3)
-GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2406))
-GLOBAL_UNIT_ASSIGNED_CONTEXT((#2411,#2410,#2409))
-REPRESENTATION_CONTEXT('','3D')
-);
-#2409=(
-NAMED_UNIT(*)
-SI_UNIT($,.STERADIAN.)
-SOLID_ANGLE_UNIT()
-);
-#2410=(
-NAMED_UNIT(*)
-PLANE_ANGLE_UNIT()
-SI_UNIT($,.RADIAN.)
-);
-#2411=(
-LENGTH_UNIT()
-NAMED_UNIT(*)
-SI_UNIT(.MILLI.,.METRE.)
-);
-#2412=(
-LENGTH_UNIT()
-NAMED_UNIT(*)
-SI_UNIT($,.METRE.)
-);
-#2413=SHAPE_DEFINITION_REPRESENTATION(#2414,#2415);
-#2414=PRODUCT_DEFINITION_SHAPE('',$,#2417);
-#2415=SHAPE_REPRESENTATION('',(#1413),#2407);
-#2416=PRODUCT_DEFINITION_CONTEXT('part definition',#2421,'design');
-#2417=PRODUCT_DEFINITION('SRAM ADJUSTMENT TOOL',
-'SRAM ADJUSTMENT TOOL v3',#2418,#2416);
-#2418=PRODUCT_DEFINITION_FORMATION('',$,#2423);
-#2419=PRODUCT_RELATED_PRODUCT_CATEGORY('SRAM ADJUSTMENT TOOL v3',
-'SRAM ADJUSTMENT TOOL v3',(#2423));
-#2420=APPLICATION_PROTOCOL_DEFINITION('international standard',
-'automotive_design',2009,#2421);
-#2421=APPLICATION_CONTEXT(
-'Core Data for Automotive Mechanical Design Process');
-#2422=PRODUCT_CONTEXT('part definition',#2421,'mechanical');
-#2423=PRODUCT('SRAM ADJUSTMENT TOOL','SRAM ADJUSTMENT TOOL v3',$,(#2422));
-#2424=PRESENTATION_STYLE_ASSIGNMENT((#2425));
-#2425=SURFACE_STYLE_USAGE(.BOTH.,#2426);
-#2426=SURFACE_SIDE_STYLE('',(#2427));
-#2427=SURFACE_STYLE_FILL_AREA(#2428);
-#2428=FILL_AREA_STYLE('Steel - Satin',(#2429));
-#2429=FILL_AREA_STYLE_COLOUR('Steel - Satin',#2430);
-#2430=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157);
-ENDSEC;
-END-ISO-10303-21;

+ 0 - 227
2d3d/Steckrohr.svg

@@ -1,227 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="Steckrohr.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 297 210"
-   height="210mm"
-   width="297mm">
-  <defs
-     id="defs2" />
-  <sodipodi:namedview
-     inkscape:window-maximized="1"
-     inkscape:window-y="-9"
-     inkscape:window-x="-9"
-     inkscape:window-height="1001"
-     inkscape:window-width="1920"
-     inkscape:bbox-nodes="true"
-     inkscape:snap-bbox="true"
-     inkscape:snap-nodes="false"
-     inkscape:object-nodes="false"
-     showgrid="false"
-     inkscape:document-rotation="0"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="mm"
-     inkscape:cy="118.33707"
-     inkscape:cx="392.05089"
-     inkscape:zoom="2.5743179"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base" />
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Ebene 1">
-    <rect
-       y="11.273408"
-       x="53.220974"
-       height="5"
-       width="100"
-       id="rect10"
-       style="opacity:0.65;fill:#ffff00;stroke-width:5.04805;stop-color:#000000" />
-    <rect
-       style="opacity:0.65;fill:#00ff00;stroke-width:2.49473;stop-color:#000000"
-       id="rect14"
-       width="20.999996"
-       height="5.8150444"
-       x="54.239281"
-       y="22.688744" />
-    <rect
-       y="22.688744"
-       x="75.239281"
-       height="5.8150444"
-       width="20.999996"
-       id="rect16"
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.49473;stop-color:#000000" />
-    <rect
-       y="22.688744"
-       x="96.239288"
-       height="5.8150444"
-       width="20.999996"
-       id="rect18"
-       style="opacity:0.65;fill:#00ff00;stroke-width:2.49473;stop-color:#000000" />
-    <rect
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.10476;stop-color:#000000"
-       id="rect26"
-       width="23.499998"
-       height="3.6988289"
-       x="54.07933"
-       y="43.948967" />
-    <rect
-       style="opacity:0.65;fill:#00ffff;stroke-width:1.52262;stop-color:#000000"
-       id="rect56"
-       width="19.999998"
-       height="2.2744217"
-       x="54.239281"
-       y="20.414322" />
-    <rect
-       style="opacity:0.65;fill:#ffff00;stroke-width:1.52262;stop-color:#000000"
-       id="rect58"
-       width="19.999998"
-       height="2.2744217"
-       x="74.239288"
-       y="20.414322" />
-    <rect
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.49473;stop-color:#000000"
-       id="rect64"
-       width="20.999996"
-       height="5.8150444"
-       x="117.23928"
-       y="22.688744" />
-    <rect
-       style="opacity:0.65;fill:#00ff00;stroke-width:2.17758;stop-color:#000000"
-       id="rect66"
-       width="16.00001"
-       height="5.8150444"
-       x="138.23927"
-       y="22.688744" />
-    <rect
-       y="28.503788"
-       x="70.239288"
-       height="5.8150444"
-       width="21"
-       id="rect68"
-       style="opacity:0.65;fill:#00ff00;stroke-width:2.49473;stop-color:#000000" />
-    <rect
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.49473;stop-color:#000000"
-       id="rect70"
-       width="21"
-       height="5.8150444"
-       x="91.239288"
-       y="28.503788" />
-    <rect
-       style="opacity:0.65;fill:#00ff00;stroke-width:2.49473;stop-color:#000000"
-       id="rect72"
-       width="21"
-       height="5.8150444"
-       x="112.23929"
-       y="28.503788" />
-    <rect
-       y="28.503788"
-       x="133.23929"
-       height="5.8150444"
-       width="21"
-       id="rect74"
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.49474;stop-color:#000000" />
-    <rect
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.17758;stop-color:#000000"
-       id="rect78"
-       width="16.000011"
-       height="5.8150444"
-       x="54.239277"
-       y="28.503788" />
-    <rect
-       y="20.414322"
-       x="94.239273"
-       height="2.2744217"
-       width="19.999998"
-       id="rect80"
-       style="opacity:0.65;fill:#00ffff;stroke-width:1.52262;stop-color:#000000" />
-    <rect
-       y="20.414322"
-       x="114.2393"
-       height="2.2744217"
-       width="19.999998"
-       id="rect82"
-       style="opacity:0.65;fill:#ffff00;stroke-width:1.52262;stop-color:#000000" />
-    <rect
-       y="20.414322"
-       x="134.23929"
-       height="2.2744217"
-       width="19.999998"
-       id="rect84"
-       style="opacity:0.65;fill:#00ffff;stroke-width:1.52262;stop-color:#000000" />
-    <rect
-       y="43.948967"
-       x="101.07933"
-       height="3.6988289"
-       width="23.499998"
-       id="rect88"
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.10476;stop-color:#000000" />
-    <rect
-       style="opacity:0.65;fill:#00ff00;stroke-width:2.10476;stop-color:#000000"
-       id="rect90"
-       width="23.499998"
-       height="3.6988289"
-       x="77.579323"
-       y="43.948967" />
-    <rect
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.10476;stop-color:#000000"
-       id="rect92"
-       width="23.499996"
-       height="3.6988289"
-       x="73.579323"
-       y="47.647797" />
-    <rect
-       y="47.647797"
-       x="54.079327"
-       height="3.6988289"
-       width="19.499996"
-       id="rect94"
-       style="opacity:0.65;fill:#00ff00;stroke-width:1.91728;stop-color:#000000" />
-    <rect
-       style="opacity:0.65;fill:#00ff00;stroke-width:2.10476;stop-color:#000000"
-       id="rect96"
-       width="23.499996"
-       height="3.6988289"
-       x="97.07933"
-       y="47.647797" />
-    <rect
-       y="43.948967"
-       x="124.57933"
-       height="3.6988289"
-       width="19.5"
-       id="rect98"
-       style="opacity:0.65;fill:#00ff00;stroke-width:1.91728;stop-color:#000000" />
-    <rect
-       y="47.647797"
-       x="120.57933"
-       height="3.6988289"
-       width="23.499996"
-       id="rect100"
-       style="opacity:0.65;fill:#ff0000;stroke-width:2.10476;stop-color:#000000" />
-  </g>
-</svg>

+ 0 - 120
2d3d/Tough_Belt_Clip(T212873)/tough_belt_clip.scad

@@ -1,120 +0,0 @@
-// Tough Belt Clip
-// Design by Marius Gheorghescu, December 2013
-
-
-// how many teeth on each side
-teeth = 5;
-
-// width of the belt in mm incl clearance (use 6.25 for typical GT2 belt)
-belt_width = 6.5;
-
-// thickness of the belt in mm (use 1.5 for GT2 belt)
-belt_thickness = 1.5;
-
-// belt pitch in mm (use 2.0 for GT2 belt)
-pitch = 2.0;
-
-// this controls the strength of the bracket 
-shell = 1.5;
-
-/* [Hidden] */
-cutout_width = 6 + belt_thickness + shell;
-len = 2*teeth*pitch + cutout_width;
-round_corner_epsilon = 1;
-epsilon = 0.01;
-
-
-module belt()
-{
-	// reinforcement
-	//cube([len, 2, h], center=true);
-
-	for(i=[pitch/4:pitch:len]) {
-		translate([i-len/2, 1.25, 0])
-			cube([pitch - round_corner_epsilon, belt_thickness + round_corner_epsilon, belt_width], center=true);
-
-	}
-
-}
-
-
-
-module clip() {
-difference()  {
-
-	union() {
-		// general shape of the clip
-		linear_extrude(belt_width + 2*shell, center=true) {
-			polygon(points=[
-				[len/2,0],
-				[3,-2.5], 
-				[-3,-2.5], 
-				[-len/2,0], 
-				[-len/2, shell + belt_thickness], 
-				[len/2, shell + belt_thickness]
-			]);
-		}
-
-
-		
-	}
-
-	// left belt turn
-	rotate([0,0,-45])
-	translate([-3.2/2 - shell - belt_thickness/2,0,0])
-		cube([belt_thickness, 20 + 2*shell, belt_width], center=true);
-
-	// right belt turn
-	rotate([0,0,45])
-//+ belt_thicknes/2 + shell
-	translate([3.2/2 + shell + belt_thickness/2,0,0])
-		cube([belt_thickness, 20 + 2*shell, belt_width], center=true);
-
-	// cutouts
-	translate([len/2 - teeth*pitch, shell + belt_thickness/2, 0])
-		cube([pitch + epsilon, belt_thickness + epsilon, belt_width], center=true);
-
-	translate([-len/2 + teeth*pitch, shell + belt_thickness/2, 0])
-		cube([pitch + epsilon, belt_thickness + epsilon, belt_width], center=true);
-
-
-	// m3 hole
-	rotate([90,0,0])
-		cylinder(d=3.3, h=10 + 2*shell, center=true, $fn=60);
-
-	// hex nut
-	translate([0, -3.8, 0])
-	rotate([90,90,0])
-		cylinder(r=3.35, h=4, center=true, $fn=6);
-
-	// belt teeth
-	for(i=[1:1:teeth]) {
-
-		// left side
-		color([1,0, 0])
-		translate([len/2 + pitch/4 - i*pitch, shell + belt_thickness/2, 0])
-			cube([pitch/2, belt_thickness + epsilon, belt_width], center=true);
-
-		// right side 
-		color([1,0, 0])
-		translate([-len/2 - pitch/4 + i*pitch, shell + belt_thickness/2, 0])
-			cube([pitch/2, belt_thickness + epsilon, belt_width], center=true);
-	}
-
-}
-
-
-}
-
-
-module clip_set()
-{
-	for(i=[0:10:50]) {
-		translate([0,i,0])
-			clip();
-	}
-}
-
-//clip_set();
-clip();
-

+ 0 - 170
2d3d/VESA Kamerahalter.svg

@@ -1,170 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   sodipodi:docname="VESA Kamerahalter.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   id="svg8"
-   version="1.1"
-   viewBox="0 0 210 297"
-   height="297mm"
-   width="210mm">
-  <defs
-     id="defs2" />
-  <sodipodi:namedview
-     inkscape:window-maximized="0"
-     inkscape:window-y="0"
-     inkscape:window-x="866"
-     inkscape:window-height="1003"
-     inkscape:window-width="2144"
-     inkscape:snap-bbox-edge-midpoints="false"
-     inkscape:object-paths="false"
-     inkscape:snap-object-midpoints="false"
-     inkscape:snap-smooth-nodes="false"
-     inkscape:bbox-nodes="true"
-     inkscape:snap-bbox-midpoints="true"
-     inkscape:snap-bbox="false"
-     inkscape:snap-nodes="true"
-     showgrid="false"
-     inkscape:document-rotation="0"
-     inkscape:current-layer="layer2"
-     inkscape:document-units="mm"
-     inkscape:cy="721.41985"
-     inkscape:cx="134.65382"
-     inkscape:zoom="1.2249117"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base" />
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     style="display:none"
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Basis">
-    <g
-       id="g16">
-      <rect
-         style="opacity:0.65;fill:#00ff00;stroke-width:5.43465;stop-color:#000000"
-         id="rect10"
-         width="100"
-         height="100"
-         x="54.42857"
-         y="180.67262" />
-      <rect
-         y="205.67262"
-         x="64.428574"
-         height="50"
-         width="80"
-         id="rect12"
-         style="opacity:0.65;fill:#ff00ff;stroke-width:3.43718;stop-color:#000000" />
-    </g>
-    <circle
-       r="10"
-       cy="180.67262"
-       cx="54.42857"
-       id="path18"
-       style="opacity:0.65;fill:#ffff00;stroke-width:4.6661;stop-color:#000000" />
-    <circle
-       style="opacity:0.65;fill:#ffff00;stroke-width:4.6661;stop-color:#000000"
-       id="circle20"
-       cx="154.42857"
-       cy="180.67262"
-       r="10" />
-    <circle
-       r="10"
-       cy="280.67261"
-       cx="154.42857"
-       id="circle22"
-       style="opacity:0.65;fill:#ffff00;stroke-width:4.6661;stop-color:#000000" />
-    <circle
-       style="opacity:0.65;fill:#ffff00;stroke-width:4.6661;stop-color:#000000"
-       id="circle24"
-       cx="54.42857"
-       cy="280.67261"
-       r="10" />
-    <rect
-       y="170.67262"
-       x="39.42857"
-       height="119.99998"
-       width="15"
-       id="rect26"
-       style="opacity:0.65;fill:#ffff00;stroke-width:15.7023;stop-color:#000000" />
-    <rect
-       style="opacity:0.65;fill:#ffff00;stroke-width:15.7023;stop-color:#000000"
-       id="rect28"
-       width="15"
-       height="119.99998"
-       x="154.42857"
-       y="170.67262" />
-    <rect
-       transform="rotate(90)"
-       y="-169.42857"
-       x="165.67262"
-       height="130"
-       width="15"
-       id="rect30"
-       style="opacity:0.65;fill:#ffff00;stroke-width:12.8209;stop-color:#000000" />
-    <rect
-       style="opacity:0.65;fill:#ffff00;stroke-width:12.8209;stop-color:#000000"
-       id="rect34"
-       width="150"
-       height="50"
-       x="15.672623"
-       y="-129.42857"
-       transform="rotate(90)" />
-    <circle
-       r="3.5"
-       cy="180.67262"
-       cx="54.42857"
-       id="path36"
-       style="opacity:0.65;fill:#000000;stroke-width:4.53409;stop-color:#000000" />
-    <circle
-       style="opacity:0.65;fill:#000000;stroke-width:4.53409;stop-color:#000000"
-       id="circle38"
-       cx="154.42857"
-       cy="180.67262"
-       r="3.5" />
-    <circle
-       r="3.5"
-       cy="280.67261"
-       cx="154.42857"
-       id="circle40"
-       style="opacity:0.65;fill:#000000;stroke-width:4.53409;stop-color:#000000" />
-    <circle
-       style="opacity:0.65;fill:#000000;stroke-width:4.53409;stop-color:#000000"
-       id="circle42"
-       cx="54.42857"
-       cy="280.67261"
-       r="3.5" />
-  </g>
-  <g
-     inkscape:label="Fertig"
-     id="layer2"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:nodetypes="cccccccccccccccccccccccccccccccscscscscsc"
-       transform="scale(0.26458333)"
-       d="M 300.20312,59.234375 V 474.98242 L 149.02148,626.16406 v 56.69336 415.74808 h 56.69336 c 20.87351,-2e-4 37.79478,-16.9215 37.79493,-37.795 8.4e-4,-20.8742 -16.92072,-37.7966 -37.79493,-37.7968 V 720.65234 c 20.87348,-1.9e-4 37.79473,-16.92144 37.79493,-37.79492 h 302.36132 c 2e-4,20.87424 16.92264,37.79581 37.79688,37.79492 v 302.36136 c -20.87498,-9e-4 -37.79772,16.9218 -37.79688,37.7968 1.5e-4,20.8743 16.92261,37.7959 37.79688,37.795 h 56.69141 V 645.0625 626.16406 L 489.17969,474.98242 V 59.234375 Z M 205.71484,669.62891 c 7.30595,-10e-5 13.22861,5.92256 13.22852,13.22851 10e-5,7.30595 -5.92257,13.22862 -13.22852,13.22852 -7.30595,9e-5 -13.22861,-5.92257 -13.22851,-13.22852 -9e-5,-7.30594 5.92257,-13.2286 13.22851,-13.22851 z m 377.95313,0 c 7.30518,9.9e-4 13.22665,5.92333 13.22656,13.22851 10e-5,7.30518 -5.92138,13.22753 -13.22656,13.22852 -7.30595,10e-5 -13.22862,-5.92257 -13.22852,-13.22852 -9e-5,-7.30595 5.92257,-13.22861 13.22852,-13.22851 z M 205.71484,1047.582 c 7.30594,-1e-4 13.22861,5.9226 13.22852,13.2285 1.4e-4,7.306 -5.92254,13.2287 -13.22852,13.2286 -7.30598,10e-5 -13.22865,-5.9226 -13.22851,-13.2286 -9e-5,-7.3059 5.92257,-13.2286 13.22851,-13.2285 z m 377.95313,0 c 7.30518,10e-4 13.22665,5.9233 13.22656,13.2285 1.4e-4,7.3052 -5.92134,13.2276 -13.22656,13.2286 -7.30598,10e-5 -13.22866,-5.9226 -13.22852,-13.2286 -9e-5,-7.3059 5.92258,-13.2286 13.22852,-13.2285 z"
-       style="opacity:0.65;fill:#ffff00;stroke-width:17.6357;stop-color:#000000"
-       id="path18-2" />
-  </g>
-</svg>

+ 0 - 85
2d3d/auslass.scad

@@ -1,85 +0,0 @@
-/* [OpenSCAD] */
-$fn=36;
-
-/* [Konstruktion] */
-Radius = 5;
-Schlitze = 5;
-Mittelteil = 15;
-M3 = 2.5;
-
-/* [Debug] */
-debug=false;
-// Auf Z Achse schneiden
-slice_xy = 320; //[0.5:0.5:50]
-
-// Auf X Achse schneiden
-slice_yz = 260; //[0.5:0.5:30]
-
-// Auf Y Achse schneiden
-slice_xz = 160; //[0.5:0.5:30]
-
-/* [Hidden] */
-
-//build_volume = [ 130, 80, 160];
-build_volume = [ 50, 50, 50];
-
-
-module ei(radius, oben=true, unten=true) {
-  translate([0,0,radius]) {
-    //translate([0,0,-0.1]) 
-    if (unten) intersection() {
-      sphere(radius);
-      translate([0,0,-2*radius]) cube(4*radius, center=true);
-    }
-    if (oben) intersection() {
-      scale([1,1,2]) sphere(radius);
-      translate([0,0,+2*radius]) cube(4*radius, center=true);
-    }
-  }
-}
-
-module kopf() {
-  difference() {
-    ei(Radius);
-    ei(Radius-1.5);
-    translate([0,0,Radius*1.5]) for(i=[0:360/Schlitze:360]) rotate([45,0,i]) translate([Radius,0,0]) scale([0.5,2,1]) cylinder(r=Radius, h=Radius/5, center=true);
-  }
-}
-
-module stoepsel() {
-  translate([0,0,Mittelteil]) kopf();
-  translate([0,0,-2*Radius]) ei(Radius, unten=false);
-  translate([0,0,-Radius/2]) difference() {
-    cylinder(d=Radius-1, h=Mittelteil);
-    cylinder(d=M3, h=Mittelteil);
-  }
-}
-
-module adapter() {
-  translate([0,0,-2*Radius]) {
-    ei(Radius, oben=false);
-    cylinder(r1=Radius, d2=M3, h=Radius*2);
-  }
-  cylinder(d1=M3, d2=M3*3/5, h=Mittelteil);
-}
-
-
-!kopf();
-
-//translate([10,10,0]) 
-stoepsel();
-//translate([-10,-10,0]) 
-adapter();
-
-//
-//// Schnittbild wie im CT/MR:
-//intersection() {
-//
-//
-//  if (debug) {
-//    cube( [ build_volume.x, build_volume.y, slice_xy ], center=true );
-//    cube( [ build_volume.x, slice_xz, build_volume.z ], center=true );
-//    cube( [ slice_yz, build_volume.y, build_volume.z ], center=true );
-//  }
-//}
-//

+ 0 - 31
2d3d/campingbox.scad

@@ -1,31 +0,0 @@
-
-m = 400;
-
-module brett(laenge, breite) {
-  hoehe = 15;
-  cube([laenge, breite, hoehe]);
-}
-
-// Boden
-color("red", 0.8) translate([0,0,0]) brett(3*m, 4*m);
-
-// Seitenteile
-color("green", 0.8) translate([0,m,m]) brett(m, 3*m);
-color("green", 0.8) translate([0,0,m]) rotate([0,90,0]) brett(m, 4*m);
-
-color("green", 0.8) translate([2*m,m,m]) brett(m, 3*m);
-color("green", 0.8) translate([3*m,0,m]) rotate([0,90,0]) brett(m, 4*m);
-
-// Hinten quer
-color("yellow", 0.8) translate([0,m,m]) rotate([0,0,-90]) brett(m, 3*m);
-
-// Kueche
-color("purple", 0.8) translate([2*m,-2.5*m,0]) cube([m,3*m,m]);
-
-// Tischplatte/Bett
-color("orange", 0.8) translate([m,m,2*m]) brett(m+10, 3*m);
-color("orange", 0.8) translate([0,5*m+10,m]) rotate([0,0,-90]) brett(m+10, 3*m);
-
-// Bett/Halter f. Tischplatte
-color("blue", 0.8) translate([m,m,m]) brett(m, 3*m);
-color("blue", 0.8) translate([m,m,0]) rotate([90,0,0]) brett(m, 2*m+50);

+ 0 - 38
2d3d/deflationcap.scad

@@ -1,38 +0,0 @@
-$fn=90;
-use <threads.scad>;
-include <sum.scad>;
-
-Debug=false;
-Schnitt=false;
-
-/* [Hidden] */
-
-Inch=25.4;
-Delta=0.01;
-
-intersection() {
-  L=[0.5,1.5,2.5,4,1];
-  union() {
-    difference() {
-      // aussen
-      union() {
-        cylinder(d1=10, d2=11, h=L[0]);
-        translate([0,0,sump(L,0)]) cylinder(d=11, h=sump(L,3));
-      }
-      // innen
-      translate([0,0,sump(L,1)]) metric_thread(diameter=0.305*Inch+0.15, pitch=Inch/32, length=sumt(L)+2*Delta, test=Debug);
-      translate([0,0,sump(L,3)+Delta-L[4]/2]) cylinder(d1=7, d2=9, h=L[4]); // Fase
-      for(i=[0:360/3:359]) rotate([0,0,i]) union() {
-        translate([2,0,-1]) cylinder(d=1.5, h=sump(L,2));
-        rotate([0,90,0]) translate([0,0,2]) cylinder(d=1.5, h=6);
-      }
-    }
-    cylinder(d=2, h=sump(L,2));
-    *for(i=[0:360/32:359]) rotate([0,0,i]) translate([11/2,0,1]) union() {
-      cylinder(d1=0, d2=1, h=0.5, $fn=4);
-      translate([0,0,0.5]) cylinder(d=1, h=(sumt(L)-3), $fn=4);
-      translate([0,0,sumt(L)-3+0.5]) cylinder(d1=1, d2=0, h=0.5, $fn=4);
-    }
-  }
-  translate([0,(Schnitt)?50:0,0]) cube(100, center=true);
-}

+ 0 - 70
2d3d/dice-d6.scad

@@ -1,70 +0,0 @@
-/* [OpenSCAD]*/
-
-$fn=90;
-
-/* [Würfel] */
-// Kantenlänge des Würfels
-Size = 14; // [10:1:30]
-// Faktor der Kugel
-Faktor = 0.95;
-
-/* [Augen] */
-// Runde Augen
-Rund = true;
-
-Augen = Size*0.15;
-loch_position=Size/5;
-shift=Size/2;
-
-module wert_eins() {
-  if (Rund) {
-    sphere(d=Augen);
-  }
-  else {
-    cylinder(d=Augen, h=Augen, center=true);
-  }
-}
-module wert_zwei() {
-  translate([loch_position,loch_position,0]) wert_eins();
-  translate([-loch_position,-loch_position,0]) wert_eins();
-}
-module wert_drei() {
-  wert_eins();
-  wert_zwei();
-}
-module wert_vier() {
-  wert_zwei();
-  rotate([0,0,90]) wert_zwei();
-}
-module wert_fuenf() {
-  wert_eins();
-  wert_vier();
-}
-module wert_sechs() {
-  wert_vier();
-  translate([loch_position,0,0]) wert_eins();
-  translate([-loch_position,0,0]) wert_eins();
-}
-
-difference() {
-
-  intersection() {
-    cube(Size, center=true);
-    sphere(d=sqrt(2)*Size*Faktor);
-  }
-
-  union() {
-    rotate([0,0,0]) union() {
-      translate([0,0,shift]) wert_sechs();
-      translate([0,0,-shift]) wert_eins();
-    }
-    rotate([0,90,0]) union() {
-      translate([0,0,shift]) wert_zwei();
-      translate([0,0,-shift]) wert_fuenf();
-    }
-    rotate([90,0,0]) union() {
-      translate([0,0,shift]) wert_drei();
-      translate([0,0,-shift]) wert_vier();
-    }
-  }
-}

+ 0 - 3112
2d3d/dicetower.svg

@@ -1,3112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:ns1="http://sozi.baierouge.fr"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   viewBox="0 0 399.99999 299.99999"
-   sodipodi:docname="dicetower.svg"
-   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
-   version="1.1"
-   id="svg3962"
-   height="300mm"
-   width="400mm">
-  <sodipodi:namedview
-     inkscape:document-rotation="0"
-     inkscape:bbox-nodes="true"
-     inkscape:snap-bbox="true"
-     inkscape:snap-nodes="false"
-     inkscape:guide-bbox="true"
-     showguides="true"
-     inkscape:object-paths="false"
-     inkscape:object-nodes="true"
-     inkscape:window-maximized="1"
-     inkscape:window-y="-9"
-     inkscape:window-x="-9"
-     inkscape:window-height="1001"
-     inkscape:window-width="1920"
-     units="mm"
-     showgrid="false"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="mm"
-     inkscape:cy="310.67374"
-     inkscape:cx="118.39732"
-     inkscape:zoom="1.2319838"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base"
-     inkscape:snap-smooth-nodes="true">
-    <sodipodi:guide
-       id="guide3374"
-       orientation="0,1"
-       position="209.26113,52.46408" />
-    <sodipodi:guide
-       id="guide3376"
-       orientation="0,1"
-       position="283.63939,72.804365" />
-  </sodipodi:namedview>
-  <defs
-     id="defs3964" />
-  <metadata
-     id="metadata3967">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     style="display:inline"
-     inkscape:label="Work"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(0,23.346473)">
-    <path
-       inkscape:connector-curvature="0"
-       id="rect3340"
-       d="M 186.39674,-11.163192 V 133.83675 h 80.00008 V -11.163192 Z m 73.50015,3.9952093 1.49986,2.598428 -25.98099,14.9996727 -1.49986,-2.5978794 z m -67.00022,17.5981007 43.30127,25.000369 -1.49986,2.597879 -43.30127,-24.99982 z m 67.00022,37.89054 1.49986,2.597878 -43.30128,24.999819 -1.49985,-2.597878 z m -67.00022,38.790123 69.28225,40.000039 -1.50041,2.59788 -69.2817,-40.000041 z"
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.6299;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
-    <rect
-       y="-11.163192"
-       x="266.39639"
-       height="113.27361"
-       width="60.000004"
-       id="rect3342"
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.6299;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
-    <rect
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:11.1487;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       id="rect3378"
-       width="65.999763"
-       height="145.00002"
-       x="5.8258758"
-       y="-11.163196" />
-    <path
-       inkscape:connector-curvature="0"
-       id="rect3362-0"
-       d="m 8.8255854,133.83682 v 5.00008 H 5.8258758 v 29.9999 h 2.9997096 v 1.99981 h 1.4210196 c 3.95747,-2.68828 15.51605,-8.20244 28.57941,-8.20346 13.05359,0.004 24.598487,5.51719 28.552987,8.20346 h 1.44693 v -1.99981 h 2.99971 v -29.9999 h -2.99971 v -5.00008 z"
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.6299;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       sodipodi:nodetypes="cccccccccccccccc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="rect3346-3"
-       d="m 102.82546,196.83688 h 5.00007 v 2.99971 h 50.00019 v -2.99971 h 1.99981 v -1.42102 c -2.68828,-3.95746 -8.20243,-15.51606 -8.20345,-28.57941 0.004,-13.05359 5.51718,-24.59846 8.20345,-28.55296 v -1.44696 h -1.99981 v -2.99971 h -50.00019 v 2.99971 h -5.00007 z"
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.6299;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       sodipodi:nodetypes="cccccccccccccccc" />
-    <path
-       inkscape:connector-curvature="0"
-       id="rect3440-6"
-       d="m 159.82553,196.83688 h 5.00008 v 3.00025 h 80.00008 v -3.00025 h 1.99981 v -1.42215 c -2.68815,-3.95728 -8.20227,-15.51501 -8.20345,-28.57774 0.004,-13.05359 5.51718,-24.59846 8.20345,-28.55296 v -1.44696 h -1.99981 v -3.00025 h -80.00008 v 3.00025 h -5.00008 z"
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.6299;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       sodipodi:nodetypes="cccccccccccccccc" />
-    <path
-       style="color:#000000;font-variation-settings:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.6299;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
-       d="m 246.82551,196.83688 h 5.00007 v 2.99971 h 50.0002 v -2.99971 h 1.99981 v -1.42102 c -2.68828,-3.95746 -8.20243,-15.51606 -8.20345,-28.57941 0.004,-13.05359 5.51718,-24.59846 8.20345,-28.55296 v -1.44696 h -1.99981 v -2.99971 h -50.0002 v 2.99971 h -5.00008 z"
-       id="path3797"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccccccccccccccc" />
-    <path
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.6299;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="M 167.34662,-11.163192 V 133.83675 H 87.346439 V -11.163192 Z m -73.500251,3.9952093 -1.49986,2.598428 25.981091,14.9996727 1.49986,-2.5978794 z m 67.000321,17.5981007 -43.30127,25.000369 1.49986,2.597879 43.30127,-24.99982 z m -67.000321,37.89054 -1.49986,2.597878 43.301381,24.999819 1.49985,-2.597878 z m 67.000321,38.790123 -69.282351,40.000039 1.50041,2.59788 69.281801,-40.000041 z"
-       id="path3807"
-       inkscape:connector-curvature="0" />
-    <g
-       id="g154">
-      <g
-         transform="matrix(1,0,0,-1.4999995,-2.8535004,28.759089)"
-         id="g56">
-        <rect
-           style="opacity:0.65;fill:#ff00ff;stroke-width:9.75807;stop-color:#000000"
-           id="rect52"
-           width="3"
-           height="5"
-           x="74.679138"
-           y="6.2815266" />
-        <rect
-           y="1.2815266"
-           x="77.679138"
-           height="10"
-           width="3"
-           id="rect54"
-           style="opacity:0.65;fill:#ff00ff;stroke-width:13.8;stop-color:#000000" />
-      </g>
-      <rect
-         transform="scale(-1,1)"
-         y="-11.163196"
-         x="-77.825638"
-         height="23"
-         width="6.0000038"
-         id="rect96"
-         style="opacity:0.65;fill:#ff00ff;stroke-width:29.5978;stop-color:#000000" />
-      <g
-         id="g104"
-         transform="matrix(1,0,0,-1.4999995,-2.8534927,71.759112)">
-        <rect
-           y="6.2815266"
-           x="74.679138"
-           height="5"
-           width="3"
-           id="rect100"
-           style="opacity:0.65;fill:#ff00ff;stroke-width:9.75807;stop-color:#000000" />
-        <rect
-           style="opacity:0.65;fill:#ff00ff;stroke-width:13.8;stop-color:#000000"
-           id="rect102"
-           width="3"
-           height="10"
-           x="77.679138"
-           y="1.2815266" />
-      </g>
-      <g
-         transform="matrix(1,0,0,-1.4999995,-2.8534927,112.75911)"
-         id="g110">
-        <rect
-           style="opacity:0.65;fill:#ff00ff;stroke-width:9.75807;stop-color:#000000"
-           id="rect106"
-           width="3"
-           height="5"
-           x="74.679138"
-           y="6.2815266" />
-        <rect
-           y="1.2815266"
-           x="77.679138"
-           height="10"
-           width="3"
-           id="rect108"
-           style="opacity:0.65;fill:#ff00ff;stroke-width:13.8;stop-color:#000000" />
-      </g>
-      <rect
-         style="opacity:0.65;fill:#ff00ff;stroke-width:27.6002;stop-color:#000000"
-         id="rect114"
-         width="6.0000076"
-         height="20.000029"
-         x="-77.825645"
-         y="34.8368"
-         transform="scale(-1,1)" />
-      <rect
-         transform="scale(-1,1)"
-         y="77.836823"
-         x="-77.825645"
-         height="18"
-         width="6"
-         id="rect124"
-         style="opacity:0.65;fill:#ff00ff;stroke-width:26.1838;stop-color:#000000" />
-      <rect
-         transform="scale(-1,1)"
-         y="118.83682"
-         x="-77.825645"
-         height="15"
-         width="6"
-         id="rect126"
-         style="opacity:0.65;fill:#ff00ff;stroke-width:23.9024;stop-color:#000000" />
-      <rect
-         style="opacity:0.65;fill:#00ff00;stroke-width:3.76969;stop-color:#000000"
-         id="rect128"
-         width="3"
-         height="8"
-         x="74.825638"
-         y="26.8368" />
-      <rect
-         y="69.836823"
-         x="74.825645"
-         height="8"
-         width="3"
-         id="rect130"
-         style="opacity:0.65;fill:#00ff00;stroke-width:3.76969;stop-color:#000000" />
-      <rect
-         style="opacity:0.65;fill:#00ff00;stroke-width:3.76969;stop-color:#000000"
-         id="rect132"
-         width="3"
-         height="8"
-         x="74.825645"
-         y="110.83682" />
-    </g>
-    <g
-       transform="rotate(180,79.586037,61.336815)"
-       id="g188">
-      <g
-         id="g160"
-         transform="matrix(1,0,0,-1.4999995,-2.8535004,28.759089)">
-        <rect
-           y="6.2815266"
-           x="74.679138"
-           height="5"
-           width="3"
-           id="rect156"
-           style="opacity:0.65;fill:#ff00ff;stroke-width:9.75807;stop-color:#000000" />
-        <rect
-           style="opacity:0.65;fill:#ff00ff;stroke-width:13.8;stop-color:#000000"
-           id="rect158"
-           width="3"
-           height="10"
-           x="77.679138"
-           y="1.2815266" />
-      </g>
-      <rect
-         style="opacity:0.65;fill:#ff00ff;stroke-width:29.5978;stop-color:#000000"
-         id="rect162"
-         width="6.0000038"
-         height="23"
-         x="-77.825638"
-         y="-11.163196"
-         transform="scale(-1,1)" />
-      <g
-         transform="matrix(1,0,0,-1.4999995,-2.8534927,71.759112)"
-         id="g168">
-        <rect
-           style="opacity:0.65;fill:#ff00ff;stroke-width:9.75807;stop-color:#000000"
-           id="rect164"
-           width="3"
-           height="5"
-           x="74.679138"
-           y="6.2815266" />
-        <rect
-           y="1.2815266"
-           x="77.679138"
-           height="10"
-           width="3"
-           id="rect166"
-           style="opacity:0.65;fill:#ff00ff;stroke-width:13.8;stop-color:#000000" />
-      </g>
-      <g
-         id="g174"
-         transform="matrix(1,0,0,-1.4999995,-2.8534927,112.75911)">
-        <rect
-           y="6.2815266"
-           x="74.679138"
-           height="5"
-           width="3"
-           id="rect170"
-           style="opacity:0.65;fill:#ff00ff;stroke-width:9.75807;stop-color:#000000" />
-        <rect
-           style="opacity:0.65;fill:#ff00ff;stroke-width:13.8;stop-color:#000000"
-           id="rect172"
-           width="3"
-           height="10"
-           x="77.679138"
-           y="1.2815266" />
-      </g>
-      <rect
-         transform="scale(-1,1)"
-         y="34.8368"
-         x="-77.825645"
-         height="20.000029"
-         width="6.0000076"
-         id="rect176"
-         style="opacity:0.65;fill:#ff00ff;stroke-width:27.6002;stop-color:#000000" />
-      <rect
-         style="opacity:0.65;fill:#ff00ff;stroke-width:26.1838;stop-color:#000000"
-         id="rect178"
-         width="6"
-         height="18"
-         x="-77.825645"
-         y="77.836823"
-         transform="scale(-1,1)" />
-      <rect
-         style="opacity:0.65;fill:#ff00ff;stroke-width:23.9024;stop-color:#000000"
-         id="rect180"
-         width="6"
-         height="15"
-         x="-77.825645"
-         y="118.83682"
-         transform="scale(-1,1)" />
-      <rect
-         y="26.8368"
-         x="74.825638"
-         height="8"
-         width="3"
-         id="rect182"
-         style="opacity:0.65;fill:#00ff00;stroke-width:3.76969;stop-color:#000000" />
-      <rect
-         style="opacity:0.65;fill:#00ff00;stroke-width:3.76969;stop-color:#000000"
-         id="rect184"
-         width="3"
-         height="8"
-         x="74.825645"
-         y="69.836823" />
-      <rect
-         y="110.83682"
-         x="74.825645"
-         height="8"
-         width="3"
-         id="rect186"
-         style="opacity:0.65;fill:#00ff00;stroke-width:3.76969;stop-color:#000000" />
-    </g>
-    <path
-       transform="matrix(0.26458333,0,0,0.26458333,0,-23.346473)"
-       d="M -306.71875 29.001953 L -306.71875 577.0332 L -57.271484 577.0332 L -34.59375 577.0332 L -34.59375 520.33984 L -57.271484 520.33984 L -57.271484 461.75781 L -45.931641 461.75781 L -45.931641 490.10352 L -34.59375 490.10352 L -34.59375 433.41016 L -34.59375 365.37891 L -57.271484 365.37891 L -57.271484 306.79688 L -45.931641 306.79688 L -45.931641 335.14258 L -34.59375 335.14258 L -34.59375 278.45117 L -34.59375 202.85938 L -57.271484 202.85938 L -57.271484 144.27734 L -45.931641 144.27734 L -45.931641 172.62305 L -34.59375 172.62305 L -34.59375 115.92969 L -34.59375 29.001953 L -57.271484 29.001953 L -306.71875 29.001953 z "
-       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:42.1368;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       id="rect190" />
-  </g>
-  <script
-     id="sozi-script"
-     ns1:version="13.11-30213629">/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * Create or augment a namespace.
- *
- * &lt;p&gt;A typical use of this function is:&lt;/p&gt;
- *
- * &lt;pre&gt;
- * namespace(this, &quot;a.b.c&quot;, function (exports, globals) {
- *     exports.foo = function (x) {
- *         ...
- *     };
- * });
- * &lt;/pre&gt;
- *
- * &lt;p&gt;where &lt;code&gt;this&lt;/code&gt; is the global object.&lt;/p&gt;
- *
- * &lt;p&gt;In this example, function &lt;code&gt;foo&lt;/code&gt; is exported and can be
- * called as &lt;code&gt;a.b.c.foo(someValue)&lt;/code&gt;.&lt;/p&gt;
- *
- * @memberOf _global_
- * @param globals The global object
- * @param {String} path The dot-separated path to the namespace
- * @param {Function} body A function to execute in the context of the namespace
- */
-function namespace(globals, path, body) {
-    &quot;use strict&quot;;
-    
-    // Start name lookup in the global object
-	var current = globals;
-	
-	// For each name in the given path
-	path.split(&quot;.&quot;).forEach(function (name) {
-	    // If the current path element does not exist
-	    // in the current namespace, create a new sub-namespace
-		if (typeof current[name] === &quot;undefined&quot;) {
-			current[name] = {};
-		}
-		
-		// Move to the namespace for the current path element
-		current = current[name];
-	});
-	
-	// Execute the given function in the last namespace
-	if (body) {
-	    body(current, globals);
-	}
-	
-	return current;
-}
-
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.events
- * @namespace A simple event system for Sozi.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.events&quot;, function (exports) {
-    /** @lends sozi.events */
-
-    &quot;use strict&quot;;
-    
-    /**
-     * A registry of callback functions for each event type.
-     *
-     * &lt;p&gt;Call {@link sozi.events.listen} to add a new listener.&lt;/p&gt;
-     */
-    var listenerRegistry = {};
-
-    /**
-     * Adds a listener for a given event type.
-     *
-     * @memberOf sozi.events
-     * @name listen
-     * @function
-     * @param {String} key The identifier of the event type to listen
-     * @param {Function} handler The function to call when a corresponding event is fired
-     */
-    exports.listen = function (key, handler) {
-        if (!listenerRegistry.hasOwnProperty(key)) {
-            listenerRegistry[key] = [];
-        }
-        listenerRegistry[key].push(handler);
-    };
-    
-    /**
-     * Fire an event of a given type.
-     *
-     * &lt;p&gt;All event handlers added for the given event type are
-     * executed.&lt;/p&gt;
-     *
-     * &lt;p&gt;Additional arguments provided to this function are passed
-     * to the event handlers.&lt;/p&gt;
-     *
-     * @memberOf sozi.events
-     * @name fire
-     * @function
-     * @param {String} key The identifier of the event type to fire
-     */
-    exports.fire = function (key) {
-        var args = Array.prototype.slice.call(arguments, 1);
-        if (listenerRegistry.hasOwnProperty(key)) {
-            listenerRegistry[key].forEach(function (listener) {
-                listener.apply(null, args);
-            });
-        }
-    };
-});
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.proto
- * @namespace Helpers for prototype inheritance.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.proto&quot;, function (exports) {
-    &quot;use strict&quot;;
-    
-    exports.Object = {
-        installConstructors: function () {
-            function InstanceConstructor() {}
-            InstanceConstructor.prototype = this;
-            
-            this.instance = function () {
-                var result = new InstanceConstructor();
-                result.construct.apply(result, arguments);
-                return result;
-            };
-            
-            this.subtype = function (anObject) {
-                var result = new InstanceConstructor();
-                result.augment(anObject);
-                result.installConstructors();
-                return result;
-            };
-        },
-        
-        construct: function () {},
-        
-        augment: function (anObject) {
-            for (var attr in anObject) {
-                if (anObject.hasOwnProperty(attr)) {
-                    this[attr] = anObject[attr];
-                }
-            }
-            return this;
-        },
-        
-        bind: function (aFunction) {
-            var self = this;
-            return function () {
-                return aFunction.apply(self, arguments);
-            }
-        }
-    };
-    
-    // Bootstrap the root object
-    exports.Object.installConstructors();
-});
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.actions
- * @namespace Callback functions for DOM event handlers
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.actions&quot;, function (exports, window) {
-    /** @lends sozi.actions */
-    
-    &quot;use strict&quot;;
-    
-    // Module aliases
-    var player = namespace(window, &quot;sozi.player&quot;);
-    var display = namespace(window, &quot;sozi.display&quot;);
-    
-    // The global document object
-    var document = window.document;
-    
-    // Constants: mouse button numbers
-    var DRAG_BUTTON = 0;    // Left button
-    var TOC_BUTTON = 1;     // Middle button
-    
-    // Constants: increments for zooming and rotating,
-    // threshold for dragging
-    var SCALE_FACTOR = 1.05;
-    var ROTATE_STEP = 5;
-    var DRAG_THRESHOLD_PX = 5;
-    
-    /**
-     * The status of the current drag operation.
-     *
-     * @type Boolean
-     */
-    var mouseDragged = false;
-    
-    /**
-     * The X coordinate of the mouse on the latest &quot;down&quot; or &quot;drag&quot; event.
-     *
-     * @type Number
-     */
-    var mouseLastX = 0;
-
-    /**
-     * The Y coordinate of the mouse on the latest &quot;down&quot; or &quot;drag&quot; event.
-     *
-     * @type Number
-     */
-    var mouseLastY = 0;
-    
-    /**
-     * Zooms the display in the given direction.
-     *
-     * &lt;p&gt;Only the sign of &lt;code&gt;direction&lt;/code&gt; is used:&lt;/p&gt;
-     * &lt;ul&gt;
-     *  &lt;li&gt;zoom in when &lt;code&gt;direction &gt; 0&lt;/code&gt;&lt;/li&gt;
-     *  &lt;li&gt;zoom out when &lt;code&gt;direction &lt;= 0&lt;/code&gt;&lt;/li&gt;
-     * &lt;/ul&gt;
-     *
-     * &lt;p&gt;The scaling is centered around point (&lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;).&lt;/p&gt;
-     *
-     * @param {Number} direction The direction of the scaling operation
-     * @param {Number} x The X coordinate of the scaling center
-     * @param {Number} y The Y coordinate of the scaling center
-     */
-    function zoom(direction, x, y) {
-        player.stop();
-        display.viewPorts[&quot;player&quot;].zoom(direction &gt; 0 ? SCALE_FACTOR : 1 / SCALE_FACTOR, x, y);
-    }
-    
-    /**
-     * Rotate the display in the given direction.
-     *
-     * &lt;p&gt;Only the sign of &lt;code&gt;direction&lt;/code&gt; is used:&lt;/p&gt;
-     * &lt;ul&gt;
-     *  &lt;li&gt;rotate anticlockwise when direction &gt; 0&lt;/li&gt;
-     *  &lt;li&gt;rotate clockwise when direction &lt;= 0&lt;/li&gt;
-     * &lt;/ul&gt;
-     *
-     * @param {Number} direction The direction of the rotation
-     */
-    function rotate(direction) {
-        player.stop();
-        display.viewPorts[&quot;player&quot;].rotate(direction &gt; 0 ? ROTATE_STEP : -ROTATE_STEP);
-    }
-    
-    /**
-     * Show/hide the frame list.
-     *
-     * &lt;p&gt;The presentation stops when the frame list is showed,
-     * and restarts when the frame list is hidden.&lt;/p&gt;
-     */
-    function toggleFrameList() {
-        if (sozi.framelist.isVisible()) {
-            sozi.framelist.hide();
-            player.restart();
-        } else {
-            player.stop();
-            sozi.framelist.show();
-        }
-    }
-
-    function isPlayerEvent(evt) {
-        return display.viewPorts[&quot;player&quot;].contains(evt.clientX, evt.clientY);
-    }
-    
-    /**
-     * Event handler: mouse down.
-     *
-     * &lt;p&gt;When the left button is pressed, we register the current coordinates
-     * in case the mouse will be dragged. Handler {@link sozi.actions-onMouseDrag} is set until
-     * the button is released ({@link sozi.actions-onMouseUp}).&lt;/p&gt;
-     *
-     * &lt;p&gt;When the middle button is pressed, the table of contents is shown or hidden.&lt;/p&gt;
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function onMouseDown(evt) {
-        if (!isPlayerEvent(evt)) {
-            return;
-        }
-        if (evt.button === DRAG_BUTTON) {
-            document.documentElement.addEventListener(&quot;mousemove&quot;, onMouseDrag, false);
-            mouseDragged = false;
-            mouseLastX = evt.clientX;
-            mouseLastY = evt.clientY;
-        } else if (evt.button === TOC_BUTTON) {
-            toggleFrameList();
-        }
-        evt.stopPropagation();
-        evt.preventDefault();
-    }
-
-    /**
-     * Event handler: mouse move.
-     *
-     * &lt;p&gt;If the left mouse button is down, then the mouse move is a drag action.
-     * This method computes the displacement since the button was pressed or
-     * since the last move, and updates the reference coordinates for the next move.&lt;/p&gt;
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function onMouseDrag(evt) {
-        if (!isPlayerEvent(evt)) {
-            return;
-        }
-        player.stop();
-        
-        // The drag action is confirmed when one of the mouse coordinates
-        // has moved past the threshold
-        if (!mouseDragged &amp;&amp; (Math.abs(evt.clientX - mouseLastX) &gt; DRAG_THRESHOLD_PX ||
-                              Math.abs(evt.clientY - mouseLastY) &gt; DRAG_THRESHOLD_PX)) {
-            mouseDragged = true;
-        }
-        
-        if (mouseDragged) {
-            sozi.events.fire(&quot;sozi.player.cleanup&quot;);
-            display.viewPorts[&quot;player&quot;].drag(evt.clientX - mouseLastX, evt.clientY - mouseLastY);
-            mouseLastX = evt.clientX;
-            mouseLastY = evt.clientY;
-        }
-        
-        evt.stopPropagation();
-    }
-
-    /**
-     * Event handler: mouse up.
-     *
-     * &lt;p&gt;Releasing the left button removes the {@link sozi.actions-onMouseDrag} handler.&lt;/p&gt;
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function onMouseUp(evt) {
-        if (!isPlayerEvent(evt)) {
-            return;
-        }
-        if (evt.button === DRAG_BUTTON) {
-            document.documentElement.removeEventListener(&quot;mousemove&quot;, onMouseDrag, false);
-        }
-        evt.stopPropagation();
-        evt.preventDefault();
-    }
-
-    /**
-     * Event handler: context menu (i.e right click).
-     *
-     * &lt;p&gt;Right click goes one frame back.&lt;/p&gt;
-     *
-     * &lt;p&gt;There is no &quot;click&quot; event for the right mouse button and the menu
-     * can't be disabled in {@link sozi.actions-onMouseDown}.&lt;/p&gt;
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function onContextMenu(evt) {
-        if (!isPlayerEvent(evt)) {
-            return;
-        }
-        player.moveToPrevious();
-        evt.stopPropagation();
-        evt.preventDefault();
-    }
-
-    /**
-     * Event handler: mouse click.
-     *
-     * &lt;p&gt;Left-click moves the presentation to the next frame.&lt;/p&gt;
-     *
-     * &lt;p&gt;No &quot;click&quot; event is generated for the middle button in Firefox.
-     * See {@link sozi.actions-onMouseDown} for middle click handling.&lt;/p&gt;
-     *
-     * &lt;p&gt;Dragging the mouse produces a &quot;click&quot; event when the button is released.
-     * If flag {@link sozi.actions-mouseDragged} was set by {@link sozi.actions-onMouseDrag},
-     * then the click event is the result of a drag action.&lt;/p&gt;
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function onClick(evt) {
-        if (!isPlayerEvent(evt)) {
-            return;
-        }
-        if (!mouseDragged &amp;&amp; evt.button !== TOC_BUTTON) {
-            player.moveToNext();
-        }
-        evt.stopPropagation();
-        evt.preventDefault();
-    }
-
-    /**
-     * Event handler: mouse wheel.
-     *
-     * &lt;p&gt;Rolling the mouse wheel stops the presentation and zooms the current display.&lt;/p&gt;
-     *
-     * FIXME shift key does not work in Opera
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function onWheel(evt) {
-        if (!isPlayerEvent(evt)) {
-            return;
-        }
-        
-        if (!evt) {
-            evt = window.event;
-        }
-
-        var delta = 0;
-        if (evt.wheelDelta) { // IE and Opera
-            delta = evt.wheelDelta;
-        }
-        else if (evt.detail) { // Mozilla
-            delta = -evt.detail;
-        }
-        
-        if (delta !== 0) {
-            if (evt.shiftKey) {
-                rotate(delta);
-            }
-            else {
-                zoom(delta, evt.clientX, evt.clientY);
-            }
-        }
-        
-        evt.stopPropagation();
-        evt.preventDefault();
-    }
-
-    /**
-     * Event handler: key press.
-     *
-     * &lt;p&gt;Keyboard handling is split into two methods:
-     * {@link sozi.actions-onKeyPress} and {@link sozi.actions-onKeyDown}
-     * in order to get the same behavior across browsers.&lt;/p&gt;
-     *
-     * &lt;p&gt;This method handles character keys &quot;+&quot;, &quot;-&quot;, &quot;=&quot;, &quot;F&quot; and &quot;T&quot;.&lt;/p&gt;
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function onKeyPress(evt) {
-        // Keys with modifiers are ignored
-        if (evt.altKey || evt.ctrlKey || evt.metaKey) {
-            return;
-        }
-
-        switch (evt.charCode || evt.which) {
-        case 43: // +
-            zoom(1, window.innerWidth / 2, window.innerHeight / 2);
-            break;
-        case 45: // -
-            zoom(-1, window.innerWidth / 2, window.innerHeight / 2);
-            break;
-        case 61: // =
-            player.moveToCurrent();
-            break;
-        case 70: // F
-        case 102: // f
-            player.showAll();
-            break;
-        case 84: // T
-        case 116: // t
-            toggleFrameList();
-            break;
-        case 82: // R
-            rotate(-1);
-            break;
-        case 114: // r
-            rotate(1);
-            break;
-        default:
-            return;
-        }
-
-        evt.stopPropagation();
-        evt.preventDefault();
-    }
-
-    /**
-     * Event handler: key down.
-     *
-     * &lt;p&gt;Keyboard handling is split into two methods:
-     * {@link sozi.actions-onKeyPress} and {@link sozi.actions-onKeyDown}
-     * in order to get the same behavior across browsers.&lt;/p&gt;
-     *
-     * &lt;p&gt;This method handles navigation keys (arrows, page up/down, home, end)
-     * and the space and enter keys.&lt;/p&gt;
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function onKeyDown(evt) {
-        // Keys with Alt/Ctrl/Meta modifiers are ignored
-        if (evt.altKey || evt.ctrlKey || evt.metaKey) {
-            return;
-        }
-
-        switch (evt.keyCode) {
-            case 36: // Home
-                if (evt.shiftKey) {
-                    player.jumpToFirst();
-                }
-                else {
-                    player.moveToFirst();
-                }
-                break;
-            case 35: // End
-                if (evt.shiftKey) {
-                    player.jumpToLast();
-                }
-                else {
-                    player.moveToLast();
-                }
-                break;
-            case 38: // Arrow up
-            case 33: // Page up
-            case 37: // Arrow left
-                if (evt.shiftKey) {
-                    player.jumpToPrevious();
-                }
-                else {
-                    player.moveToPrevious();
-                }
-                break;
-            case 40: // Arrow down
-            case 34: // Page down
-            case 39: // Arrow right
-            case 13: // Enter
-            case 32: // Space
-                if (evt.shiftKey) {
-                    player.jumpToNext();
-                }
-                else {
-                    player.moveToNext();
-                }
-                break;
-            default:
-                // Ignore other keys and propagate the event
-                return;
-        }
-        
-        // Stop event propagation for supported keys
-        evt.stopPropagation();
-        
-        // In some versions of Chrome/Chromium, preventDefault() inhibits the &quot;keypress&quot; event
-        evt.preventDefault();
-    }
-
-    /**
-     * Dummy event handler: stop event propagation.
-     *
-     * @param {Event} evt The DOM event object
-     */
-    function stopEvent(evt) {
-        evt.stopPropagation();
-    }
-
-    /**
-     * Event handler: document load.
-     *
-     * &lt;p&gt;This function sets up all other event handlers for the player.&lt;/p&gt;
-     */
-    function onDisplayReady() {
-        // Prevent event propagation when clicking on a link
-        // FIXME does not work in Firefox when the &lt;a&gt; is referenced through a &lt;use&gt;
-        var links = document.getElementsByTagName(&quot;a&quot;);
-        for (var i = 0; i &lt; links.length; i += 1) {
-            links[i].addEventListener(&quot;click&quot;, stopEvent, false);
-            links[i].addEventListener(&quot;contextmenu&quot;, stopEvent, false);
-        }
-        
-        // Mouse events are constrained to the player viewport
-        // see isPlayerEvent()
-        // TODO also use shift-click as an alternative for middle-click
-        var svgRoot = document.documentElement;
-        svgRoot.addEventListener(&quot;click&quot;, onClick, false);
-        svgRoot.addEventListener(&quot;mousedown&quot;, onMouseDown, false);
-        svgRoot.addEventListener(&quot;mouseup&quot;, onMouseUp, false);
-        svgRoot.addEventListener(&quot;contextmenu&quot;, onContextMenu, false);
-        svgRoot.addEventListener(&quot;DOMMouseScroll&quot;, onWheel, false); // Mozilla
-        window.onmousewheel = onWheel;
-
-        // Keyboard events are global to the SVG document
-        svgRoot.addEventListener(&quot;keypress&quot;, onKeyPress, false);
-        svgRoot.addEventListener(&quot;keydown&quot;, onKeyDown, false);
-    }
-
-    sozi.events.listen(&quot;sozi.display.ready&quot;, onDisplayReady); // @depend events.js
-});
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.animation
- * @namespace A general-purpose animation controller.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.animation&quot;, function (exports, window) {
-    /** @lends sozi.animation */
-    
-    &quot;use strict&quot;;
-    
-    /**
-     * The browser-specific function to request an animation frame.
-     *
-     * @function
-     */
-    var requestAnimationFrame =
-            window.mozRequestAnimationFrame ||
-            window.webkitRequestAnimationFrame ||
-            window.msRequestAnimationFrame ||
-            window.oRequestAnimationFrame;
-
-    var getCurrentTime = function () {
-        return window.performance &amp;&amp; window.performance.now ?
-            window.performance.now() :
-            Date.now();
-    };
-
-    exports.setAnimationFrameHandlers = function (requestAnimationFrameFunction, getCurrentTimeFunction) {
-        requestAnimationFrame = requestAnimationFrameFunction;
-        getCurrentTime = getCurrentTimeFunction;
-    };
-
-    /**
-     * The default time step.
-     *
-     * &lt;p&gt;For browsers that do not support animation frames.&lt;/p&gt;
-     *
-     * @constant
-     * @type Number
-     */
-    var TIME_STEP_MS = 40;
-    
-    /**
-     * The handle provided by &lt;code&gt;setInterval()&lt;/code&gt;.
-     *
-     * &lt;p&gt;For browsers that do not support animation frames.&lt;/p&gt;
-     */
-    var timer;
-    
-    /**
-     * The list of running animators.
-     *
-     * @type Array
-     */
-    var animatorList = [];
-    
-    /**
-     * The main animation loop.
-     *
-     * &lt;p&gt;This function is called periodically and triggers the
-     * animation steps in all running animators.&lt;/p&gt;
-     *
-     * &lt;p&gt;If all animators are removed from the list of running animators,
-     * then the periodic calling is disabled.&lt;/p&gt;
-     *
-     * &lt;p&gt;This function can be called either through {@link sozi.animation-requestAnimationFrame}
-     * if the browser supports it, or through &lt;code&gt;setInterval()&lt;/code&gt;.&lt;/p&gt;
-     */
-    function loop() {
-        if (animatorList.length &gt; 0) {
-            // If there is at least one animator,
-            // and if the browser provides animation frames,
-            // schedule this function to be called again in the next frame.
-            if (requestAnimationFrame) {
-                requestAnimationFrame(loop);
-            }
-
-            // Step all animators
-            animatorList.forEach(function (animator) {
-                // TODO use timestamp argument:
-                // browser compatibility issue with Date.now()
-                // and performance.now() timestamps.
-                animator.step(getCurrentTime());
-            });
-        }
-        else {
-            // If all animators have been removed,
-            // and if this function is called periodically
-            // through setInterval, disable the periodic calling.
-            if (!requestAnimationFrame) {
-                window.clearInterval(timer);
-            }
-        }
-    }
-    
-    /**
-     * Start the animation loop.
-     *
-     * &lt;p&gt;This function delegates the periodic update of all animators
-     * to the {@link sozi.animation-loop} function, either through {@link sozi.animation-requestAnimationFrame}
-     * if the browser supports it, or through &lt;code&gt;setInterval()&lt;/code&gt;.&lt;/p&gt;
-     */
-    function start() {
-        if (requestAnimationFrame) {
-            requestAnimationFrame(loop);
-        }
-        else {
-            timer = window.setInterval(function () {
-                loop(getCurrentTime());
-            }, TIME_STEP_MS);
-        }
-    }
-    
-    /**
-     * Add a new animator object to the list of running animators.
-     *
-     * &lt;p&gt;If the animator list was empty before calling this function,
-     * then the animation loop is started.&lt;/p&gt;
-     *
-     * @param {sozi.animation.Animator} animator The animator object to add.
-     */
-    function addAnimator(animator) {
-        animatorList.push(animator);
-        if (animatorList.length === 1) {
-            start();
-        }
-    }
-    
-    /**
-     * Remove the given animator from the list of running animators.
-     *
-     * @param {sozi.animation.Animator} animator The animator object to add.
-     */
-    function removeAnimator(animator) {
-        animatorList.splice(animatorList.indexOf(animator), 1);
-    }
-    
-    /**
-     * @class
-     *
-     * An animator provides the logic for animating other objects.
-     *
-     * &lt;p&gt;The main purpose of an animator is to schedule the update
-     * operations in the animated objects.&lt;/p&gt;
-     *
-     * @memberOf sozi.animation
-     * @name Animator
-     * @depend proto.js
-     */
-    exports.Animator = sozi.proto.Object.subtype({
-        /** @lends sozi.animation.Animator */
-        
-        /**
-         * Construct a new animator.
-         */
-        construct: function () {
-            /**
-             * The animation duration, in milliseconds.
-             * @type Number
-             */
-            this.durationMs = 0;
-            
-            /**
-             * A &quot;payload&quot; object that can be used by {@link sozi.animation.Animator.onStep}
-             * and {@link sozi.animation.Animator.onDone}.
-             */
-            this.data = null;
-            
-            /**
-             * The start time of the animation.
-             * @type Number
-             */
-            this.initialTime = 0;
-            
-            /**
-             * The current state of this animator.
-             * @type Boolean
-             */
-            this.started = false;
-        },
-
-        /**
-         * Start the current animator.
-         *
-         * &lt;p&gt;The current animator is added to the list of running animators
-         * and is put in the &quot;started&quot; state.
-         * It will be removed from the list automatically when the given duration
-         * has elapsed.&lt;/p&gt;
-         *
-         * &lt;p&gt;Method {@link sozi.animation.Animator.onStep} is called once before starting the animation.&lt;/p&gt;
-         *
-         * @param {Number} durationMs The animation duration, in milliseconds
-         * @param data Some data that can be used in {@link sozi.animation.Animator.onStep}
-         * and {@link sozi.animation.Animator.onDone}
-         */
-        start: function (durationMs, data) {
-            this.durationMs = durationMs;
-            this.data = data;
-            this.initialTime = getCurrentTime();
-            this.onStep(0);
-            if (!this.started) {
-                this.started = true;
-                addAnimator(this);
-            }
-        },
-
-        /**
-         * Stop the current animator.
-         *
-         * &lt;p&gt;The current animator is removed from the list of running animators
-         * and is put in the &quot;stopped&quot; state.&lt;/p&gt;
-         */
-        stop: function () {
-            if (this.started) {
-                removeAnimator(this);
-                this.started = false;
-            }
-        },
-
-        /**
-         * Perform one animation step.
-         *
-         * &lt;p&gt;This function is called automatically by the {@link sozi.animation-loop} function.
-         * It calls {@link sozi.animation.Animator.onStep}.
-         * If the animation duration has elapsed, {@link sozi.animation.Animator.onDone} is called.&lt;/p&gt;
-         *
-         * @param {Number} currentTime The current time
-         */
-        step: function (currentTime) {
-            var elapsedTime = currentTime - this.initialTime;
-            if (elapsedTime &gt;= this.durationMs) {
-                this.stop();
-                this.onStep(1);
-                this.onDone();
-            } else {
-                this.onStep(elapsedTime / this.durationMs);
-            }
-        },
-        
-        /**
-         * This method is called automatically on each animation step.
-         *
-         * &lt;p&gt;The default implementation does nothing. Override it in a
-         * subclass or instance to provide your own implementation.&lt;p&gt;
-         *
-         * @param {Number} progress The elapsed fraction of the total duration (comprised between 0 and 1 included).
-         */
-        onStep: function (progress) {
-            // Do nothing
-        },
-        
-        /**
-         * This method is called automatically when the animation ends.
-         *
-         * &lt;p&gt;The default implementation does nothing. Override it in a
-         * subclass or instance to provide your own implementation.&lt;p&gt;
-         */
-        onDone: function () {
-            // Do nothing
-        }
-    });
-
-    /*
-     * The acceleration profiles.
-     *
-     * Each profile is a function that operates in the interval [0, 1]
-     * and produces a result in the same interval.
-     *
-     * These functions are meant to be called in {@link sozi.animation.Animator.onStep}
-     * to transform the progress indicator according to the desired
-     * acceleration effect.
-     */
-    exports.profiles = {
-        &quot;linear&quot;: function (x) {
-            return x;
-        },
-
-        &quot;accelerate&quot;: function (x) {
-            return Math.pow(x, 3);
-        },
-
-        &quot;strong-accelerate&quot;: function (x) {
-            return Math.pow(x, 5);
-        },
-
-        &quot;decelerate&quot;: function (x) {
-            return 1 - Math.pow(1 - x, 3);
-        },
-
-        &quot;strong-decelerate&quot;: function (x) {
-            return 1 - Math.pow(1 - x, 5);
-        },
-
-        &quot;accelerate-decelerate&quot;: function (x) {
-            var xs = x &lt;= 0.5 ? x : 1 - x,
-                y = Math.pow(2 * xs, 3) / 2;
-            return x &lt;= 0.5 ? y : 1 - y;
-        },
-
-        &quot;strong-accelerate-decelerate&quot;: function (x) {
-            var xs = x &lt;= 0.5 ? x : 1 - x,
-                y = Math.pow(2 * xs, 5) / 2;
-            return x &lt;= 0.5 ? y : 1 - y;
-        },
-
-        &quot;decelerate-accelerate&quot;: function (x) {
-            var xs = x &lt;= 0.5 ? x : 1 - x,
-                y = (1 - Math.pow(1 - 2 * xs, 2)) / 2;
-            return x &lt;= 0.5 ? y : 1 - y;
-        },
-
-        &quot;strong-decelerate-accelerate&quot;: function (x) {
-            var xs = x &lt;= 0.5 ? x : 1 - x,
-                y = (1 - Math.pow(1 - 2 * xs, 3)) / 2;
-            return x &lt;= 0.5 ? y : 1 - y;
-        },
-        
-        &quot;immediate-beginning&quot;: function (x) {
-            return 1;
-        },
-        
-        &quot;immediate-end&quot;: function (x) {
-            return x === 1 ? 1 : 0;
-        },
-        
-        &quot;immediate-middle&quot;: function (x) {
-            return x &gt;= 0.5 ? 1 : 0;
-        }
-    };
-});
-
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.display
- * @namespace Display management.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.display&quot;, function (exports, window) {
-    &quot;use strict&quot;;
-    
-    // Constant: the Sozi namespace
-    var SVG_NS = &quot;http://www.w3.org/2000/svg&quot;;
-
-    var XLINK_NS = &quot;http://www.w3.org/1999/xlink&quot;;
-    
-    // The global document object
-    var document = window.document;
-    
-    // The initial bounding box of the whole document,
-    // assigned in onDocumentReady()
-    var initialBBox;
-    
-    var lastWindowWidth;
-    var lastWindowHeight;
-    
-    exports.viewPorts = {};
-    
-    var primaryViewport;
-
-    /**
-     * @depend proto.js
-     */
-    exports.CameraState = sozi.proto.Object.subtype({
-        construct : function () {
-            // Center coordinates
-            this.cx = this.cy = 0;
-            
-            // Dimensions
-            this.width = this.height = 1;
-            
-            // Rotation angle, in degrees
-            this.angle = 0;
-            
-            // Clipping
-            this.clipped = true;
-            
-            // Transition zoom
-            this.transitionZoomPercent = 0;
-            
-            // Transition profile
-            this.transitionProfile = sozi.animation.profiles.linear;
-            
-            // Transition path
-            this.transitionPath = null;
-        },
-
-        setCenter: function (cx, cy) {
-            this.cx = cx;
-            this.cy = cy;
-            return this;
-        },
-        
-        setSize: function (width, height) {
-            this.width = width;
-            this.height = height;
-            return this;
-        },
-        
-        setClipped: function (clipped) {
-            this.clipped = clipped;
-            return this;
-        },
-        
-        /*
-         * Set the angle of the current camera state.
-         * The angle of the current state is normalized
-         * in the interval [-180 ; 180]
-         */
-        setAngle: function (angle) {
-            this.angle = (angle + 180) % 360 - 180;
-            return this;
-        },
-        
-        setRawAngle: function (angle) {
-            this.angle = angle;
-            return this;
-        },
-        
-        setTransitionZoomPercent: function (zoomPercent) {
-            this.transitionZoomPercent = zoomPercent;
-            return this;
-        },
-        
-        setTransitionProfile: function (profile) {
-            this.transitionProfile = profile;
-            return this;
-        },
-        
-        setTransitionPath: function (svgPath) {
-            this.transitionPath = svgPath;
-            return this;
-        },
-        
-        /*
-         * Set the current camera's properties to the given SVG element.
-         *
-         * If the element is a rectangle, the properties of the frames are based
-         * on the geometrical properties of the rectangle.
-         * Otherwise, the properties of the frame are based on the bounding box
-         * of the given element.
-         *
-         * Parameters:
-         *    - svgElement: an element from the SVG DOM
-         */
-        setAtElement: function (svgElement) {
-            // Read the raw bounding box of the given SVG element
-            var x, y, w, h;
-            if (svgElement.nodeName === &quot;rect&quot;) {
-                x = svgElement.x.baseVal.value;
-                y = svgElement.y.baseVal.value;
-                w = svgElement.width.baseVal.value;
-                h = svgElement.height.baseVal.value;
-            } else {
-                var b = svgElement.getBBox();
-                x = b.x;
-                y = b.y;
-                w = b.width;
-                h = b.height;
-            }
-
-            // Compute the raw coordinates of the center
-            // of the given SVG element
-            var c = document.documentElement.createSVGPoint();
-            c.x = x + w / 2;
-            c.y = y + h / 2;
-            
-            // Compute the coordinates of the center of the given SVG element
-            // after its current transformation
-            var matrix = svgElement.getCTM();
-            c = c.matrixTransform(matrix);
-
-            // Compute the scaling factor applied to the given SVG element
-            var scale = Math.sqrt(matrix.a * matrix.a + matrix.b * matrix.b);
-            
-            // Update the camera to match the bounding box information of the
-            // given SVG element after its current transformation
-            return this.setCenter(c.x, c.y)
-                .setSize(w * scale, h * scale)
-                .setAngle(Math.atan2(matrix.b, matrix.a) * 180 / Math.PI);
-        },
-
-        setAtState: function (other) {
-            return this.setCenter(other.cx, other.cy)
-                .setSize(other.width, other.height)
-                .setAngle(other.angle)
-                .setClipped(other.clipped)
-                .setTransitionZoomPercent(other.transitionZoomPercent)
-                .setTransitionProfile(other.transitionProfile)
-                .setTransitionPath(other.transitionPath);
-        },
-        
-        interpolatableAttributes: [&quot;width&quot;, &quot;height&quot;, &quot;angle&quot;],
-        
-        interpolate: function (initialState, finalState, ratio, useTransitionPath, reverseTransitionPath) {
-            var remaining = 1 - ratio;
-            for (var i = 0; i &lt; this.interpolatableAttributes.length; i += 1) {
-                var attr = this.interpolatableAttributes[i];
-                this[attr] = finalState[attr] * ratio + initialState[attr] * remaining;
-            }
-
-            var svgPath = reverseTransitionPath ? initialState.transitionPath : finalState.transitionPath;
-            if (useTransitionPath &amp;&amp; svgPath) {
-                var pathLength = svgPath.getTotalLength();
-                
-                if (reverseTransitionPath) {
-                    var startPoint = svgPath.getPointAtLength(pathLength);
-                    var endPoint = svgPath.getPointAtLength(0);
-                    var currentPoint = svgPath.getPointAtLength(pathLength * remaining);
-                }
-                else {
-                    var startPoint = svgPath.getPointAtLength(0);
-                    var endPoint = svgPath.getPointAtLength(pathLength);
-                    var currentPoint = svgPath.getPointAtLength(pathLength * ratio);
-                }
- 
-                this.cx = currentPoint.x + (finalState.cx - endPoint.x) * ratio + (initialState.cx - startPoint.x) * remaining;
-                this.cy = currentPoint.y + (finalState.cy - endPoint.y) * ratio + (initialState.cy - startPoint.y) * remaining;
-            }
-            else {
-                this.cx = finalState.cx * ratio + initialState.cx * remaining;
-                this.cy = finalState.cy * ratio + initialState.cy * remaining;
-            }
-        }
-    });
-    
-    exports.Camera = exports.CameraState.subtype({
-        construct: function (viewPort, idLayer) {
-            exports.CameraState.construct.call(this);
-            
-            this.viewPort = viewPort;
-            
-            // Clipping rectangle
-            this.svgClipRect = document.createElementNS(SVG_NS, &quot;rect&quot;);
-        
-            // Clipping path
-            var svgClipPath = document.createElementNS(SVG_NS, &quot;clipPath&quot;);
-            svgClipPath.setAttribute(&quot;id&quot;, &quot;sozi-clip-path-&quot; + viewPort.id + &quot;-&quot; + idLayer);
-            svgClipPath.appendChild(this.svgClipRect);
-            viewPort.svgGroup.appendChild(svgClipPath);
-
-            // The group that will support the clipping operation
-            var svgClippedGroup = document.createElementNS(SVG_NS, &quot;g&quot;);
-            svgClippedGroup.setAttribute(&quot;clip-path&quot;, &quot;url(#sozi-clip-path-&quot; + viewPort.id + &quot;-&quot; + idLayer + &quot;)&quot;);
-            viewPort.svgGroup.appendChild(svgClippedGroup);
-            
-            if (viewPort.isPrimary) {
-                // This group will support transformations
-                // we keep the layer group clean since it can be referenced
-                // from &lt;use&gt; elements
-                this.svgLayer = document.createElementNS(SVG_NS, &quot;g&quot;);
-                this.svgLayer.appendChild(document.getElementById(idLayer));
-            }
-            else {
-                // A &lt;use&gt; element referencing the target layer
-                this.svgLayer = document.createElementNS(SVG_NS, &quot;use&quot;);
-                this.svgLayer.setAttributeNS(XLINK_NS, &quot;href&quot;, &quot;#&quot; + idLayer);
-            }
-            svgClippedGroup.appendChild(this.svgLayer);
-        },
-        
-        setAtState: function (other) {
-            return exports.CameraState.setAtState.call(this, other).update();
-        },
-        
-        getScale: function () {
-            return Math.min(this.viewPort.width / this.width, this.viewPort.height / this.height);
-        },
-        
-        rotate: function (angle) {
-            return this.setAngle(this.angle + angle).update();
-        },
-
-        zoom: function (factor, x, y) {
-            return this.setSize(this.width / factor, this.height / factor)
-                       .drag(
-                            (1 - factor) * (x - this.viewPort.width / 2),
-                            (1 - factor) * (y - this.viewPort.height / 2)
-                        );
-        },
-        
-        drag: function (deltaX, deltaY) {
-            var scale = this.getScale();
-            var angleRad = this.angle * Math.PI / 180;
-            var si = Math.sin(angleRad);
-            var co = Math.cos(angleRad);
-            return this.setCenter(
-                    this.cx - (deltaX * co - deltaY * si) / scale,
-                    this.cy - (deltaX * si + deltaY * co) / scale
-                ).setClipped(false).update();
-        },
-
-        update: function () {
-            var scale = this.getScale();
-                    
-            // Compute the size and location of the frame on the screen
-            var width = this.width  * scale;
-            var height = this.height * scale;
-            var x = (this.viewPort.width - width) / 2;
-            var y = (this.viewPort.height - height) / 2;
-
-            // Adjust the location and size of the clipping rectangle and the frame rectangle
-            this.svgClipRect.setAttribute(&quot;x&quot;, this.clipped ? x : 0);
-            this.svgClipRect.setAttribute(&quot;y&quot;, this.clipped ? y : 0);
-            this.svgClipRect.setAttribute(&quot;width&quot;,  this.clipped ? width  : this.viewPort.width);
-            this.svgClipRect.setAttribute(&quot;height&quot;, this.clipped ? height : this.viewPort.height);
-                    
-            // Compute and apply the geometrical transformation to the layer group
-            var translateX = -this.cx + this.width / 2  + x / scale;
-            var translateY = -this.cy + this.height / 2 + y / scale;
-
-            this.svgLayer.setAttribute(&quot;transform&quot;,
-                &quot;scale(&quot; + scale + &quot;)&quot; +
-                &quot;translate(&quot; + translateX + &quot;,&quot; + translateY + &quot;)&quot; +
-                &quot;rotate(&quot; + (-this.angle) + ',' + this.cx + &quot;,&quot; + this.cy + &quot;)&quot;
-            );
-            
-            return this;
-        }
-    });
-    
-    /**
-     * @depend proto.js
-     */
-    exports.ViewPort = sozi.proto.Object.subtype({
-        construct: function (id, idLayerList, primary) {
-            this.id = id;
-            exports.viewPorts[id] = this;
-            
-            this.isPrimary = !!primary;
-            
-            if (this.isPrimary) {
-                if (primaryViewport) {
-                    throw &quot;Failed to create a primary viewport. A primary viewport already exists.&quot;;
-                }
-                else {
-                    primaryViewport = this;
-                }
-            }
-            
-            // TODO add a clip path for the viewport
-            this.svgGroup = document.createElementNS(SVG_NS, &quot;g&quot;);
-            this.svgGroup.setAttribute(&quot;class&quot;, &quot;sozi-viewport&quot;);
-            this.svgGroup.setAttribute(&quot;id&quot;, &quot;sozi-viewport-&quot; + id);
-            document.documentElement.appendChild(this.svgGroup);
-            
-            this.setLocation(0, 0).setSize(window.innerWidth, window.innerHeight);
-            
-            // Create a camera for each layer
-            this.cameras = {};
-            idLayerList.forEach(function (idLayer) {
-                this.cameras[idLayer] = exports.Camera.instance(this, idLayer);
-            }, this);
-        },
-        
-        setSize: function (width, height) {
-            this.width = width;
-            this.height = height;
-            return this;
-        },
-        
-        setLocation: function (x, y) {
-            this.x = x;
-            this.y = y;
-            return this;
-        },
-
-        contains: function (x, y) {
-            return x &gt;= this.x &amp;&amp; x &lt; this.x + this.width &amp;&amp;
-                   y &gt;= this.y &amp;&amp; y &lt; this.y + this.height;
-        },
-        
-        /*
-         * Returns the geometrical properties of the SVG document
-         *
-         * Returns:
-         *    - The default size, translation and rotation for the document's bounding box
-         */
-        getDocumentState: function () {
-            // This object defines the bounding box of the whole document
-            var camera = exports.CameraState.instance()
-                .setCenter(initialBBox.x + initialBBox.width / 2,
-                           initialBBox.y + initialBBox.height / 2)
-                .setSize(initialBBox.width, initialBBox.height)
-                .setClipped(false);
-            
-            // Copy the document's bounding box to all layers
-            var result = {};
-            for (var idLayer in this.cameras) {
-                result[idLayer] = camera;
-            }
-            return result;
-        },
-
-        /*
-         * Apply geometrical transformations to the image according to the current
-         * geometrical attributes of this Display.
-         *
-         * This method is called automatically when the window is resized.
-         */
-        update: function () {
-            this.svgGroup.setAttribute(&quot;transform&quot;, &quot;translate(&quot; + this.x + &quot;,&quot; + this.y + &quot;)&quot;);
-            for (var idLayer in this.cameras) {
-                this.cameras[idLayer].update();
-            }
-            return this;
-        },
-
-        /*
-         * Transform the SVG document to show the given frame.
-         *
-         * Parameters:
-         *    - frame: the frame to show
-         */
-        showFrame: function (frame) {
-            for (var idLayer in frame.states) {
-                this.cameras[idLayer].setAtState(frame.states[idLayer]);
-            }
-            return this;
-        },
-
-        /*
-         * Apply an additional translation to the SVG document based on onscreen coordinates.
-         *
-         * Parameters:
-         *    - deltaX: the horizontal displacement, in pixels
-         *    - deltaY: the vertical displacement, in pixels
-         */
-        drag: function (deltaX, deltaY) {
-            for (var idLayer in this.cameras) {
-                this.cameras[idLayer].drag(deltaX, deltaY);
-            }
-            return this;
-        },
-
-        /*
-         * Zooms the display with the given factor.
-         *
-         * The zoom is centered around (x, y) with respect to the center of the display area.
-         */
-        zoom: function (factor, x, y) {
-            for (var idLayer in this.cameras) {
-                this.cameras[idLayer].zoom(factor, x, y);
-            }
-            return this;
-        },
-
-        /*
-         * Rotate the display with the given angle.
-         *
-         * The rotation is centered around the center of the display area.
-         */
-        rotate: function (angle) {
-            for (var idLayer in this.cameras) {
-                this.cameras[idLayer].rotate(angle);
-            }
-            return this;
-        },
-        
-        /**
-         * The default handler for window resize events.
-         *
-         * @param widthRatio The horizontal resize ratio
-         * @param heightRatio The vertical resize ratio
-         */
-        onWindowResize: function (widthRatio, heightRatio) {
-            this.setLocation(this.x * widthRatio, this.y * heightRatio)
-                .setSize(this.width * widthRatio, this.height * heightRatio)
-                .update();
-        }
-    });
-    
-    /*
-     * Initializes the current Display.
-     *
-     * This method prepares the DOM representation of the current SVG document.
-     * All the image is embedded into a global &quot;g&quot; element on which transformations will be applied.
-     * A clipping rectangle is added.
-     *
-     * This method must be called when the document is ready to be manipulated.
-     */
-    function onDocumentReady() {
-        var svgRoot = document.documentElement; // TODO check SVG tag
-        
-        // Save the initial bounding box of the document
-        // and force its dimensions to the browser window
-        initialBBox = svgRoot.getBBox();
-        lastWindowWidth = window.innerWidth;
-        lastWindowHeight = window.innerHeight;
-        svgRoot.setAttribute(&quot;width&quot;, lastWindowWidth);
-        svgRoot.setAttribute(&quot;height&quot;, lastWindowHeight);
-        
-        sozi.events.fire(&quot;sozi.display.ready&quot;);
-    }
-
-    /*
-     * Resizes the SVG document to fit the browser window.
-     *
-     * This method calls onWindowResize on all registered viewports.
-     */
-    function resize() {
-        var svgRoot = document.documentElement;
-        svgRoot.setAttribute(&quot;width&quot;, window.innerWidth);
-        svgRoot.setAttribute(&quot;height&quot;, window.innerHeight);
-        
-        for (var vp in exports.viewPorts) {
-            exports.viewPorts[vp].onWindowResize(window.innerWidth / lastWindowWidth, window.innerHeight / lastWindowHeight);
-        }
-
-        lastWindowWidth = window.innerWidth;
-        lastWindowHeight = window.innerHeight;
-    }
-    
-    sozi.events.listen(&quot;sozi.document.ready&quot;, onDocumentReady); // @depend events.js
-    window.addEventListener(&quot;resize&quot;, resize, false);
-});
-
-/*
-* Sozi - A presentation tool using the SVG standard
-*
-* Copyright (C) 2010-2013 Guillaume Savaton
-*
-* This program is dual licensed under the terms of the MIT license
-* or the GNU General Public License (GPL) version 3.
-* A copy of both licenses is provided in the doc/ folder of the
-* official release of Sozi.
-*
-* See http://sozi.baierouge.fr/wiki/en:license for details.
-*/
-
-/**
- * @name sozi.document
- * @namespace Document analysis.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.document&quot;, function (exports, window) {
-    &quot;use strict&quot;;
-    
-    // An alias to the global document object
-    var document = window.document;
-    
-    // Constant: the Sozi namespace
-    var SOZI_NS = &quot;http://sozi.baierouge.fr&quot;;
-    
-    // Constant: the default frame properties, if missing in the SVG document
-    var DEFAULTS = {
-        &quot;title&quot;: &quot;Untitled&quot;,
-        &quot;sequence&quot;: &quot;0&quot;,
-        &quot;hide&quot;: &quot;true&quot;,
-        &quot;clip&quot;: &quot;true&quot;,
-        &quot;show-in-frame-list&quot;: &quot;true&quot;,
-        &quot;timeout-enable&quot;: &quot;false&quot;,
-        &quot;timeout-ms&quot;: &quot;5000&quot;,
-        &quot;transition-duration-ms&quot;: &quot;1000&quot;,
-        &quot;transition-zoom-percent&quot;: &quot;0&quot;,
-        &quot;transition-profile&quot;: &quot;linear&quot;,
-        &quot;transition-path-hide&quot;: &quot;true&quot;
-    };
-
-    var DRAWABLE_TAGS = [ &quot;g&quot;, &quot;image&quot;, &quot;path&quot;, &quot;rect&quot;, &quot;circle&quot;,
-        &quot;ellipse&quot;, &quot;line&quot;, &quot;polyline&quot;, &quot;polygon&quot;, &quot;text&quot;, &quot;clippath&quot; ];
-
-    // The definitions of all valid frames in the current document
-    exports.frames = [];
-    
-    // The list of layer ids managed by Sozi
-    exports.idLayerList = [];
-    
-    /*
-    * Returns the value of an attribute of a given Sozi SVG element.
-    *
-    * If the attribute is empty or does not exist,
-    * then a default value is returned (See DEFAULTS).
-    */
-    function readAttribute(soziElement, attr) {
-        return soziElement.getAttributeNS(SOZI_NS, attr) || DEFAULTS[attr];
-    }
-
-    function readStateForLayer(frame, idLayer, soziElement) {
-        var state = frame.states[idLayer] =
-            frame.states[idLayer] || sozi.display.CameraState.instance();
-        
-        if (typeof state.transitionZoomPercent === &quot;undefined&quot; || soziElement.hasAttributeNS(SOZI_NS, &quot;transition-zoom-percent&quot;)) {
-            state.setTransitionZoomPercent(parseInt(readAttribute(soziElement, &quot;transition-zoom-percent&quot;), 10));
-        }
-
-        if (typeof state.transitionProfile === &quot;undefined&quot; || soziElement.hasAttributeNS(SOZI_NS, &quot;transition-profile&quot;)) {
-            state.setTransitionProfile(sozi.animation.profiles[readAttribute(soziElement, &quot;transition-profile&quot;)]);
-        }
-        
-        if (typeof state.transitionPath === &quot;undefined&quot; || soziElement.hasAttributeNS(SOZI_NS, &quot;transition-path&quot;)) {
-            var svgPath = document.getElementById(soziElement.getAttributeNS(SOZI_NS, &quot;transition-path&quot;));
-            if (svgPath &amp;&amp; svgPath.nodeName === &quot;path&quot;) {
-                state.setTransitionPath(svgPath);
-                if (readAttribute(soziElement, &quot;transition-path-hide&quot;) === &quot;true&quot;) {
-                    svgPath.style.visibility = &quot;hidden&quot;;
-                }
-            }
-        }
-        
-        if (soziElement.hasAttributeNS(SOZI_NS, &quot;refid&quot;)) {
-            var svgElement = document.getElementById(soziElement.getAttributeNS(SOZI_NS, &quot;refid&quot;));
-            if (svgElement) {
-                state.setAtElement(svgElement);
-                if (readAttribute(soziElement, &quot;hide&quot;) === &quot;true&quot;) {
-                    svgElement.style.visibility = &quot;hidden&quot;;
-                }
-            }
-        }
-            
-        if (soziElement.hasAttributeNS(SOZI_NS, &quot;clip&quot;)) {
-            state.setClipped(readAttribute(soziElement, &quot;clip&quot;) === &quot;true&quot;);
-        }
-    }
-    
-    /*
-    * Builds the list of frames from the current document.
-    *
-    * This method collects all elements with tag &quot;sozi:frame&quot; and
-    * retrieves their geometrical and animation attributes.
-    * SVG elements that should be hidden during the presentation are hidden.
-    *
-    * The resulting list is available in frames, sorted by frame indices.
-    */
-    function readFrames() {
-        // Collect all group ids referenced in &lt;layer&gt; elements
-        var idLayerRefList = [];
-        var soziLayerList = document.getElementsByTagNameNS(SOZI_NS, &quot;layer&quot;);
-        for (var i = 0; i &lt; soziLayerList.length; i += 1) {
-            var idLayer = soziLayerList[i].getAttributeNS(SOZI_NS, &quot;group&quot;);
-            if (idLayer &amp;&amp; idLayerRefList.indexOf(idLayer) === -1) {
-                idLayerRefList.push(idLayer);
-            }
-        }
-
-        // Reorganize the document, grouping objects that do not belong
-        // to a group referenced in &lt;layer&gt; elements
-        var svgRoot = document.documentElement;
-        var SVG_NS = &quot;http://www.w3.org/2000/svg&quot;;
-
-        // Create the first wrapper group
-        var svgWrapper = document.createElementNS(SVG_NS, &quot;g&quot;);
-
-        // For each child of the root SVG element
-        var svgElementList = Array.prototype.slice.call(svgRoot.childNodes);
-        svgElementList.forEach(function (svgElement, index) {
-            if (!svgElement.getAttribute) {
-                // Remove text elements
-                svgRoot.removeChild(svgElement);
-            }
-            else if (idLayerRefList.indexOf(svgElement.getAttribute(&quot;id&quot;)) !== -1) {
-                // If the current element is a referenced layer ...
-                if (svgWrapper.firstChild) {
-                    // ... and if there were other non-referenced elements before it,
-                    // append the wrapper group to the &lt;defs&gt; element
-                    svgWrapper.setAttribute(&quot;id&quot;, &quot;sozi-wrapper-&quot; + index);
-                    exports.idLayerList.push(&quot;sozi-wrapper-&quot; + index);
-                    svgRoot.insertBefore(svgWrapper, svgElement);
-                    
-                    // Prepare a new wrapper element
-                    svgWrapper = document.createElementNS(SVG_NS, &quot;g&quot;);
-                }
-                
-                // ... append the current element to the &lt;defs&gt; element
-                exports.idLayerList.push(svgElement.getAttribute(&quot;id&quot;));
-            }
-            else if (DRAWABLE_TAGS.indexOf(svgElement.localName.toLowerCase()) !== -1) {
-                // If the current element is not a referenced layer
-                // and is drawable, move it to the current wrapper element
-                svgRoot.removeChild(svgElement);
-                svgWrapper.appendChild(svgElement);
-            }
-        });
-
-        // Append last wrapper if needed
-        if (svgWrapper.firstChild) {
-            svgWrapper.setAttribute(&quot;id&quot;, &quot;sozi-wrapper-&quot; + svgElementList.length);
-            exports.idLayerList.push(&quot;sozi-wrapper-&quot; + svgElementList.length);
-            svgRoot.appendChild(svgWrapper);
-        }
-
-        
-        // Analyze &lt;frame&gt; elements sorted by sequence number
-        var soziFrameList = Array.prototype.slice.call(document.getElementsByTagNameNS(SOZI_NS, &quot;frame&quot;));
-        soziFrameList.sort(
-            function (a, b) {
-                var seqA = parseInt(readAttribute(a, &quot;sequence&quot;), 10);
-                var seqB = parseInt(readAttribute(b, &quot;sequence&quot;), 10)
-                return seqA - seqB;
-            }
-        );
-        
-        soziFrameList.forEach(function (soziFrame, indexFrame) {
-            var newFrame = {
-                id: soziFrame.getAttribute(&quot;id&quot;),
-                title: readAttribute(soziFrame, &quot;title&quot;),
-                showInFrameList: readAttribute(soziFrame, &quot;show-in-frame-list&quot;) === &quot;true&quot;,
-                sequence: parseInt(readAttribute(soziFrame, &quot;sequence&quot;), 10),
-                timeoutEnable: readAttribute(soziFrame, &quot;timeout-enable&quot;) === &quot;true&quot;,
-                timeoutMs: parseInt(readAttribute(soziFrame, &quot;timeout-ms&quot;), 10),
-                transitionDurationMs: parseInt(readAttribute(soziFrame, &quot;transition-duration-ms&quot;), 10),
-                states: {}
-            };
-
-            // Get the default properties for all layers, either from
-            // the current &lt;frame&gt; element or from the corresponding
-            // layer in the previous frame.
-            // Those properties can later be overriden by &lt;layer&gt; elements
-            exports.idLayerList.forEach(function (idLayer) {
-                if (indexFrame === 0 || idLayer.search(&quot;sozi-wrapper-[0-9]+&quot;) !== -1) {
-                    // In the first frame, or in wrapper layers,
-                    // read layer attributes from the &lt;frame&gt; element
-                    readStateForLayer(newFrame, idLayer, soziFrame);
-                }
-                else {
-                    // After the first frame, in referenced layers,
-                    // copy attributes from the corresponding layer in the previous frame
-                    var currentState = newFrame.states[idLayer] = sozi.display.CameraState.instance();
-                    var previousState = exports.frames[exports.frames.length - 1].states[idLayer];
-                    currentState.setAtState(previousState);
-                }
-            });
-
-            // Collect and analyze &lt;layer&gt; elements in the current &lt;frame&gt; element
-            var soziLayerList = Array.prototype.slice.call(soziFrame.getElementsByTagNameNS(SOZI_NS, &quot;layer&quot;));
-            soziLayerList.forEach(function (soziLayer) {
-                var idLayer = soziLayer.getAttributeNS(SOZI_NS, &quot;group&quot;);
-                if (idLayer &amp;&amp; exports.idLayerList.indexOf(idLayer) !== -1) {
-                    readStateForLayer(newFrame, idLayer, soziLayer);
-                }
-            });
-            
-            // If the &lt;frame&gt; element has at least one valid layer,
-            // add it to the frame list
-            for (var idLayer in newFrame.states) {
-                if (newFrame.states.hasOwnProperty(idLayer)) {
-                    exports.frames.push(newFrame);
-                    break;
-                }
-            }
-        });
-    }
-
-    /**
-     * Return the frame with the given id.
-     *
-     * @return The index of the frame with the given id. -1 if not found.
-     */
-    exports.getFrameIndexForId = function (idFrame) {
-        for (var indexFrame = 0; indexFrame &lt; exports.frames.length; indexFrame += 1) {
-            if (exports.frames[indexFrame].id === idFrame) {
-                return indexFrame;
-            }
-        }
-        return - 1;
-    };
-    
-    /*
-     * Event handler: document load.
-     *
-     * This function reads the frames from the document and fires
-     * the &quot;documentready&quot; event.
-     *
-     * @depend events.js
-     */
-    function onLoad() {
-        document.documentElement.removeAttribute(&quot;viewBox&quot;);
-        readFrames();
-        sozi.events.fire(&quot;sozi.document.ready&quot;);
-    }
-
-    window.addEventListener(&quot;load&quot;, onLoad, false);
-});
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.framelist
- * @namespace Show the frame list.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.framelist&quot;, function (exports, window) {
-    &quot;use strict&quot;;
-    
-    // An alias to the global document object
-	var document = window.document;
-	
-    // Constant: the margin around the text of the frame list
-    var MARGIN = 5;
-    
-	// The SVG group that will contain the frame list
-    var svgTocGroup;
-    
-    // The SVG group that will contain the frame titles
-    var svgTitlesGroup;
-    
-    // The current height of the frame list,
-    // computed during the initialization
-    var tocHeight = 0;
-    
-    // The X coordinate of the frame list in its hidden state
-    var translateXHidden;
-    
-    // The X coordinate of the frame list when it is completely visible
-    var translateXVisible;
-    
-    // The initial X coordinate of the frame list before starting an animation.
-    // This variable is set before showing/hiding the frame list.
-    var translateXStart;
-    
-    // The final X coordinate of the frame list for the starting animation.
-    // This variable is set before showing/hiding the frame list.
-    var translateXEnd;
-    
-    // The current X coordinate of the frame list for the running animation.
-    // This variable is updated on each animation step.
-    var translateX;
-    
-    // The animator object that will manage animations of the frame list
-    var animator;
-    
-    // Constant: the duration of the showing/hiding animation, in milliseconds
-    var ANIMATION_TIME_MS = 300;
-    
-    // Constant: the acceleration profile of the showing/hiding animation
-    var ANIMATION_PROFILE = &quot;decelerate&quot;;
-    
-    // Constant: the SVG namespace
-    var SVG_NS = &quot;http://www.w3.org/2000/svg&quot;;
-
-	function onMouseOut(evt) {
-        var rel = evt.relatedTarget,
-            svgRoot = document.documentElement;
-        while (rel &amp;&amp; rel !== svgTocGroup &amp;&amp; rel !== svgRoot) {
-            rel = rel.parentNode;
-        }
-        if (rel !== svgTocGroup) {
-            exports.hide();
-            sozi.player.restart();
-            evt.stopPropagation();
-        }
-    }
-
-	function onClickArrowUp(evt) {
-        var ty = svgTitlesGroup.getCTM().f;
-        if (ty &lt;= -window.innerHeight / 2) {
-            ty += window.innerHeight / 2;
-        } else if (ty &lt; 0) {
-            ty = 0;
-        }
-        svgTitlesGroup.setAttribute(&quot;transform&quot;, &quot;translate(0,&quot; + ty + &quot;)&quot;);
-        evt.stopPropagation();
-	}
-
-	function onClickArrowDown(evt) {
-        var ty = svgTitlesGroup.getCTM().f;
-        if (ty + tocHeight &gt;= window.innerHeight * 3 / 2) {
-            ty -= window.innerHeight / 2;
-        } else if (ty + tocHeight &gt; window.innerHeight + 2 * MARGIN) {
-            ty = window.innerHeight - tocHeight - 4 * MARGIN;
-        }
-        svgTitlesGroup.setAttribute(&quot;transform&quot;, &quot;translate(0,&quot; + ty + &quot;)&quot;);
-        evt.stopPropagation();
-    }
-
-    /*
-     * Create a function that responds to clicks on frame list entries.
-     */
-    function makeClickHandler(index) {
-        return function (evt) {
-            sozi.player.previewFrame(index);
-            evt.stopPropagation();
-        };
-    }
-    
-    /*
-     * The default event handler, to prevent event propagation
-     * through the frame list.
-     */
-    function defaultEventHandler(evt) {
-	    evt.stopPropagation();
-    }
-    
-    /*
-     * Adds a table of contents to the document.
-     *
-     * The table of contents is a rectangular region with the list of frame titles.
-     * Clicking on a title moves the presentation to the corresponding frame.
-     *
-     * The table of contents is hidden by default.
-     */
-    function onPlayerReady() {
-        svgTocGroup = document.createElementNS(SVG_NS, &quot;g&quot;);
-        svgTocGroup.setAttribute(&quot;id&quot;, &quot;sozi-toc&quot;);
-        document.documentElement.appendChild(svgTocGroup);
-
-        svgTitlesGroup = document.createElementNS(SVG_NS, &quot;g&quot;);
-        svgTocGroup.appendChild(svgTitlesGroup);
-    
-        // The background rectangle of the frame list
-        var tocBackground = document.createElementNS(SVG_NS, &quot;rect&quot;);
-        tocBackground.setAttribute(&quot;id&quot;, &quot;sozi-toc-background&quot;);
-        tocBackground.setAttribute(&quot;x&quot;, MARGIN);
-        tocBackground.setAttribute(&quot;y&quot;, MARGIN);
-        tocBackground.setAttribute(&quot;rx&quot;, MARGIN);
-        tocBackground.setAttribute(&quot;ry&quot;, MARGIN);
-        tocBackground.addEventListener(&quot;click&quot;, defaultEventHandler, false);
-        tocBackground.addEventListener(&quot;mousedown&quot;, defaultEventHandler, false);
-        tocBackground.addEventListener(&quot;mouseout&quot;, onMouseOut, false);
-        svgTitlesGroup.appendChild(tocBackground);
-
-        var tocWidth = 0;
-        sozi.document.frames.forEach(function (frame, frameIndex) {
-            if (frame.showInFrameList) {
-                var text = document.createElementNS(SVG_NS, &quot;text&quot;);
-                text.appendChild(document.createTextNode(frame.title));
-                text.setAttribute(&quot;id&quot;, &quot;sozi-toc-&quot; + frame.id);
-                svgTitlesGroup.appendChild(text);
-    
-                if (frameIndex === sozi.player.currentFrameIndex) {
-                    text.setAttribute(&quot;class&quot;, &quot;sozi-toc-current&quot;);
-                }
-                         
-                var textWidth = text.getBBox().width;
-                tocHeight += text.getBBox().height;
-                if (textWidth &gt; tocWidth) {
-                    tocWidth = textWidth;
-                }
-    
-                text.setAttribute(&quot;x&quot;, 2 * MARGIN);
-                text.setAttribute(&quot;y&quot;, tocHeight + MARGIN);
-                text.addEventListener(&quot;click&quot;, makeClickHandler(frameIndex), false);
-                text.addEventListener(&quot;mousedown&quot;, defaultEventHandler, false);
-            }
-        });
-
-        // The &quot;up&quot; button
-        var tocUp = document.createElementNS(SVG_NS, &quot;path&quot;);
-        tocUp.setAttribute(&quot;class&quot;, &quot;sozi-toc-arrow&quot;);
-        tocUp.setAttribute(&quot;d&quot;, &quot;M&quot; + (tocWidth + 3 * MARGIN) + &quot;,&quot; + (5 * MARGIN) +
-                           &quot; l&quot; + (4 * MARGIN) + &quot;,0&quot; +
-                           &quot; l-&quot; + (2 * MARGIN) + &quot;,-&quot; + (3 * MARGIN) +
-                           &quot; z&quot;);
-        tocUp.addEventListener(&quot;click&quot;, onClickArrowUp, false);
-        tocUp.addEventListener(&quot;mousedown&quot;, defaultEventHandler, false);
-        svgTocGroup.appendChild(tocUp);
-
-        // The &quot;down&quot; button
-        var tocDown = document.createElementNS(SVG_NS, &quot;path&quot;);
-        tocDown.setAttribute(&quot;class&quot;, &quot;sozi-toc-arrow&quot;);
-        tocDown.setAttribute(&quot;d&quot;, &quot;M&quot; + (tocWidth + 3 * MARGIN) + &quot;,&quot; + (7 * MARGIN) +
-                             &quot; l&quot; + (4 * MARGIN) + &quot;,0&quot; +
-                             &quot; l-&quot; + (2 * MARGIN) + &quot;,&quot; + (3 * MARGIN) +
-                             &quot; z&quot;);
-        tocDown.addEventListener(&quot;click&quot;, onClickArrowDown, false);
-        tocDown.addEventListener(&quot;mousedown&quot;, defaultEventHandler, false);
-        svgTocGroup.appendChild(tocDown);
-
-        tocBackground.setAttribute(&quot;width&quot;, tocWidth + 7 * MARGIN);
-        tocBackground.setAttribute(&quot;height&quot;, tocHeight + 2 * MARGIN);
-        
-        translateXHidden = -tocWidth - 9 * MARGIN;
-        translateXVisible = 0;
-        translateX = translateXEnd = translateXHidden;
-        
-        svgTocGroup.setAttribute(&quot;transform&quot;, &quot;translate(&quot; + translateXHidden + &quot;,0)&quot;);
-        animator = sozi.animation.Animator.instance().augment({
-            onStep: function (progress) {
-                var profileProgress = sozi.animation.profiles[ANIMATION_PROFILE](progress),
-                    remaining = 1 - profileProgress;
-                translateX = translateXEnd * profileProgress + translateXStart * remaining;
-                svgTocGroup.setAttribute(&quot;transform&quot;, &quot;translate(&quot; + translateX + &quot;,0)&quot;);
-            }
-        });
-    }
-
-	/*
-	 * Highlight the current frame title in the frame list.
-	 *
-	 * This handler is called on each frame change,
-	 * even when the frame list is hidden.
-	 */
-    function onFrameChange(index) {
-        var currentElementList = Array.prototype.slice.call(document.getElementsByClassName(&quot;sozi-toc-current&quot;));
-        currentElementList.forEach(function (svgElement) {
-            svgElement.removeAttribute(&quot;class&quot;);
-        });
-
-        var frame = sozi.document.frames[index];
-        if (frame.showInFrameList) {
-            document.getElementById(&quot;sozi-toc-&quot; + frame.id).setAttribute(&quot;class&quot;, &quot;sozi-toc-current&quot;);
-        }
-    }
-    
-    /*
-     * Makes the table of contents visible.
-     */
-    exports.show = function () {
-        // Bring frame list to front
-        document.documentElement.appendChild(svgTocGroup);
-        
-        translateXStart = translateX;
-        translateXEnd = translateXVisible;
-        animator.start(ANIMATION_TIME_MS); // FIXME depends on current elapsed time
-    };
-
-    /*
-     * Makes the table of contents invisible.
-     */
-    exports.hide = function () {
-        translateXStart = translateX;
-        translateXEnd = translateXHidden;
-        animator.start(ANIMATION_TIME_MS); // FIXME depends on current elapsed time
-    };
-
-    /*
-     * Returns true if the table of contents is visible, false otherwise.
-     */
-    exports.isVisible = function () {
-        return translateXEnd === translateXVisible;
-    };
-
-    // @depend events.js
-	sozi.events.listen(&quot;sozi.player.ready&quot;, onPlayerReady);
-	sozi.events.listen(&quot;sozi.player.cleanup&quot;, exports.hide);
-	sozi.events.listen(&quot;sozi.player.framechange&quot;, onFrameChange);
-});
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.framenumber
- * @namespace Show the frame number.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.framenumber&quot;, function (exports, window) {
-    &quot;use strict&quot;;
-    
-    // An alias to the global document object
-    var document = window.document;
-    
-    // The SVG group containing the frame number
-    var svgGroup;
-    
-    // The SVG text element and its text node containing the frame number
-    var svgText, svgTextNode;
-    
-    // The SVG circle enclosing the frame number
-    var svgCircle;
-    
-    // Constant: the SVG namespace
-    var SVG_NS = &quot;http://www.w3.org/2000/svg&quot;;
-    
-    function adjust() {
-        var textBBox = svgText.getBBox(),
-            d = Math.max(textBBox.width, textBBox.height) * 0.75,
-            t = d * 1.25;
-        svgCircle.setAttribute(&quot;r&quot;, d);
-        svgGroup.setAttribute(&quot;transform&quot;, &quot;translate(&quot; + t + &quot;,&quot; + t + &quot;)&quot;);
-    }
-    
-    function onPlayerReady() {
-        svgGroup = document.createElementNS(SVG_NS, &quot;g&quot;);
-        svgText = document.createElementNS(SVG_NS, &quot;text&quot;);
-        svgCircle = document.createElementNS(SVG_NS, &quot;circle&quot;);
-        
-        svgGroup.setAttribute(&quot;id&quot;, &quot;sozi-framenumber&quot;);
-
-        svgCircle.setAttribute(&quot;cx&quot;, 0);
-        svgCircle.setAttribute(&quot;cy&quot;, 0);
-        svgGroup.appendChild(svgCircle);
-        
-        svgTextNode = document.createTextNode(sozi.player.currentFrameIndex + 1);
-        svgText.setAttribute(&quot;text-anchor&quot;, &quot;middle&quot;);
-        svgText.setAttribute(&quot;dominant-baseline&quot;, &quot;central&quot;);
-        svgText.setAttribute(&quot;x&quot;, 0);
-        svgText.setAttribute(&quot;y&quot;, 0);
-        svgText.appendChild(svgTextNode);
-        svgGroup.appendChild(svgText);
-        
-        document.documentElement.appendChild(svgGroup);
-        
-        adjust();
-    }
-
-    function onFrameChange(index) {
-        svgTextNode.nodeValue = index + 1;
-    }
-    
-    // @depend events.js
-	sozi.events.listen(&quot;sozi.player.ready&quot;, onPlayerReady);
-	sozi.events.listen(&quot;sozi.player.framechange&quot;, onFrameChange);
-});
-
-/*
-* Sozi - A presentation tool using the SVG standard
-*
-* Copyright (C) 2010-2013 Guillaume Savaton
-*
-* This program is dual licensed under the terms of the MIT license
-* or the GNU General Public License (GPL) version 3.
-* A copy of both licenses is provided in the doc/ folder of the
-* official release of Sozi.
-*
-* See http://sozi.baierouge.fr/wiki/en:license for details.
-*/
-
-/**
- * @name sozi.links
- * @namespace Links fix for Webkit.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.links&quot;, function (exports, window) {
-    &quot;use strict&quot;;
-    
-    var SVG_NS = &quot;http://www.w3.org/2000/svg&quot;;
-    var XLINK_NS = &quot;http://www.w3.org/1999/xlink&quot;;
-    
-    function getClickHandler(index) {
-        return function (evt) {
-            sozi.player.moveToFrame(index);
-            evt.preventDefault();
-            evt.stopPropagation();
-        };
-    }
-    
-    /*
-     * Event handler: document ready.
-     *
-     * This function adds an event listener to each internal link.
-     * Clicking on a link that targets a frame of this document
-     * will call sozi.player.moveToFrame().
-     */
-    function onDocumentReady() {
-        var links = window.document.getElementsByTagNameNS(SVG_NS, &quot;a&quot;);
-        for (var i = 0; i &lt; links.length; i += 1) {
-            var href = links[i].getAttributeNS(XLINK_NS, &quot;href&quot;);
-            if (href &amp;&amp; href[0] === &quot;#&quot;) {
-                links[i].addEventListener(&quot;click&quot;, getClickHandler(sozi.location.getFrameIndexForHash(href)), false);
-            }
-        }
-    }
-
-    sozi.events.listen(&quot;sozi.document.ready&quot;, onDocumentReady); // @depend events.js
-});
-
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.location
- * @namespace Manage the URL in the address bar of the browser window.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.location&quot;, function (exports, window) {
-    &quot;use strict&quot;;
-    
-    var changedFromWithin = false;
-
-    /*
-     * Returns the frame index corresponding to the URL hash.
-     *
-     * This is a shortcut for sozi.location.getFrameIndexForHash(window.location.hash)
-     */
-    exports.getFrameIndex = function () {
-        return exports.getFrameIndexForHash(window.location.hash);
-    };
-    
-    /*
-     * Returns the frame index corresponding to the given URL hash.
-     *
-     * The URL hash can be either a frame index or a frame id.
-     * In the URL, the frame index starts a 1.
-     * This method converts it into a 0-based index.
-     *
-     * If the URL hash is not a positive integer, then 0 is returned.
-     * It the URL hash is an integer greater than the last frame index, then
-     * the last frame index is returned.
-     */
-    exports.getFrameIndexForHash = function (hash) {
-        var indexOrId = hash ? hash.slice(1) : &quot;1&quot;;
-        var index;
-        if (/^[0-9]+$/.test(indexOrId)) {
-            index = parseInt(indexOrId, 10) - 1;
-        }
-        else {
-            index = sozi.document.getFrameIndexForId(indexOrId);
-        }
-        
-        if (index &lt; 0) {
-            return 0;
-        }
-        else if (index &gt;= sozi.document.frames.length) {
-            return sozi.document.frames.length - 1;
-        }
-        else {
-            return index;
-        }
-    };
-
-    /*
-     * Event handler: hash change.
-     *
-     * This function is called when the URL hash is changed.
-     * If the hash was changed manually in the address bar, and if it corresponds to
-     * a valid frame number, then the presentation moves to that frame.
-     *
-     * The hashchange event can be triggered externally, by the user modifying the URL,
-     * or internally, by the script modifying window.location.hash.
-     */
-    function onHashChange() {
-        var index = exports.getFrameIndex();
-        if (!changedFromWithin) {
-            sozi.player.moveToFrame(index);
-        }
-        changedFromWithin = false;
-    }
-    
-    /*
-     * Event handler: frame change.
-     *
-     * This function is called when the presentation has reached a new frame.
-     * The URL hash is set to the current frame id.
-     */
-    function onFrameChange(index) {
-        changedFromWithin = true;
-        window.location.hash = &quot;#&quot; + sozi.document.frames[index].id;
-    }
-
-    window.addEventListener(&quot;hashchange&quot;, onHashChange, false);
-    sozi.events.listen(&quot;sozi.player.framechange&quot;, onFrameChange); // @depend events.js
-});
-
-/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- *
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-/**
- * @name sozi.player
- * @namespace Presentation player.
- * @depend namespace.js
- */
-namespace(this, &quot;sozi.player&quot;, function (exports, window) {
-    &quot;use strict&quot;;
-    
-    var viewPort;
-    
-    // The animator object used to animate transitions
-    var animator;
-    
-    // The handle returned by setTimeout() for frame timeout
-    var nextFrameTimeout;
-    
-    // Constants: default animation properties
-    // for out-of-sequence transitions
-    var DEFAULT_DURATION_MS = 500;
-    var DEFAULT_ZOOM_PERCENT = -10;
-    var DEFAULT_PROFILE = &quot;linear&quot;;
-    
-    // The source frame index for the current transition
-    var sourceFrameIndex = 0;
-    
-    // The index of the visible frame
-    exports.currentFrameIndex = 0;
-    
-    // The state of the presentation.
-    // If false, no automatic transition will be fired.
-    var playing = false;
-    
-    // The state of the current frame.
-    // If true, an automatic transition will be fired after the current timeout.
-    var waiting = false;
-
-    /*
-     * Starts waiting before moving to the next frame.
-     *
-     * It the current frame has a timeout set, this method
-     * will register a timer to move to the next frame automatically
-     * after the specified time.
-     *
-     * If the current frame is the last, the presentation will
-     * move to the first frame.
-     */
-    function waitTimeout() {
-        if (sozi.document.frames[exports.currentFrameIndex].timeoutEnable) {
-            waiting = true;
-            var index = (exports.currentFrameIndex + 1) % sozi.document.frames.length;
-            nextFrameTimeout = window.setTimeout(function () {
-                    exports.moveToFrame(index);
-                },
-                sozi.document.frames[exports.currentFrameIndex].timeoutMs
-            );
-        }
-    }
-
-    /*
-     * Starts the presentation from the given frame index (0-based).
-     *
-     * This method sets the &quot;playing&quot; flag, shows the desired frame
-     * and calls waitTimeout.
-     */
-    exports.startFromIndex = function (index) {
-        playing = true;
-        waiting = false;
-        sourceFrameIndex = index;
-        exports.currentFrameIndex = index;
-        viewPort.showFrame(sozi.document.frames[index]);
-        waitTimeout();
-    };
-
-    exports.restart = function () {
-        exports.startFromIndex(exports.currentFrameIndex);
-    };
-
-    /*
-     * Stops the presentation.
-     *
-     * This method clears the &quot;playing&quot;.
-     * If the presentation was in &quot;waiting&quot; mode due to a timeout
-     * in the current frame, then it stops waiting.
-     * The current animation is stopped in its current state.
-     */
-    exports.stop = function () {
-        animator.stop();
-        if (waiting) {
-            window.clearTimeout(nextFrameTimeout);
-            waiting = false;
-        }
-        playing = false;
-        sourceFrameIndex = exports.currentFrameIndex;
-    };
-
-    function getZoomData(zoomPercent, s0, s1) {
-        var result = {
-            ss: ((zoomPercent &lt; 0) ? Math.max(s0, s1) : Math.min(s0, s1)) * (100 - zoomPercent) / 100,
-            ts: 0.5,
-            k: 0
-        };
-
-        if (zoomPercent !== 0) {
-            var a = s0 - s1;
-            var b = s0 - result.ss;
-            var c = s1 - result.ss;
-
-            if (a !== 0) {
-                var d = Math.sqrt(b * c);
-
-                var u = (b - d) / a;
-                var v = (b + d) / a;
-
-                result.ts = (u &gt; 0 &amp;&amp; u &lt;= 1) ? u : v;
-            }
-
-            result.k = b / result.ts / result.ts;
-        }
-
-        return result;
-    }
-
-    /*
-     * Jump to a frame with the given index (0-based).
-     *
-     * This method does not animate the transition from the current
-     * state of the display to the desired frame.
-     *
-     * The presentation is stopped: if a timeout has been set for the
-     * target frame, it will be ignored.
-     *
-     * The URL hash is set to the given frame index (1-based).
-     */
-    exports.jumpToFrame = function (index) {
-        exports.stop();
-        sozi.events.fire(&quot;sozi.player.cleanup&quot;);
-
-        sourceFrameIndex = index;
-        exports.currentFrameIndex = index;
-        viewPort.showFrame(sozi.document.frames[index]);
-
-        sozi.events.fire(&quot;sozi.player.framechange&quot;, index);
-    };
-
-    /*
-     * Returns an associative array where keys are layer names
-     * and values are objects in the form { initialState: finalState: profile: zoomWidth: zoomHeight:}
-     */
-    exports.getAnimationData = function (initialState, finalState, zoomPercent, profile, useTransitionPath, reverseTransitionPath) {
-        var data = {};
-        
-        for (var idLayer in initialState) {
-            data[idLayer] = {
-                initialState: sozi.display.CameraState.instance(),
-                finalState: sozi.display.CameraState.instance(),
-                useTransitionPath: useTransitionPath,
-                reverseTransitionPath: reverseTransitionPath
-            };
-            
-            data[idLayer].profile = profile || finalState[idLayer].transitionProfile;
-            data[idLayer].initialState.setAtState(initialState[idLayer]);
-
-            // If the current layer is referenced in final state, copy the final properties
-            // else, copy initial state to final state for the current layer.
-            if (finalState.hasOwnProperty(idLayer)) {
-                data[idLayer].finalState.setAtState(finalState[idLayer]);
-            }
-            else {
-                data[idLayer].finalState.setAtState(initialState[idLayer]);
-            }
-
-            // Keep the smallest angle difference between initial state and final state
-            // TODO this should be handled in the interpolation function
-            if (data[idLayer].finalState.angle - data[idLayer].initialState.angle &gt; 180) {
-                data[idLayer].finalState.setRawAngle(data[idLayer].finalState.angle - 360);
-            }
-            else if (data[idLayer].finalState.angle - data[idLayer].initialState.angle &lt; -180) {
-                data[idLayer].initialState.setRawAngle(data[idLayer].initialState.angle - 360);
-            }
-
-            var zp = zoomPercent || finalState[idLayer].transitionZoomPercent;
-            
-            if (zp &amp;&amp; finalState.hasOwnProperty(idLayer)) {
-                data[idLayer].zoomWidth = getZoomData(zp,
-                    initialState[idLayer].width,
-                    finalState[idLayer].width);
-                data[idLayer].zoomHeight = getZoomData(zp,
-                    initialState[idLayer].height,
-                    finalState[idLayer].height);
-            }
-        }
-        return data;
-    };
-    
-    exports.previewFrame = function (index) {
-        exports.currentFrameIndex = index;
-        animator.start(DEFAULT_DURATION_MS,
-            exports.getAnimationData(viewPort.cameras, sozi.document.frames[index].states,
-                DEFAULT_ZOOM_PERCENT, sozi.animation.profiles[DEFAULT_PROFILE]),
-                false, false);
-        sozi.events.fire(&quot;sozi.player.framechange&quot;, index);
-    };
-
-    /*
-     * Moves to a frame with the given index (0-based).
-     *
-     * This method animates the transition from the current
-     * state of the display to the desired frame.
-     *
-     * If the given frame index corresponds to the next frame in the list,
-     * the transition properties of the next frame are used.
-     * Otherwise, default transition properties are used.
-     */
-    exports.moveToFrame = function (index) {
-        if (waiting) {
-            window.clearTimeout(nextFrameTimeout);
-            waiting = false;
-        }
-
-        var durationMs, zoomPercent, profile, useTransitionPath, reverseTransitionPath;
-        if (index === (exports.currentFrameIndex - 1) % sozi.document.frames.length) {
-            durationMs = sozi.document.frames[exports.currentFrameIndex].transitionDurationMs;
-            zoomPercent = undefined; // Set for each layer
-            profile = undefined; // Set for each layer
-            useTransitionPath = true;
-            reverseTransitionPath = true;
-        }
-        else if (index === (exports.currentFrameIndex + 1) % sozi.document.frames.length) {
-            durationMs = sozi.document.frames[index].transitionDurationMs;
-            zoomPercent = undefined; // Set for each layer
-            profile = undefined; // Set for each layer
-            useTransitionPath = true;
-            reverseTransitionPath = false;
-        }
-        else {
-            durationMs = DEFAULT_DURATION_MS;
-            zoomPercent = DEFAULT_ZOOM_PERCENT;
-            profile = sozi.animation.profiles[DEFAULT_PROFILE];
-            useTransitionPath = false;
-            reverseTransitionPath = false;
-        }
-
-        sozi.events.fire(&quot;sozi.player.cleanup&quot;);
-
-        playing = true;
-        exports.currentFrameIndex = index;
-
-        animator.start(durationMs, exports.getAnimationData(
-            viewPort.cameras, sozi.document.frames[index].states,
-            zoomPercent, profile,
-            useTransitionPath, reverseTransitionPath));
-
-        sozi.events.fire(&quot;sozi.player.framechange&quot;, index);
-    };
-
-    /**
-     * Jumps to the first frame of the presentation.
-     */
-    exports.jumpToFirst = function () {
-        exports.jumpToFrame(0);
-    };
-    
-    /**
-     * Moves to the first frame of the presentation.
-     */
-    exports.moveToFirst = function () {
-        exports.moveToFrame(0);
-    };
-
-    /**
-     * Jumps to the previous frame.
-     */
-    exports.jumpToPrevious = function () {
-        var index = exports.currentFrameIndex;
-        if (!animator.started || sourceFrameIndex &lt;= exports.currentFrameIndex) {
-            index -= 1;
-        }
-        if (index &gt;= 0) {
-            exports.jumpToFrame(index);
-        }
-    };
-
-    /*
-     * Moves to the previous frame.
-     */
-    exports.moveToPrevious = function () {
-        for (var index = exports.currentFrameIndex - 1; index &gt;= 0; index -= 1) {
-            var frame = sozi.document.frames[index];
-            if (!frame.timeoutEnable || frame.timeoutMs !== 0) {
-                exports.moveToFrame(index);
-                break;
-            }
-        }
-    };
-
-    /**
-     * Jumps to the next frame.
-     */
-    exports.jumpToNext = function () {
-        var index = exports.currentFrameIndex;
-        if (!animator.started || sourceFrameIndex &gt;= exports.currentFrameIndex) {
-            index += 1;
-        }
-        if (index &lt; sozi.document.frames.length) {
-            exports.jumpToFrame(index);
-        }
-    };
-
-    /**
-     * Moves to the next frame.
-     */
-    exports.moveToNext = function () {
-        if (exports.currentFrameIndex &lt; sozi.document.frames.length - 1 || sozi.document.frames[exports.currentFrameIndex].timeoutEnable) {
-            exports.moveToFrame((exports.currentFrameIndex + 1) % sozi.document.frames.length);
-        }
-    };
-
-    /**
-     * Jumps to the last frame of the presentation.
-     */
-    exports.jumpToLast = function () {
-        exports.jumpToFrame(sozi.document.frames.length - 1);
-    };
-
-    /**
-     * Moves to the last frame of the presentation.
-     */
-    exports.moveToLast = function () {
-        exports.moveToFrame(sozi.document.frames.length - 1);
-    };
-
-    /*
-     * Restores the current frame.
-     *
-     * This method restores the display to fit the current frame,
-     * e.g. after the display has been zoomed or dragged.
-     */
-    exports.moveToCurrent = function () {
-        exports.moveToFrame(exports.currentFrameIndex);
-    };
-
-    /*
-     * Shows all the document in the browser window.
-     */
-    exports.showAll = function () {
-        exports.stop();
-        sozi.events.fire(&quot;sozi.player.cleanup&quot;);
-        animator.start(DEFAULT_DURATION_MS,
-            exports.getAnimationData(viewPort.cameras, viewPort.getDocumentState(),
-                DEFAULT_ZOOM_PERCENT, sozi.animation.profiles[DEFAULT_PROFILE],
-                false, false
-            )
-        );
-    };
-
-    /*
-     * Event handler: display ready.
-     */
-    function onDisplayReady() {
-        viewPort = sozi.display.ViewPort.instance(&quot;player&quot;, sozi.document.idLayerList, true);
-        
-        exports.startFromIndex(sozi.location.getFrameIndex());
-
-        // Hack to fix the blank screen bug in Chrome/Chromium
-        // See https://github.com/senshu/Sozi/issues/109
-        window.setTimeout(viewPort.bind(viewPort.update), 1);
-        
-        sozi.events.fire(&quot;sozi.player.ready&quot;);
-    }
-
-    // TODO move the zoom code to display.js
-    exports.onAnimationStep = function (progress, data) {
-        for (var idLayer in data) {
-            var camera = viewPort.cameras[idLayer];
-            
-            camera.interpolate(
-                data[idLayer].initialState,
-                data[idLayer].finalState,
-                data[idLayer].profile(progress),
-                data[idLayer].useTransitionPath,
-                data[idLayer].reverseTransitionPath
-            );
-
-            var ps;
-            if (data[idLayer].zoomWidth &amp;&amp; data[idLayer].zoomWidth.k !== 0) {
-                ps = progress - data[idLayer].zoomWidth.ts;
-                camera.width = data[idLayer].zoomWidth.k * ps * ps + data[idLayer].zoomWidth.ss;
-            }
-
-            if (data[idLayer].zoomHeight &amp;&amp; data[idLayer].zoomHeight.k !== 0) {
-                ps = progress - data[idLayer].zoomHeight.ts;
-                camera.height = data[idLayer].zoomHeight.k * ps * ps + data[idLayer].zoomHeight.ss;
-            }
-
-            camera.setClipped(data[idLayer].finalState.clipped);
-        }
-
-        viewPort.update();
-    };
-    
-    /**
-     * @depend animation.js
-     */
-    animator = sozi.animation.Animator.instance().augment({
-        /*
-         * Event handler: animation step.
-         *
-         * This method is called periodically by animator after the animation
-         * has been started, and until the animation time is elapsed.
-         *
-         * Parameter data provides the following information:
-         *    - initialState and finalState contain the geometrical properties of the display
-         *      at the start and end of the animation.
-         *    - profile is a reference to the speed profile function to use.
-         *    - zoomWidth and zoomHeight are the parameters of the zooming polynomial if the current
-         *      animation has a non-zero zooming effect.
-         *
-         * Parameter progress is a float number between 0 (start of the animation)
-         * and 1 (end of the animation).
-         */
-        onStep: function (progress) {
-            exports.onAnimationStep(progress, this.data);
-        },
-        
-        /*
-         * Event handler: animation done.
-         *
-         * This method is called by animator when the current animation is finished.
-         *
-         * If the animation was a transition in the normal course of the presentation,
-         * then we call the waitTimeout method to process the timeout property of the current frame.
-         */
-        onDone: function () {
-            for (var idLayer in this.data) {
-                viewPort.cameras[idLayer].setAtState(this.data[idLayer].finalState);
-            }
-
-            viewPort.update();
-
-            sourceFrameIndex = exports.currentFrameIndex;
-
-            if (playing) {
-                waitTimeout();
-            }
-        }
-    });
-
-    sozi.events.listen(&quot;sozi.display.ready&quot;, onDisplayReady); // @depend events.js
-});
-
-/*
-    @depend framenumber.js
-    @depend framelist.js
-    @depend actions.js
-    @depend player.js
-    @depend display.js
-    @depend document.js
-    @depend location.js
-    @depend links.js
-*/
-</script>
-  <style
-     id="sozi-style"
-     ns1:version="13.11-30213629">/*
- * Sozi - A presentation tool using the SVG standard
- *
- * Copyright (C) 2010-2013 Guillaume Savaton
- *
- * This program is dual licensed under the terms of the MIT license
- * or the GNU General Public License (GPL) version 3.
- * A copy of both licenses is provided in the doc/ folder of the
- * official release of Sozi.
- * 
- * See http://sozi.baierouge.fr/wiki/en:license for details.
- */
-
-#sozi-toc text {
-   fill: #eff;
-   font-family: Verdana, sans-serif;
-   font-size: 12pt;
-}
-
-#sozi-toc text:hover {
-   fill: #0cf;
-   cursor: pointer;
-}
-
-#sozi-toc text.sozi-toc-current {
-   fill: #fa4;
-}
-
-#sozi-toc-background {
-   stroke: #222;
-   stroke-opacity: 0.1;
-   stroke-width: 10;
-   fill: #222;
-   fill-opacity: 0.9;
-}
-
-.sozi-toc-arrow {
-   fill: #eff;
-   fill-opacity: 0.75;
-   stroke: none;
-}
-
-.sozi-toc-arrow:hover {
-   fill: #0cf;
-}
-
-#sozi-framenumber circle {
-   stroke: #222;
-   stroke-opacity: 0.1;
-   stroke-width: 4;
-   fill: #222;
-   fill-opacity: 0.9;
-}
-
-#sozi-framenumber text {
-   fill: #eff;
-   font-family: Verdana, sans-serif;
-   font-size: 12pt;
-}
-</style>
-</svg>

+ 0 - 23
2d3d/extrusion-joint.json

@@ -1,23 +0,0 @@
-{
-    "parameterSets": {
-        "D45-R25": {
-            "$fn": "60",
-            "Fuehrung": "1.5",
-            "Kippen": "true",
-            "Radius": "25",
-            "Raster": "20",
-            "Schraube": "5",
-            "Winkel": "45"
-        },
-        "D135-R5": {
-            "$fn": "60",
-            "Fuehrung": "1.5",
-            "Kippen": "true",
-            "Radius": "5",
-            "Raster": "20",
-            "Schraube": "5",
-            "Winkel": "135"
-        }
-    },
-    "fileFormatVersion": "1"
-}

+ 0 - 74
2d3d/extrusion-joint.scad

@@ -1,74 +0,0 @@
-
-/* [OpenSCAD] */
-$fn=60; // [30:6:180]
-
-/* [Profil] */
-
-// Aluprofil (quadratisch)
-Raster = 20; // [20,30]
-// Gewindebohrung metrisch
-Schraube = 5; // [5,6,8]
-
-/* [Verbinder] */
-// Winkel der Verbindung
-Winkel = 90; // [30:5:180]
-// Radius, um die Schrauben zu erreichen
-Radius = 0; // [0:1:50]
-// Modell für den Slicer auf die Seite legen
-Kippen = true;
-
-/* [Hidden] */
-
-// Montageplatte [Länge,Breite,Dicke]
-Montageplatte = [Raster*1.0,Raster,3];
-Fuehrung = 1.5;
-
-////////////////////////////////////////////////////////////////////////////////////////
-
-module grundplatte() {
-  Toleranz=0.2;
-  translate([ (Montageplatte.x/2+Radius),0,0])
-  difference() {
-    // Platte mit Bolzen
-    union() {
-      cube( [Montageplatte.x,Montageplatte.y,Montageplatte.z], center=true );
-      if (Radius==0) { // Seitenplatten innen rund verbinden
-        translate([-Montageplatte.x/2,0,0]) rotate([90,0,0]) cylinder( d=Montageplatte.z, h=Raster, center=true);
-      }
-      // zwei Führungsbolzen vorne und hinten
-      translate([(Montageplatte.x/2-Montageplatte.z),0,-(Montageplatte.z+Fuehrung)/2]) cube( [Schraube/2, Schraube-Toleranz, Fuehrung], center=true );
-      translate([-(Montageplatte.x/2-Montageplatte.z),0,-(Montageplatte.z+Fuehrung)/2]) cube( [Schraube/2, Schraube-Toleranz, Fuehrung], center=true );
-    }
-    // Langloch für Schraube
-    hull() {
-      translate([Montageplatte.z/2,0,0]) cylinder( d=Schraube+Toleranz, h=3*Montageplatte.z, center=true );
-      translate([-Montageplatte.z/2,0,0]) cylinder( d=Schraube+Toleranz, h=3*Montageplatte.z, center=true );
-    }
-  }
-}
-
-module seite() { 
-  hull() { 
-    translate([Montageplatte.x/2+Radius,0,0]) cube([Montageplatte.x,Montageplatte.z,Montageplatte.z], center=true );
-    rotate([0,-Winkel,0]) translate([Montageplatte.x/2+Radius,0,0]) cube([Montageplatte.x,Montageplatte.z,Montageplatte.z], center=true );
-  }
-}
-
-// Auf die Seite legen, dann wird es beim Slicen einfacher
-turn90degree=(Kippen==true)?90:0;
-rotate([turn90degree,0,0]) union() {
-  // Montageplatte 
-  color("red") grundplatte();
-  // innere Verbindung der beiden Grundplatten
-  color("green") hull() {
-    translate([ (Radius),0,0]) rotate([90,0,0]) cylinder( d=Montageplatte.z, h=Raster, center=true);
-    rotate([0,-Winkel,0]) translate([ (Radius),0,0]) rotate([90,0,0]) cylinder( d=Montageplatte.z, h=Raster, center=true);
-  }
-  // die andere Montageplatte, gedreht und gespiegelt
-  color("orange") rotate([0,-Winkel,0]) mirror([0,0,1]) grundplatte();
-  // beide Seitenteile
-  color("lightblue") union() {
-    translate([0,(Montageplatte.y-Montageplatte.z)/2,0]) seite();
-    translate([0,-(Montageplatte.y-Montageplatte.z)/2,0]) seite();
-  }
-}

+ 0 - 34
2d3d/inkscape.md

@@ -1,34 +0,0 @@
-# Inkscape Workshop
-
-# Agenda
-
-- Roomtour
-- Wichtige Konfiguration
-- Copypaste, Duplikate und Stempel
-- Path Math
-- Ausrichten und einrasten
-- Trampelpfade - Vektoren zu Fuß
-
-
-## Roomtour
-
-## Wichtige Konfiguration
-
-* Dokumenten Einstellung  
-  File > Document properties
-* Einstellung Schrittweiten  
-  Edit > Preferences
-
-## Copypaste, Duplikate und Stempel
-
-## Path Math
-
-## Ausrichten und einrasten
-* Hilfslinien anlegen und wieder löschen
-
-## Trampelpfade - Vektoren zu Fuß
-
-## Ideen
-
-* Hilfslinien anlegen und wieder löschen
-* Einstellung Schrittweiten

+ 0 - 33
2d3d/kocher-pressure.scad

@@ -1,33 +0,0 @@
-use <threads.scad>;
-$fn=90;
-
-Debug=false;
-Schnitt=false;
-
-/* [Hidden] */
-
-Inch=25.4;
-Delta=0.01;
-
-function sump(a,i) = (i==0)?a[0]:a[i]+sump(a,i-1);
-function sumt(a) = sump(a,len(a)-1);
-
-intersection() {
-  difference() {
-    L=[7,1.5,3];
-    echo(sum(L,len(L)-1));
-    // aussen
-    union() {
-      metric_thread(diameter=10.9, pitch=1, length=L[0], test=Debug);
-      translate([0,0,sump(L,0)]) cylinder(d=10, h=L[1]);
-      translate([0,0,sump(L,1)]) intersection() { 
-        R=13/sqrt(3);
-        cylinder(r=R, h=L[2], $fn=6);
-        cylinder(r=R-0.5, h=L[2]);
-      }
-    }
-    // innen
-    translate([0,0,-Delta]) metric_thread(diameter=0.305*Inch+0.15, pitch=Inch/32, length=sumt(L)+2*Delta, test=Debug);
-  }
-  translate([0,(Schnitt)?50:0,0]) cube(100, center=true);
-}

+ 0 - 58
2d3d/kocherdeckel.scad

@@ -1,58 +0,0 @@
-use <threads.scad>
-
-$fn=90;
-
-Delta = 0.01;
-Inch = 25.4;
-Gesamt_Hoehe = 15;
-Kompressor_Nippel = 8;
-
-//intersection() {
-  difference() {
-    union(){
-    
-      // Deckel mit Innengewinde
-      difference() {
-        union() {
-          cylinder(d=32, h=Gesamt_Hoehe-1, $fn=90);
-          translate([0,0,Gesamt_Hoehe-1]) hull() {
-            rotate_extrude() translate([30/2,0]) circle(d=2);
-          }
-        }
-        // Metric Thread 25.75x1
-        translate([0,0,-Delta]) 
-          metric_thread (diameter=25.75, pitch=1, length=Gesamt_Hoehe-4+2*Delta, internal=true, test=false);
-        translate([0,0,Gesamt_Hoehe-4]) 
-          cylinder(d=26, h=1);
-      }
-      
-      /*
-        Ansatz für Kompressor - Schrader valve: 
-        External 8V1 thread: 0.305 in (7.747 mm) x 32 TPI[3] (1⁄32 in or 0.7938 mm pitch) (Tap size: 8v1-32)
-        https://en.wikipedia.org/wiki/Schrader_valve
-      */
-      translate([0,0,Gesamt_Hoehe]) 
-        english_thread (diameter=0.305, threads_per_inch=32, length=Kompressor_Nippel/Inch, leadin=1);
-      
-      // for (i=[0:0.5:8]) translate([0,0,i]) hull() rotate_extrude() translate([(7.747-0.8)/2,0]) circle(d=1);
-      // "Rändelung" für mehr Grip
-      translate([0,0,7]) for (i=[0:40:360]) rotate([0,0,i]) translate([31/2,0,0]) hull() {
-        sphere(d=3, $fn=45);
-        translate([0,0,6]) sphere(d=3, $fn=45);
-      }
-      
-      // Ansatz ganz oben wegen Aufbauplatte/Harz/Bottom-Layer
-      translate([0,0,Gesamt_Hoehe+Kompressor_Nippel]) cylinder(d1=7, d2=6.5, h=0.5);
-    }
-    // Innenbohrung
-    cylinder(d=3, h=50, $fn=60, center=true);
-  }
-//  translate([0,50,0]) cube(100, center=true);
-//}
-
-// Test, ob das Gewinde passt
-*difference() {
-  cylinder(d=30, h=4);
-  // Metric Thread 25.75x1
-  translate([0,0,-Delta]) metric_thread (diameter=25.75, pitch=1, length=6, groove=true);
-}

+ 0 - 23
2d3d/quarto.scad

@@ -1,23 +0,0 @@
-// Quarto!
-
-/* [OpenSCAD] */
-$fn=36;
-
-/* [Quarto!] */
-Breite = 20;
-Hoehe_lang = 45;
-Hoehe_kurz = 30;
-
-/* [Hidden] */
-
-module eckig(height) {
-  eckradius = Breite/10;
-  hull() for ( i = [0,90,180,270] ) {
-    rotate([0,0,i]) translate([Breite/2, Breite/2, height/2]) cylinder(r=eckradius, h=height, center=true);
-  }
-}
-
-module rund(height) {
-}
-
-eckig(Hoehe_lang);

+ 0 - 40
2d3d/rohrreiniger.scad

@@ -1,40 +0,0 @@
-use <threads.scad>
-
-$fn=180;
-Delta = 0.01;
-Inch = 25.4;
-Gewinde=12;
-Bohrung=10;
-Kugel=25;
-
-module austritt() {
-	cylinder(d1=2, d2=2.5, h=15);
-}
-
-intersection() {
-	difference() {
-		union() {
-			// Duschkopf-Gewinde an Schlauch
-			english_thread (diameter=20/Inch, threads_per_inch=14, length=Gewinde/Inch, leadin=2, test=false);
-			// Außenform Oval
-			translate([0,0,Gewinde+25/2-2]) scale([1,1,1.5]) difference() {
-				sphere(d=Kugel);
-				// Ein Strahl zentral nach vorne
-				austritt();
-				// 5x Strahl nach schräg vorne
-				for(i=[0:360/5:360]) rotate([0,0,i]) rotate([45,0,0]) austritt();
-				// 6x breiter Strahl nach hinten
-				for(i=[0:360/8:360]) hull() {
-					rotate([0,0,i]) rotate([110,0,0]) austritt();
-					rotate([0,0,i+6]) rotate([110,0,0]) austritt();
-				}
-			}
-		}
-		// Innenbohrung
-		hull() {
-			translate([0,0,-Delta]) cylinder(d=Bohrung, h=Gewinde);
-			translate([0,0,Gewinde+Kugel*2/3]) sphere(d=Bohrung);
-		}
-	}
-	translate([0,0,0]) cube(100, center=true);
-}

+ 0 - 21
2d3d/scad-utils/LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2014 Oskar Linde
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 81
2d3d/scad-utils/README.md

@@ -1,81 +0,0 @@
-scad-utils
-==========
-
-Utility libraries for OpenSCAD
-
-Morphology
-----------
-
-contains basic 2D morphology operations
-
-    inset(d=1)             - creates a polygon at an offset d inside a 2D shape
-    outset(d=1)            - creates a polygon at an offset d outside a 2D shape
-    fillet(r=1)            - adds fillets of radius r to all concave corners of a 2D shape
-    rounding(r=1)          - adds rounding to all convex corners of a 2D shape
-    shell(d,center=false)  - makes a shell of width d along the edge of a 2D shape
-                           - positive values of d places the shell on the outside
-                           - negative values of d places the shell on the inside
-                           - center=true and positive d places the shell centered on the edge
-   
-   
-### Examples
-
-With a basic sample polygon shape,
-
-    module shape() {
-        polygon([[0,0],[1,0],[1.5,1],[2.5,1],[2,-1],[0,-1]]);
-    }
-
-and `$fn=32;`.
-
-
-* `inset(d=0.3) shape();`
-
-![](http://oskarlinde.github.io/scad-utils/img/morph-0.png)
-
-
-* `outset(d=0.3) shape();`
-
-![](http://oskarlinde.github.io/scad-utils/img/morph-1.png)
-
-
-* `rounding(r=0.3) shape();`
-
-![](http://oskarlinde.github.io/scad-utils/img/morph-2.png)
-
-
-* `fillet(r=0.3) shape();`
-
-![](http://oskarlinde.github.io/scad-utils/img/morph-3.png)
-
-
-*`shell(d=0.3) shape();`
-
-![](http://oskarlinde.github.io/scad-utils/img/morph-4.png)
-
-
-*`shell(d=-0.3) shape();`
-
-![](http://oskarlinde.github.io/scad-utils/img/morph-5.png)
-
-
-*`shell(d=0.3,center=true) shape();`
-
-![](http://oskarlinde.github.io/scad-utils/img/morph-6.png)
-
-
-Mirror
-------
-
-contains simple mirroring functions
-
-    mirror_x()
-    mirror_y()
-    mirror_z()
-    
-example:
-
-    module arrow(l=1,w=.6,t=0.15) {
-        mirror_y() polygon([[0,0],[l,0],[l-w/2,w/2],[l-w/2-sqrt(2)*t,w/2],[l-t/2-sqrt(2)*t,t/2],[0,t/2]]);
-    }
-

+ 0 - 324
2d3d/scad-utils/hull.scad

@@ -1,324 +0,0 @@
-
-// NOTE: this code uses
-//	* experimental let() syntax
-//  * experimental list comprehension syntax
-//  * search() bugfix and feature addition
-//  * vector min()/max()
-
-// Calculates the convex hull of a set of points. 
-// The result is expressed in point indices. 
-// If the points are collinear (or 2d), the result is a convex 
-// polygon [i1,i2,i3,...], otherwise a triangular 
-// polyhedron [[i1,i2,i3],[i2,i3,i4],...]
-
-function hull(points) = 
-	!(len(points) > 0)  ? [] :
-	len(points[0]) == 2 ? convexhull2d(points) :
-	len(points[0]) == 3 ? convexhull3d(points) : [];
-
-epsilon = 1e-9;
-
-// 2d version
-function convexhull2d(points) =
-len(points) < 3 ? [] : let(
-	a=0, b=1,
-
-	c = find_first_noncollinear([a,b], points, 2)
-
-) c == len(points) ? convexhull_collinear(points) : let(
-
-	remaining = [ for (i = [2:len(points)-1]) if (i != c) i ],
-	
-	polygon = area_2d(points[a], points[b], points[c]) > 0 ? [a,b,c] : [b,a,c]
-
-) convex_hull_iterative_2d(points, polygon, remaining);
-
-
-// Adds the remaining points one by one to the convex hull
-function convex_hull_iterative_2d(points, polygon, remaining, i_=0) = i_ >= len(remaining) ? polygon : 
-	let (
-		// pick a point
-		i = remaining[i_],
-
-		// find the segments that are in conflict with the point (point not inside)
-		conflicts = find_conflicting_segments(points, polygon, points[i])
-
-		// no conflicts, skip point and move on
-	) len(conflicts) == 0 ? convex_hull_iterative_2d(points, polygon, remaining, i_+1) : let(		
-
-		// find the first conflicting segment and the first not conflicting
-		// conflict will be sorted, if not wrapping around, do it the easy way
-		polygon = remove_conflicts_and_insert_point(polygon, conflicts, i)
-	) convex_hull_iterative_2d(
-		points,
-		polygon,
-		remaining,
-		i_+1
-	);
-
-function find_conflicting_segments(points, polygon, point) = [
-	for (i = [0:len(polygon)-1]) let(j = (i+1) % len(polygon))
-		if (area_2d(points[polygon[i]], points[polygon[j]], point) < 0)
-			i
-];
-
-// remove the conflicting segments from the polygon
-function remove_conflicts_and_insert_point(polygon, conflicts, point) = 
-	conflicts[0] == 0 ? let(
-		nonconflicting = [ for(i = [0:len(polygon)-1]) if (!contains(conflicts, i)) i ],
-		new_indices = concat(nonconflicting, (nonconflicting[len(nonconflicting)-1]+1) % len(polygon)),
-		polygon = concat([ for (i = new_indices) polygon[i] ], point)
-	) polygon : let(
-		prior_to_first_conflict = [ for(i = [0:1:min(conflicts)]) polygon[i] ],
-		after_last_conflict     = [ for(i = [max(conflicts)+1:1:len(polygon)-1]) polygon[i] ],
-		polygon = concat(prior_to_first_conflict, point, after_last_conflict)
-	) polygon;
-
-
-// 3d version
-function convexhull3d(points) = 
-len(points) < 3 ? [ for(i = [0:1:len(points)-1]) i ] : let (	
-
-	// start with a single triangle
-	a=0, b=1, c=2,
-	plane = plane(points,a,b,c),
-	
-	d = find_first_noncoplanar(plane, points, 3)
-
-) d == len(points) ? /* all coplanar*/ let (
-
-	pts2d = [ for (p = points) plane_project(p, points[a], points[b], points[c]) ],
-	hull2d = convexhull2d(pts2d)
-
-) hull2d : let(
-
-	remaining = [for (i = [3:len(points)-1]) if (i != d) i],
-
-	// Build an initial tetrahedron
-
-	// swap b,c if d is in front of triangle t
-	bc = in_front(plane, points[d]) ? [c,b] : [b,c],
-	b = bc[0], c = bc[1],
-	
-	triangles = [
-		[a,b,c],
-		[d,b,a],
-		[c,d,a],
-		[b,d,c],
-	],
-
-	// calculate the plane equations
-	planes = [ for (t = triangles) plane(points, t[0], t[1], t[2]) ]
-
-) convex_hull_iterative(points, triangles, planes, remaining);
-
-// A plane equation (normal, offset)
-function plane(points, a, b, c) = let(
-	normal = unit(cross(points[c]-points[a], points[b]-points[a]))
-) [
-	normal,
-	normal * points[a]
-];
-
-// Adds the remaining points one by one to the convex hull
-function convex_hull_iterative(points, triangles, planes, remaining, i_=0) = i_ >= len(remaining) ? triangles : 
-	let (
-		// pick a point
-		i = remaining[i_],
-
-		// find the triangles that are in conflict with the point (point not inside)
-		conflicts = find_conflicts(points[i], planes),
-
-		// for all triangles that are in conflict, collect their halfedges
-		halfedges = [ 
-			for(c = conflicts) 
-				for(i = [0:2]) 	let(j = (i+1)%3) 
-					[triangles[c][i], triangles[c][j]]
-		],
-
-		// find the outer perimeter of the set of conflicting triangles
-		horizon = remove_internal_edges(halfedges),
-
-		// generate a new triangle for each horizon halfedge together with the picked point i
-		new_triangles = [ for (h = horizon) concat(h,i) ],
-
-		// calculate the corresponding plane equations
-		new_planes = [ for (t = new_triangles) plane(points, t[0], t[1], t[2]) ]
-
-	) convex_hull_iterative(
-		points,
-		//  remove the conflicting triangles and add the new ones
-		concat(remove_elements(triangles, conflicts), new_triangles),
-		concat(remove_elements(planes, conflicts), new_planes),
-		remaining,
-		i_+1
-	);
-
-function convexhull_collinear(points) = let(
-	n = points[1] - points[0],
-	a = points[0],
-	points1d = [ for(p = points) (p-a)*n ],
-	min_i = min_index(points1d),
-	max_i = max_index(points1d)
-) [ min_i, max_i ];
-
-function min_index(values,min_,min_i_,i_) =
-	i_ == undef       ? min_index(values,values[0],0,1) :
-	i_ >= len(values) ? min_i_ :
-	values[i_] < min_ ? min_index(values,values[i_],i_,i_+1)
-	                  : min_index(values,min_,min_i_,i_+1);
-
-function max_index(values,max_,max_i_,i_) =
-	i_ == undef       ? max_index(values,values[0],0,1) :
-	i_ >= len(values) ? max_i_ :
-	values[i_] > max_ ? max_index(values,values[i_],i_,i_+1)
-	                  : max_index(values,max_,max_i_,i_+1);
-
-function remove_elements(array, elements) = [
-	for (i = [0:len(array)-1])
-		if (!search(i, elements))
-			array[i]
-];
-
-function remove_internal_edges(halfedges) = [
-	for (h = halfedges)
-		if (!contains(halfedges, reverse(h)))
-			h
-];
-
-function plane_project(point, a, b, c) = let(
-	u = b-a,
-	v = c-a,
-	n = cross(u,v),
-	w = cross(n,u),
-	relpoint = point-a
-) [relpoint * u, relpoint * w];
-
-function plane_unproject(point, a, b, c) = let(
-	u = b-a,
-	v = c-a,
-	n = cross(u,v),
-	w = cross(n,u)
-) a + point[0] * u + point[1] * w;
-
-function reverse(arr) = [ for (i = [len(arr)-1:-1:0]) arr[i] ];
-
-function contains(arr, element) = search([element],arr)[0] != [] ? true : false;
-
-function find_conflicts(point, planes) = [
-	for (i = [0:len(planes)-1])
-		if (in_front(planes[i], point))
-			i
-];
-
-function find_first_noncollinear(line, points, i) = 
-	i >= len(points)           ? len(points) :
-	collinear(points[line[0]], 
-	          points[line[1]], 
-	          points[i])       ? find_first_noncollinear(line, points, i+1)
-	                           : i;
-
-function find_first_noncoplanar(plane, points, i) = 
-    i >= len(points)           ? len(points) :
-	coplanar(plane, points[i]) ? find_first_noncoplanar(plane, points, i+1) 
-	                           : i;
-
-function distance(plane, point) = plane[0] * point - plane[1];
-
-function in_front(plane, point) = distance(plane, point) > epsilon;
-
-function coplanar(plane, point) = abs(distance(plane,point)) <= epsilon;
-
-function unit(v) = v/norm(v);
-
-function area_2d(a,b,c) = (
-	a[0] * (b[1] - c[1]) + 
-	b[0] * (c[1] - a[1]) + 
-	c[0] * (a[1] - b[1])) / 2;
-
-function collinear(a,b,c) = abs(area_2d(a,b,c)) < epsilon;
-
-function spherical(cartesian) = [
-    atan2(cartesian[1], cartesian[0]),
-    asin(cartesian[2])
-];
-
-function cartesian(spherical) = [
-	cos(spherical[1]) * cos(spherical[0]),
-	cos(spherical[1]) * sin(spherical[0]),
-	sin(spherical[1])
-];
-
-
-/// TESTCODE
-
-
-phi = 1.618033988749895;
-
-testpoints_on_sphere = [ for(p = 
-	[
-		[1,phi,0], [-1,phi,0], [1,-phi,0], [-1,-phi,0],
-		[0,1,phi], [0,-1,phi], [0,1,-phi], [0,-1,-phi],
-		[phi,0,1], [-phi,0,1], [phi,0,-1], [-phi,0,-1]
-	])
-	unit(p)
-];
-
-testpoints_spherical = [ for(p = testpoints_on_sphere) spherical(p) ];
-testpoints_circular = [ for(a = [0:15:360-epsilon]) [cos(a),sin(a)] ];
-
-testpoints_coplanar = let(u = unit([1,3,7]), v = unit([-2,1,-2])) [ for(i = [1:10]) rands(-1,1,1)[0] * u + rands(-1,1,1)[0] * v ];
-
-testpoints_collinear_2d = let(u = unit([5,3]))    [ for(i = [1:20]) rands(-1,1,1)[0] * u ];
-testpoints_collinear_3d = let(u = unit([5,3,-5])) [ for(i = [1:20]) rands(-1,1,1)[0] * u ];
-
-testpoints2d = 20 * [for (i = [1:10]) concat(rands(-1,1,2))];
-testpoints3d = 20 * [for (i = [1:50]) concat(rands(-1,1,3))];
-
-// All points are on the sphere, no point should be red
-translate([-50,0]) visualize_hull(20*testpoints_on_sphere);
-
-// 2D points
-translate([50,0]) visualize_hull(testpoints2d);
-
-// All points on a circle, no point should be red
-translate([0,50]) visualize_hull(20*testpoints_circular);
-
-// All points 3d but collinear
-translate([0,-50]) visualize_hull(20*testpoints_coplanar);
-
-// Collinear
-translate([50,50]) visualize_hull(20*testpoints_collinear_2d);
-
-// Collinear
-translate([-50,50]) visualize_hull(20*testpoints_collinear_3d);
-
-// 3D points
-visualize_hull(testpoints3d);
-
-
-module visualize_hull(points) {
-
-	hull = hull(points);
-	
-	%if (len(hull) > 0 && len(hull[0]) > 0)
-		polyhedron(points=points, faces = hull);
-	else
-		polyhedron(points=points, faces = [hull]);
-	
-	for (i = [0:len(points)-1]) assign(p = points[i], $fn = 16) {
-		translate(p) {
-			if (hull_contains_index(hull,i)) {
-				color("blue") sphere(1);
-			} else {
-				color("red") sphere(1);
-			}
-		}
-	}
-	
-	function hull_contains_index(hull, index) = 
-		search(index,hull,1,0) ||
-		search(index,hull,1,1) ||
-		search(index,hull,1,2);
-
-}

+ 0 - 32
2d3d/scad-utils/linalg.scad

@@ -1,32 +0,0 @@
-// very minimal set of linalg functions needed by so3, se3 etc.
-
-// cross and norm are builtins
-//function cross(x,y) = [x[1]*y[2]-x[2]*y[1], x[2]*y[0]-x[0]*y[2], x[0]*y[1]-x[1]*y[0]];
-//function norm(v) = sqrt(v*v);
-
-function vec3(p) = len(p) < 3 ? concat(p,0) : p;
-function vec4(p) = let (v3=vec3(p)) len(v3) < 4 ? concat(v3,1) : v3;
-function unit(v) = v/norm(v);
-
-function identity3()=[[1,0,0],[0,1,0],[0,0,1]]; 
-function identity4()=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];
-
-
-function take3(v) = [v[0],v[1],v[2]];
-function tail3(v) = [v[3],v[4],v[5]];
-function rotation_part(m) = [take3(m[0]),take3(m[1]),take3(m[2])];
-function rot_trace(m) = m[0][0] + m[1][1] + m[2][2];
-function rot_cos_angle(m) = (rot_trace(m)-1)/2;
-
-function rotation_part(m) = [take3(m[0]),take3(m[1]),take3(m[2])];
-function translation_part(m) = [m[0][3],m[1][3],m[2][3]];
-function transpose_3(m) = [[m[0][0],m[1][0],m[2][0]],[m[0][1],m[1][1],m[2][1]],[m[0][2],m[1][2],m[2][2]]];
-function transpose_4(m) = [[m[0][0],m[1][0],m[2][0],m[3][0]],
-                           [m[0][1],m[1][1],m[2][1],m[3][1]],
-                           [m[0][2],m[1][2],m[2][2],m[3][2]],
-                           [m[0][3],m[1][3],m[2][3],m[3][3]]]; 
-function invert_rt(m) = construct_Rt(transpose_3(rotation_part(m)), -(transpose_3(rotation_part(m)) * translation_part(m)));
-function construct_Rt(R,t) = [concat(R[0],t[0]),concat(R[1],t[1]),concat(R[2],t[2]),[0,0,0,1]];
-
-// Hadamard product of n-dimensional arrays
-function hadamard(a,b) = !(len(a)>0) ? a*b : [ for(i = [0:len(a)-1]) hadamard(a[i],b[i]) ];

+ 0 - 48
2d3d/scad-utils/lists.scad

@@ -1,48 +0,0 @@
-// List helpers
-
-/*!
-  Flattens a list one level:
-
-  flatten([[0,1],[2,3]]) => [0,1,2,3]
-*/
-function flatten(list) = [ for (i = list, v = i) v ];
-
-
-/*!
-  Creates a list from a range:
-
-  range([0:2:6]) => [0,2,4,6]
-*/
-function range(r) = [ for(x=r) x ];
-
-/*!
-  Reverses a list:
-
-  reverse([1,2,3]) => [3,2,1]
-*/
-function reverse(list) = [for (i = [len(list)-1:-1:0]) list[i]];
-
-/*!
-  Extracts a subarray from index begin (inclusive) to end (exclusive)
-  FIXME: Change name to use list instead of array?
-
-  subarray([1,2,3,4], 1, 2) => [2,3]
-*/
-function subarray(list,begin=0,end=-1) = [
-    let(end = end < 0 ? len(list) : end)
-      for (i = [begin : 1 : end-1])
-        list[i]
-];
-
-/*!
-  Returns a copy of a list with the element at index i set to x
-
-  set([1,2,3,4], 2, 5) => [1,2,5,4]
-*/
-function set(list, i, x) = [for (i_=[0:len(list)-1]) i == i_ ? x : list[i_]];
-
-/*!
-  Remove element from the list by index.
-  remove([4,3,2,1],1) => [4,2,1]
-*/
-function remove(list, i) = [for (i_=[0:1:len(list)-2]) list[i_ < i ? i_ : i_ + 1]];

+ 0 - 30
2d3d/scad-utils/mirror.scad

@@ -1,30 +0,0 @@
-// Copyright (c) 2013 Oskar Linde. All rights reserved.
-// License: BSD
-//
-// This library contains simple mirroring functions
-//
-// mirror_x()
-// mirror_y()
-// mirror_z()
-
-
-module mirror_x() {
-	union() {
-		child();
-		scale([-1,1,1]) child();
-	}
-}
-
-module mirror_y() {
-	union() {
-		child();
-		scale([1,-1,1]) child();
-	}
-}
-
-module mirror_z() {
-	union() {
-		child();
-		scale([1,1,-1]) child();
-	}
-}

+ 0 - 109
2d3d/scad-utils/morphology.scad

@@ -1,109 +0,0 @@
-// Copyright (c) 2013 Oskar Linde. All rights reserved.
-// License: BSD
-//
-// This library contains basic 2D morphology operations
-//
-// outset(d=1)            - creates a polygon at an offset d outside a 2D shape
-// inset(d=1)             - creates a polygon at an offset d inside a 2D shape
-// fillet(r=1)            - adds fillets of radius r to all concave corners of a 2D shape
-// rounding(r=1)          - adds rounding to all convex corners of a 2D shape
-// shell(d,center=false)  - makes a shell of width d along the edge of a 2D shape
-//                        - positive values of d places the shell on the outside
-//                        - negative values of d places the shell on the inside
-//                        - center=true and positive d places the shell centered on the edge
-
-module outset(d=1) {
-	// Bug workaround for older OpenSCAD versions
-	if (version_num() < 20130424) render() outset_extruded(d) child();
-	else minkowski() {
-		circle(r=d);
-		child();
-	}
-}
-
-module outset_extruded(d=1) {
-   projection(cut=true) minkowski() {
-        cylinder(r=d);
-        linear_extrude(center=true) child();
-   }
-}
-
-module inset(d=1) {
-	 render() inverse() outset(d=d) inverse() child();
-}
-
-module fillet(r=1) {
-	inset(d=r) render() outset(d=r) child();
-}
-
-module rounding(r=1) {
-	outset(d=r) inset(d=r) child();
-}
-
-module shell(d,center=false) {
-	if (center && d > 0) {
-		difference() {
-			outset(d=d/2) child();
-			inset(d=d/2) child();
-		}
-	}
-	if (!center && d > 0) {
-		difference() {
-			outset(d=d) child();
-			child();
-		}
-	}
-	if (!center && d < 0) {
-		difference() {
-			child();
-			inset(d=-d) child();
-		}
-	}
-	if (d == 0) child();
-}
-
-
-// Below are for internal use only
-
-module inverse() {
-	difference() {
-		square(1e5,center=true);
-		child();
-	}
-}
-
-
-// TEST CODE
-
-use <mirror.scad>
-
-module arrow(l=1,w=.6,t=0.15) {
-	mirror_y() polygon([[0,0],[l,0],[l-w/2,w/2],[l-w/2-sqrt(2)*t,w/2],[l-t/2-sqrt(2)*t,t/2],[0,t/2]]);
-}
-
-module shape() {
-	polygon([[0,0],[1,0],[1.5,1],[2.5,1],[2,-1],[0,-1]]);
-}
-
-if(0) assign($fn=32) {
-
-	for (p = [0:10*3-1]) assign(o=floor(p/3)) {
-		translate([(p%3)*2.5,-o*3]) {
-			//%if (p % 3 == 1) translate([0,0,1]) shape();
-			if (p % 3 == 0) shape();
-			if (p % 3 == 1) translate([0.6,0]) arrow();
-			if (p % 3 == 2) {
-				if (o == 0) inset(d=0.3) shape();
-				if (o == 1) outset(d=0.3) shape();
-				if (o == 2) rounding(r=0.3) shape();
-				if (o == 3) fillet(r=0.3) shape();
-				if (o == 4) shell(d=0.3) shape();
-				if (o == 5) shell(d=-0.3) shape();
-				if (o == 6) shell(d=0.3,center=true) shape();
-				if (o == 7) rounding(r=0.3) fillet(r=0.3) shape();
-				if (o == 8) shell(d=0.3,center=true) fillet(r=0.3) rounding(r=0.3) shape();
-				if (o == 9) shell(d=-0.3) fillet(r=0.3) rounding(r=0.3) shape();
-			}
-		}
-	}
-}

+ 0 - 60
2d3d/scad-utils/se3.scad

@@ -1,60 +0,0 @@
-use <linalg.scad>
-use <so3.scad>
-
-function combine_se3_exp(w, ABt) = construct_Rt(rodrigues_so3_exp(w, ABt[0], ABt[1]), ABt[2]);
-
-// [A,B,t]
-function se3_exp_1(t,w) = concat(
-	so3_exp_1(w*w),
-	[t + 0.5 * cross(w,t)]
-);
-
-function se3_exp_2(t,w) = se3_exp_2_0(t,w,w*w);
-function se3_exp_2_0(t,w,theta_sq) = 
-se3_exp_23(
-	so3_exp_2(theta_sq), 
-	C = (1.0 - theta_sq/20) / 6,
-	t=t,w=w);
-
-function se3_exp_3(t,w) = se3_exp_3_0(t,w,sqrt(w*w)*180/PI,1/sqrt(w*w));
-
-function se3_exp_3_0(t,w,theta_deg,inv_theta) = 
-se3_exp_23(
-	so3_exp_3_0(theta_deg = theta_deg, inv_theta = inv_theta),
-	C = (1 - sin(theta_deg) * inv_theta) * (inv_theta * inv_theta),
-	t=t,w=w);
-
-function se3_exp_23(AB,C,t,w) = 
-[AB[0], AB[1], t + AB[1] * cross(w,t) + C * cross(w,cross(w,t)) ];
-
-function se3_exp(mu) = se3_exp_0(t=take3(mu),w=tail3(mu)/180*PI);
-
-function se3_exp_0(t,w) =
-combine_se3_exp(w,
-// Evaluate by Taylor expansion when near 0
-	w*w < 1e-8 
-	? se3_exp_1(t,w)
-	: w*w < 1e-6
-	  ? se3_exp_2(t,w)
-	  : se3_exp_3(t,w)
-);
-
-function se3_ln(m) = se3_ln_to_deg(se3_ln_rad(m));
-function se3_ln_to_deg(v) = concat(take3(v),tail3(v)*180/PI);
-
-function se3_ln_rad(m) = se3_ln_0(m, 
-	rot = so3_ln_rad(rotation_part(m)));
-function se3_ln_0(m,rot) = se3_ln_1(m,rot,
-	theta = sqrt(rot*rot));
-function se3_ln_1(m,rot,theta) = se3_ln_2(m,rot,theta,
-	shtot = theta > 0.00001 ? sin(theta/2*180/PI)/theta : 0.5,
-	halfrotator = so3_exp_rad(rot * -.5));
-function se3_ln_2(m,rot,theta,shtot,halfrotator) =
-concat( (halfrotator * translation_part(m) - 
-	(theta > 0.001 
-	? rot * ((translation_part(m) * rot) * (1-2*shtot) / (rot*rot))
-	: rot * ((translation_part(m) * rot)/24)
-	)) / (2 * shtot), rot);
-
-__se3_test = [20,-40,60,-80,100,-120];
-echo(UNITTEST_se3=norm(__se3_test-se3_ln(se3_exp(__se3_test))) < 1e-8);

+ 0 - 16
2d3d/scad-utils/shapes.scad

@@ -1,16 +0,0 @@
-function square(size) = [[-size,-size], [-size,size], [size,size], [size,-size]] / 2;
-
-function circle(r) = [for (i=[0:$fn-1]) let (a=i*360/$fn) r * [cos(a), sin(a)]];
-
-function regular(r, n) = circle(r, $fn=n);
-
-function rectangle_profile(size=[1,1]) = [	
-	// The first point is the anchor point, put it on the point corresponding to [cos(0),sin(0)]
-	[ size[0]/2,  0], 
-	[ size[0]/2,  size[1]/2],
-	[-size[0]/2,  size[1]/2],
-	[-size[0]/2, -size[1]/2],
-	[ size[0]/2, -size[1]/2],
-];
-
-// FIXME: Move rectangle and rounded rectangle from extrusion

+ 0 - 82
2d3d/scad-utils/so3.scad

@@ -1,82 +0,0 @@
-// so3
-
-use <linalg.scad>
-
-function rodrigues_so3_exp(w, A, B) = [
-[1.0 - B*(w[1]*w[1] + w[2]*w[2]), B*(w[0]*w[1]) - A*w[2],          B*(w[0]*w[2]) + A*w[1]],
-[B*(w[0]*w[1]) + A*w[2],          1.0 - B*(w[0]*w[0] + w[2]*w[2]), B*(w[1]*w[2]) - A*w[0]],
-[B*(w[0]*w[2]) - A*w[1],          B*(w[1]*w[2]) + A*w[0],          1.0 - B*(w[0]*w[0] + w[1]*w[1])]
-];
-
-function so3_exp(w) = so3_exp_rad(w/180*PI);
-function so3_exp_rad(w) =
-combine_so3_exp(w,
-	w*w < 1e-8 
-	? so3_exp_1(w*w)
-	: w*w < 1e-6
-	  ? so3_exp_2(w*w)
-	  : so3_exp_3(w*w));
-
-function combine_so3_exp(w,AB) = rodrigues_so3_exp(w,AB[0],AB[1]);
-
-// Taylor series expansions close to 0
-function so3_exp_1(theta_sq) = [
-	1 - 1/6*theta_sq, 
-	0.5
-];
-
-function so3_exp_2(theta_sq) = [
-	1.0 - theta_sq * (1.0 - theta_sq/20) / 6,
-	0.5 - 0.25/6 * theta_sq
-];
-
-function so3_exp_3_0(theta_deg, inv_theta) = [
-	sin(theta_deg) * inv_theta,
-	(1 - cos(theta_deg)) * (inv_theta * inv_theta)
-];
-
-function so3_exp_3(theta_sq) = so3_exp_3_0(sqrt(theta_sq)*180/PI, 1/sqrt(theta_sq));
-
-
-function rot_axis_part(m) = [m[2][1] - m[1][2], m[0][2] - m[2][0], m[1][0] - m[0][1]]*0.5;
-
-function so3_ln(m) = 180/PI*so3_ln_rad(m);
-function so3_ln_rad(m) = so3_ln_0(m,
-	cos_angle = rot_cos_angle(m),
-	preliminary_result = rot_axis_part(m));
-
-function so3_ln_0(m, cos_angle, preliminary_result) = 
-so3_ln_1(m, cos_angle, preliminary_result, 
-	sin_angle_abs = sqrt(preliminary_result*preliminary_result));
-
-function so3_ln_1(m, cos_angle, preliminary_result, sin_angle_abs) = 
-	cos_angle > sqrt(1/2)
-	? sin_angle_abs > 0
-	  ? preliminary_result * asin(sin_angle_abs)*PI/180 / sin_angle_abs
-	  : preliminary_result
-	: cos_angle > -sqrt(1/2)
-	  ? preliminary_result * acos(cos_angle)*PI/180 / sin_angle_abs
-	  : so3_get_symmetric_part_rotation(
-	      preliminary_result,
-	      m,
-	      angle = PI - asin(sin_angle_abs)*PI/180,
-	      d0 = m[0][0] - cos_angle,
-	      d1 = m[1][1] - cos_angle,
-	      d2 = m[2][2] - cos_angle
-			);
-
-function so3_get_symmetric_part_rotation(preliminary_result, m, angle, d0, d1, d2) =
-so3_get_symmetric_part_rotation_0(preliminary_result,angle,so3_largest_column(m, d0, d1, d2));
-
-function so3_get_symmetric_part_rotation_0(preliminary_result, angle, c_max) =
-	angle * unit(c_max * preliminary_result < 0 ? -c_max : c_max);
-
-function so3_largest_column(m, d0, d1, d2) =
-		d0*d0 > d1*d1 && d0*d0 > d2*d2
-		?	[d0, (m[1][0]+m[0][1])/2, (m[0][2]+m[2][0])/2]
-		: d1*d1 > d2*d2
-		  ? [(m[1][0]+m[0][1])/2, d1, (m[2][1]+m[1][2])/2]
-		  : [(m[0][2]+m[2][0])/2, (m[2][1]+m[1][2])/2, d2];
-
-__so3_test = [12,-125,110];
-echo(UNITTEST_so3=norm(__so3_test-so3_ln(so3_exp(__so3_test))) < 1e-8);

+ 0 - 113
2d3d/scad-utils/spline.scad

@@ -1,113 +0,0 @@
-// Spline module for scad-util library
-// Author Sergei Kuzmin, 2014.
-
-// For n+1 given point and hense n intervals returns the spline coefficient matrix.
-// param p defines the anchor points.
-// File defines two functions: spline_args and spline.
-// example usage:
-// spl1 = spline_args(point, v1=[0,1,0], closed=false);
-// interpolated_points = [for(t=[0:0.1:len(point)-1]) spline(spl1, t)]
-
-use <linalg.scad>
-use <lists.scad>
-
-q1=[[1,0,0,0],[1,1,1,1],[0,1,2,3],[0,0,1,3]];
-q1inv=[[1,0,0,0],[-3,3,-2,1],[3,-3,3,-2],[-1,1,-1,1]];
-q2=[[0,0,0,0],[0,0,0,0],[0,-1,0,0],[0,0,-1,0]];
-qn1i2=-q1inv*q2;
-z3=[0,0,0];
-z4=[0,0,0,0];
-
-function matrix_power(m,n)= n==0? (len(m)==3?identity3():identity4()) :
-        n==1 ? m : (n%2==1) ? matrix_power(m*m,floor(n/2))*m : matrix_power(m*m,n/2);
-        
-function det(m) = let(r=[for(i=[0:1:len(m)-1]) i]) det_help(m, 0, r);
-// Construction indices list is inefficient, but currently there is no way to imperatively
-// assign to a list element
-function det_help(m, i, r) = len(r) == 0 ? 1 : 
-    m[len(m)-len(r)][r[i]]*det_help(m,0,remove(r,i)) - (i+1<len(r)? det_help(m, i+1, r) : 0);
-
-function matrix_invert(m) = let(r=[for(i=[0:len(m)-1]) i]) [for(i=r) [for(j=r)
-    ((i+j)%2==0 ? 1:-1) * matrix_minor(m,0,remove(r,j),remove(r,i))]] / det(m);
-function matrix_minor(m,k,ri, rj) = let(len_r=len(ri)) len_r == 0 ? 1 :
-    m[ri[0]][rj[k]]*matrix_minor(m,0,remove(ri,0),remove(rj,k)) - (k+1<len_r?matrix_minor(m,k+1,ri,rj) : 0);
-
-function spline_u(i,p) = [p[i],p[i+1],z3,z3];
-
-function spline_args(p, closed=false, v1=undef, v2=undef)=len(p)<2 ? []:
-    let(q3=closed?q2:[z4, z4, v1==undef?[0,0,1,0]:[0,1,0,0], z4],
-        q4=closed?q1:[[1,0,0,0], [1,1,1,1], z4, v2==undef?[0,0,1,3]:[0,1,2,3]],
-        pcnt=closed? len(p) + 1 : len(p),
-        un=[p[pcnt-2],p[closed?0:pcnt-1],v1==undef?z4:v1, v2==undef?z4:v2],
-        sn=matrix_invert(q4+q3*matrix_power(qn1i2,pcnt-2))*(un-q3*q1inv*spline_helper(0, pcnt, p)))
-    // result[i+1] recurrently defines result[i]. This is O(n) runtime with imperative language and 
-    // may be O(n^2) if OpenSCAD doesn't cache spline_si(i+1).
-    [for(i=[0:pcnt-2]) spline_si(i, pcnt-2, p, sn)];
-
-// n is number of points including pseudopoint for closed contour
-// Weird construct cause there is no if statement for functions
-function spline_helper(i, n, p) = let(u=[p[i], p[i+1], z3, z3])  i+3>=n? u : u-q2*q1inv*spline_helper(i+1, n, p);
-
-// knowing s[j+1], calculate s[j]. Stop when found s[i]
-function spline_si(i,n, p, sn) = i == n ? sn : q1inv*(spline_u(i,p)-q2*spline_si(i+1, n, p, sn));
-
-// Takes array of (3n+1) points or (2n + 2) points, if tangent segments are symmetric.
-// For non-symmetric version input is: point0, normal0, neg_normal1, point1, normal1, ... neg_normal_n, point_n
-// For symmetric version: point0, normal0, point1, normal1, ... , normal_n_sub_1, point_n
-// In the second case second tangent is constructed from the next tangent by symmetric map.
-// I.e. if current points are p0,p1,p2 then anchor points are p0 and p2, first tangent defined by p1-p0,
-// second tangent defined by p3-p2.
-// Return array of coefficients accepted by spline(), spline_tan() and similar    
-function bezier3_args(p, symmetric=false) = let(step=symmetric?2:3)
-    [for(i=[0:step:len(p)-3]) [[1,0,0,0],[-3,3,0,0],[3,-6,3,0],[-1,3,-3,1]]*
-        (symmetric?[p[i],p[i]+p[i+1],p[i+2]-p[i+3],p[i+2]] : [p[i], p[i]+p[i+1], p[i+3]+p[i+2], p[i+3]])];
-        
-// s - spline arguments calculated by spline_args
-// t - defines point on curve. each segment length is 1. I.e. t= 0..1 is first segment, t=1..2 - second.   
-function spline(s, t)= let(i=t>=len(s)?len(s)-1: floor(t), t2=t-i) [1,t2,t2*t2,t2*t2*t2]*s[i];    
-    
-function spline_tan(s, t)= let(i=t>=len(s)?len(s)-1: floor(t), t2=t-i) [0,1,2*t2,3*t2*t2]*s[i];
-function spline_tan_unit(s, t)= unit(spline_tan(s,t));
-function spline_d2(s,t)= let(i=t>=len(s)?len(s)-1: floor(t), t2=t-i) [0,0,2,6*t2]*s[i];
-function spline_binormal_unit(s,t)= unit(cross(spline_tan(s, t), spline_d2(s,t)));
-function spline_normal_unit(s,t)= unit(cross(spline_tan(s, t), spline_binormal_unit(s,t)));
-    
-function spline_transform(s, t)=
-    construct_Rt(transpose_3([spline_normal_unit(s,t), spline_binormal_unit(s,t), spline_tan_unit(s,t)]), spline(s,t));
-    
-// Unit tests
-__s = spline_args([[0,10,0], [10,0,0],[0,-5,2]], v1=[0,1,0], v2=[-1,0,0], closed=true);
-for(t=[0:0.01:len(__s)]) translate(spline(__s, t))
-    cube([0.2,0.2,0.2], center=true);
-
-__s1=spline_args([[0,0,0],[0,0,15], [26,0,26+15]], /*v1=[0,0,100],*/ v2=[40,0,0]);
-for(t=[0:0.01:len(s1)]) translate(spline(__s1, t))
-    cube([0.2,0.2,0.2], center=true);
-
-__s2=bezier3_args([[0,0,0],[0,0,10],[0,0,15],[0,0,26*0.552284],[26,0,41],[26*0.552284,0,0]],symmetric=true);
-echo(__s2);
-for(t=[0:0.01:len(__s2)]) translate(spline(__s2, t))
-    cube([0.2,0.2,0.2], center=true);
-
-// Rotation methods taken from list-comprehension-demos/sweep.scad to demonstrate normal and binormal
-// Normally spline_transform is more convenient
-function __rotation_from_axis(x,y,z) = [[x[0],y[0],z[0]],[x[1],y[1],z[1]],[x[2],y[2],z[2]]];
-function __rotate_from_to(a,b,_axis=[]) =
-        len(_axis) == 0
-        ? __rotate_from_to(a,b,unit(cross(a,b)))
-        : _axis*_axis >= 0.99 ? __rotation_from_axis(unit(b),_axis,cross(_axis,unit(b))) *
-    transpose_3(__rotation_from_axis(unit(a),_axis,cross(_axis,unit(a)))) : identity3();
-
-__s3 = spline_args([[0,10,0], [6,6,0], [10,0,0],[0,-5,4]], v1=[0,1,0], v2=[-1,0,0], closed=true);
-for(t=[0:0.05:len(__s3)]) translate(spline(__s3, t)) {
-    translate([0,0,3]) multmatrix(m=__rotate_from_to([0,0,1],spline_normal_unit(__s3,t)))
-        cylinder(r1=0.1, r2=0, h=1, $fn=3);
-    translate([0,0,6]) multmatrix(m=__rotate_from_to([0,0,1],spline_binormal_unit(__s3,t)))
-        cylinder(r1=0.1, r2=0, h=1, $fn=3);
-}
-
-translate([0,0,9]) for(t=[0:0.025:len(__s3)])
-    multmatrix(spline_transform(__s3,t)) cube([1,1,0.1],center=true);   
-
- 
-        

+ 0 - 43
2d3d/scad-utils/trajectory.scad

@@ -1,43 +0,0 @@
-use <so3.scad>
-
-function val(a=undef,default=undef) = a == undef ? default : a;
-function vec_is_undef(x,index_=0) = index_ >= len(x) ? true :
-is_undef(x[index_]) && vec_is_undef(x,index_+1);
-
-function is_undef(x) = len(x) > 0 ? vec_is_undef(x) : x == undef;
-// Either a or b, but not both
-function either(a,b,default=undef) = is_undef(a) ? (is_undef(b) ? default : b) : is_undef(b) ? a : undef;
-
-function translationv(left=undef,right=undef,up=undef,down=undef,forward=undef,backward=undef,translation=undef) = 
-translationv_2(
-	x = either(up,-down),
-	y = either(right,-left),
-	z = either(forward,-backward),
-	translation = translation);
-
-function translationv_2(x,y,z,translation) =
-	x == undef && y == undef && z == undef ? translation :
-	is_undef(translation) ? [val(x,0),val(y,0),val(z,0)]
-	: undef;
-
-function rotationv(pitch=undef,yaw=undef,roll=undef,rotation=undef) = 
-	rotation == undef ? [val(yaw,0),val(pitch,0),val(roll,0)] :
-	pitch == undef && yaw == undef && roll == undef ? rotation :
-	undef;
-
-function trajectory(
-	left=undef,    right=undef,
-	up=undef,      down=undef,
-	forward=undef, backward=undef,
-	translation=undef,
-
-    pitch=undef,
-    yaw=undef,
-    roll=undef,
-    rotation=undef
-) = concat(
-	translationv(left=left,right=right,up=up,down=down,forward=forward,backward=backward,translation=translation),
-	rotationv(pitch=pitch,yaw=yaw,roll=roll,rotation=rotation)
-);
-
-function rotationm(rotation=undef,pitch=undef,yaw=undef,roll=undef) = so3_exp(rotationv(rotation=rotation,pitch=pitch,yaw=yaw,roll=roll));

+ 0 - 89
2d3d/scad-utils/trajectory_path.scad

@@ -1,89 +0,0 @@
-use <linalg.scad>
-use <se3.scad>
-
-function left_multiply(a,bs,i_=0) = i_ >= len(bs) ? [] :
-	concat([
-		a * bs[i_]
-	], left_multiply(a,bs,i_+1));
-
-
-function right_multiply(as,b,i_=0) = i_ >= len(as) ? [] :
-	concat([
-		as[i_] * b
-	], right_multiply(as,b,i_+1));
-
-function quantize_trajectory(trajectory,step=undef,start_position=0,steps=undef,i_=0,length_=undef) =
-	length_ == undef ? quantize_trajectory(
-		trajectory=trajectory,
-		start_position=(step==undef?norm(take3(trajectory))/steps*start_position:start_position),
-		length_=norm(take3(trajectory)),
-		step=step,steps=steps,i_=i_) :
-	(steps==undef?start_position > length_:i_>=steps) ? [] :
-	concat([
-	// if steps is defined, ignore start_position
-		se3_exp(trajectory*(steps==undef ? start_position/length_
-                                         : i_/(steps>1?steps-1:1)))
-	], quantize_trajectory(trajectory=trajectory,step=step,start_position=(steps==undef?start_position+step:start_position),steps=steps,i_=i_+1,length_=length_));
-
-function close_trajectory_loop(trajectories) = concat(trajectories,[se3_ln(invert_rt(trajectories_end_position(trajectories)))]);
-
-function quantize_trajectories(trajectories,step=undef,start_position=0,steps=undef,loop=false,last_=identity4(),i_=0,current_length_=undef,j_=0) =
-		// due to quantization differences, the last step may be missed. In that case, add it:
-	loop==true ? quantize_trajectories(
-		trajectories=close_trajectory_loop(trajectories),
-		step=step,
-		start_position = start_position,
-		steps=steps,
-		loop=false,
-		last_=last_,
-		i_=i_,
-		current_length_=current_length_,
-		j_=j_) :
-	i_ >= len(trajectories) ? (j_ < steps ? [last_] : []) :
-	current_length_ == undef ? 
-	quantize_trajectories(
-		trajectories=trajectories,
-		step = (step == undef ? trajectories_length(trajectories) / steps : step),
-		start_position = (step == undef ? start_position * trajectories_length(trajectories) / steps : start_position),
-		steps=steps,
-		loop=loop,
-		last_=last_,
-		i_=i_,
-		current_length_=norm(take3(trajectories[i_])),
-		j_=j_) :
-	concat(
-		left_multiply(last_,quantize_trajectory(
-			trajectory=trajectories[i_],
-			start_position=start_position,
-			step=step)),
-	quantize_trajectories(
-		trajectories=trajectories,
-		step=step,
-		start_position = start_position > current_length_
-			? start_position - current_length_
-			: step - ((current_length_-start_position) % step),
-		steps=steps,
-		loop=loop,
-	    last_=last_ * se3_exp(trajectories[i_]),
-	    i_=i_+1,
-		current_length_ = undef,
-		j_=j_+len(
-
-		quantize_trajectory(
-			trajectory=trajectories[i_],
-			start_position=start_position,
-			step=step	
-
-		))
-	))
-;
-
-
-function trajectories_length(trajectories, i_=0) = i_ >= len(trajectories) ? 0 
-	: norm(take3(trajectories[i_])) + trajectories_length(trajectories,i_+1);
-
-
-function trajectories_end_position(rt,i_=0,last_=identity4()) = 
-	i_ >= len(rt) ? last_ :
-	trajectories_end_position(rt, i_+1, last_ * se3_exp(rt[i_]));
-

+ 0 - 43
2d3d/scad-utils/transformations.scad

@@ -1,43 +0,0 @@
-use <se3.scad>
-use <linalg.scad>
-use <lists.scad>
-
-/*!
-  Creates a rotation matrix
-
-  xyz = euler angles = rz * ry * rx
-  axis = rotation_axis * rotation_angle
-*/
-function rotation(xyz=undef, axis=undef) = 
-	xyz != undef && axis != undef ? undef :
-	xyz == undef  ? se3_exp([0,0,0,axis[0],axis[1],axis[2]]) :
-	len(xyz) == undef ? rotation(axis=[0,0,xyz]) :
-	(len(xyz) >= 3 ? rotation(axis=[0,0,xyz[2]]) : identity4()) *
-	(len(xyz) >= 2 ? rotation(axis=[0,xyz[1],0]) : identity4()) *
-	(len(xyz) >= 1 ? rotation(axis=[xyz[0],0,0]) : identity4());
-
-/*!
-  Creates a scaling matrix
-*/
-function scaling(v) = [
-	[v[0],0,0,0],
-	[0,v[1],0,0],
-	[0,0,v[2],0],
-	[0,0,0,1],
-];
-
-/*!
-  Creates a translation matrix
-*/
-function translation(v) = [
-	[1,0,0,v[0]],
-	[0,1,0,v[1]],
-	[0,0,1,v[2]],
-	[0,0,0,1],
-];
-
-// Convert between cartesian and homogenous coordinates
-function project(x) = subarray(x,end=len(x)-1) / x[len(x)-1];
-
-function transform(m, list) = [for (p=list) project(m * vec4(p))];
-function to_3d(list) = [ for(v = list) vec3(v) ];

+ 0 - 2
2d3d/sum.scad

@@ -1,2 +0,0 @@
-function sump(a,i) = (i==0)?a[0]:a[i]+sump(a,i-1);
-function sumt(a) = sump(a,len(a)-1);

File diff suppressed because it is too large
+ 0 - 57
2d3d/sus.svg


+ 0 - 404
2d3d/threads.scad

@@ -1,404 +0,0 @@
-/*
- * ISO-standard metric threads, following this specification:
- *          http://en.wikipedia.org/wiki/ISO_metric_screw_thread
- *
- * Copyright 2020 Dan Kirshner - dan_kirshner@yahoo.com
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * See <http://www.gnu.org/licenses/>.
- *
- * Version 2.5.  2020-04-11  Leadin option works for internal threads.
- * Version 2.4.  2019-07-14  Add test option - do not render threads.
- * Version 2.3.  2017-08-31  Default for leadin: 0 (best for internal threads).
- * Version 2.2.  2017-01-01  Correction for angle; leadfac option.  (Thanks to
- *                           Andrew Allen <a2intl@gmail.com>.)
- * Version 2.1.  2016-12-04  Chamfer bottom end (low-z); leadin option.
- * Version 2.0.  2016-11-05  Backwards compatibility (earlier OpenSCAD) fixes.
- * Version 1.9.  2016-07-03  Option: tapered.
- * Version 1.8.  2016-01-08  Option: (non-standard) angle.
- * Version 1.7.  2015-11-28  Larger x-increment - for small-diameters.
- * Version 1.6.  2015-09-01  Options: square threads, rectangular threads.
- * Version 1.5.  2015-06-12  Options: thread_size, groove.
- * Version 1.4.  2014-10-17  Use "faces" instead of "triangles" for polyhedron
- * Version 1.3.  2013-12-01  Correct loop over turns -- don't have early cut-off
- * Version 1.2.  2012-09-09  Use discrete polyhedra rather than linear_extrude ()
- * Version 1.1.  2012-09-07  Corrected to right-hand threads!
- */
-
-// Examples.
-//
-// Standard M8 x 1.
-// metric_thread (diameter=8, pitch=1, length=4);
-
-// Square thread.
-// metric_thread (diameter=8, pitch=1, length=4, square=true);
-
-// Non-standard: long pitch, same thread size.
-//metric_thread (diameter=8, pitch=4, length=4, thread_size=1, groove=true);
-
-// Non-standard: 20 mm diameter, long pitch, square "trough" width 3 mm,
-// depth 1 mm.
-//metric_thread (diameter=20, pitch=8, length=16, square=true, thread_size=6,
-//               groove=true, rectangle=0.333);
-
-// English: 1/4 x 20.
-//english_thread (diameter=1/4, threads_per_inch=20, length=1);
-
-// Tapered.  Example -- pipe size 3/4" -- per:
-// http://www.engineeringtoolbox.com/npt-national-pipe-taper-threads-d_750.html
-// english_thread (diameter=1.05, threads_per_inch=14, length=3/4, taper=1/16);
-
-// Thread for mounting on Rohloff hub.
-//difference () {
-//   cylinder (r=20, h=10, $fn=100);
-//
-//   metric_thread (diameter=34, pitch=1, length=10, internal=true, n_starts=6);
-//}
-
-
-// ----------------------------------------------------------------------------
-function segments (diameter) = min (50, max (ceil (diameter*6), 25));
-
-
-// ----------------------------------------------------------------------------
-// diameter -    outside diameter of threads in mm. Default: 8.
-// pitch    -    thread axial "travel" per turn in mm.  Default: 1.
-// length   -    overall axial length of thread in mm.  Default: 1.
-// internal -    true = clearances for internal thread (e.g., a nut).
-//               false = clearances for external thread (e.g., a bolt).
-//               (Internal threads should be "cut out" from a solid using
-//               difference ()).  Default: false.
-// n_starts -    Number of thread starts (e.g., DNA, a "double helix," has
-//               n_starts=2).  See wikipedia Screw_thread.  Default: 1.
-// thread_size - (non-standard) axial width of a single thread "V" - independent
-//               of pitch.  Default: same as pitch.
-// groove      - (non-standard) true = subtract inverted "V" from cylinder
-//                (rather thanadd protruding "V" to cylinder).  Default: false.
-// square      - true = square threads (per
-//               https://en.wikipedia.org/wiki/Square_thread_form).  Default:
-//               false.
-// rectangle   - (non-standard) "Rectangular" thread - ratio depth/(axial) width
-//               Default: 0 (standard "v" thread).
-// angle       - (non-standard) angle (deg) of thread side from perpendicular to
-//               axis (default = standard = 30 degrees).
-// taper       - diameter change per length (National Pipe Thread/ANSI B1.20.1
-//               is 1" diameter per 16" length). Taper decreases from 'diameter'
-//               as z increases.  Default: 0 (no taper).
-// leadin      - 0 (default): no chamfer; 1: chamfer (45 degree) at max-z end;
-//               2: chamfer at both ends, 3: chamfer at z=0 end.
-// leadfac     - scale of leadin chamfer length (default: 1.0 = 1/2 thread).
-// test        - true = do not render threads (just draw "blank" cylinder).
-//               Default: false (draw threads).
-module metric_thread (diameter=8, pitch=1, length=1, internal=false, n_starts=1,
-                      thread_size=-1, groove=false, square=false, rectangle=0,
-                      angle=30, taper=0, leadin=0, leadfac=1.0, test=false)
-{
-   // thread_size: size of thread "V" different than travel per turn (pitch).
-   // Default: same as pitch.
-   local_thread_size = thread_size == -1 ? pitch : thread_size;
-   local_rectangle = rectangle ? rectangle : 1;
-
-   n_segments = segments (diameter);
-   h = (test && ! internal) ? 0 : (square || rectangle) ? local_thread_size*local_rectangle/2 : local_thread_size / (2 * tan(angle));
-
-   h_fac1 = (square || rectangle) ? 0.90 : 0.625;
-
-   // External thread includes additional relief.
-   h_fac2 = (square || rectangle) ? 0.95 : 5.3/8;
-
-   tapered_diameter = diameter - length*taper;
-
-   difference () {
-      union () {
-         if (! groove) {
-            if (! test) {
-               metric_thread_turns (diameter, pitch, length, internal, n_starts,
-                                    local_thread_size, groove, square, rectangle, angle,
-                                    taper);
-            }
-         }
-
-         difference () {
-
-            // Solid center, including Dmin truncation.
-            if (groove) {
-               cylinder (r1=diameter/2, r2=tapered_diameter/2,
-                         h=length, $fn=n_segments);
-            } else if (internal) {
-               cylinder (r1=diameter/2 - h*h_fac1, r2=tapered_diameter/2 - h*h_fac1,
-                         h=length, $fn=n_segments);
-            } else {
-
-               // External thread.
-               cylinder (r1=diameter/2 - h*h_fac2, r2=tapered_diameter/2 - h*h_fac2,
-                         h=length, $fn=n_segments);
-            }
-
-            if (groove) {
-               if (! test) {
-                  metric_thread_turns (diameter, pitch, length, internal, n_starts,
-                                       local_thread_size, groove, square, rectangle,
-                                       angle, taper);
-               }
-            }
-         }
-
-         // Internal thread lead-in: take away from external solid.
-         if (internal) {
-
-            // "Negative chamfer" z=0 end if leadin is 2 or 3.
-            if (leadin == 2 || leadin == 3) {
-               cylinder (r1=diameter/2, r2=diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,
-                         $fn=n_segments);
-            }
-
-            // "Negative chamfer" z-max end if leadin is 1 or 2.
-            if (leadin == 1 || leadin == 2) {
-               translate ([0, 0, length + 0.05 - h*h_fac1*leadfac]) {
-                  cylinder (r1=tapered_diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,
-                            r2=tapered_diameter/2,
-                            $fn=n_segments);
-               }
-            }
-         }
-      }
-
-      if (! internal) {
-
-         // Chamfer z=0 end if leadin is 2 or 3.
-         if (leadin == 2 || leadin == 3) {
-            difference () {
-               cylinder (r=diameter/2 + 1, h=h*h_fac1*leadfac, $fn=n_segments);
-
-               cylinder (r2=diameter/2, r1=diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,
-                         $fn=n_segments);
-            }
-         }
-
-         // Chamfer z-max end if leadin is 1 or 2.
-         if (leadin == 1 || leadin == 2) {
-            translate ([0, 0, length + 0.05 - h*h_fac1*leadfac]) {
-               difference () {
-                  cylinder (r=diameter/2 + 1, h=h*h_fac1*leadfac, $fn=n_segments);
-
-                  cylinder (r1=tapered_diameter/2, r2=tapered_diameter/2 - h*h_fac1*leadfac, h=h*h_fac1*leadfac,
-                            $fn=n_segments);
-               }
-            }
-         }
-      }
-   }
-}
-
-
-// ----------------------------------------------------------------------------
-// Input units in inches.
-// Note: units of measure in drawing are mm!
-module english_thread (diameter=0.25, threads_per_inch=20, length=1,
-                      internal=false, n_starts=1, thread_size=-1, groove=false,
-                      square=false, rectangle=0, angle=30, taper=0, leadin=0,
-                      leadfac=1.0, test=false)
-{
-   // Convert to mm.
-   mm_diameter = diameter*25.4;
-   mm_pitch = (1.0/threads_per_inch)*25.4;
-   mm_length = length*25.4;
-
-   echo (str ("mm_diameter: ", mm_diameter));
-   echo (str ("mm_pitch: ", mm_pitch));
-   echo (str ("mm_length: ", mm_length));
-   metric_thread (mm_diameter, mm_pitch, mm_length, internal, n_starts,
-                  thread_size, groove, square, rectangle, angle, taper, leadin,
-                  leadfac, test);
-}
-
-// ----------------------------------------------------------------------------
-module metric_thread_turns (diameter, pitch, length, internal, n_starts,
-                            thread_size, groove, square, rectangle, angle,
-                            taper)
-{
-   // Number of turns needed.
-   n_turns = floor (length/pitch);
-
-   intersection () {
-
-      // Start one below z = 0.  Gives an extra turn at each end.
-      for (i=[-1*n_starts : n_turns+1]) {
-         translate ([0, 0, i*pitch]) {
-            metric_thread_turn (diameter, pitch, internal, n_starts,
-                                thread_size, groove, square, rectangle, angle,
-                                taper, i*pitch);
-         }
-      }
-
-      // Cut to length.
-      translate ([0, 0, length/2]) {
-         cube ([diameter*3, diameter*3, length], center=true);
-      }
-   }
-}
-
-
-// ----------------------------------------------------------------------------
-module metric_thread_turn (diameter, pitch, internal, n_starts, thread_size,
-                           groove, square, rectangle, angle, taper, z)
-{
-   n_segments = segments (diameter);
-   fraction_circle = 1.0/n_segments;
-   for (i=[0 : n_segments-1]) {
-      rotate ([0, 0, i*360*fraction_circle]) {
-         translate ([0, 0, i*n_starts*pitch*fraction_circle]) {
-            //current_diameter = diameter - taper*(z + i*n_starts*pitch*fraction_circle);
-            thread_polyhedron ((diameter - taper*(z + i*n_starts*pitch*fraction_circle))/2,
-                               pitch, internal, n_starts, thread_size, groove,
-                               square, rectangle, angle);
-         }
-      }
-   }
-}
-
-
-// ----------------------------------------------------------------------------
-module thread_polyhedron (radius, pitch, internal, n_starts, thread_size,
-                          groove, square, rectangle, angle)
-{
-   n_segments = segments (radius*2);
-   fraction_circle = 1.0/n_segments;
-
-   local_rectangle = rectangle ? rectangle : 1;
-
-   h = (square || rectangle) ? thread_size*local_rectangle/2 : thread_size / (2 * tan(angle));
-   outer_r = radius + (internal ? h/20 : 0); // Adds internal relief.
-   //echo (str ("outer_r: ", outer_r));
-
-   // A little extra on square thread -- make sure overlaps cylinder.
-   h_fac1 = (square || rectangle) ? 1.1 : 0.875;
-   inner_r = radius - h*h_fac1; // Does NOT do Dmin_truncation - do later with
-                                // cylinder.
-
-   translate_y = groove ? outer_r + inner_r : 0;
-   reflect_x   = groove ? 1 : 0;
-
-   // Make these just slightly bigger (keep in proportion) so polyhedra will
-   // overlap.
-   x_incr_outer = (! groove ? outer_r : inner_r) * fraction_circle * 2 * PI * 1.02;
-   x_incr_inner = (! groove ? inner_r : outer_r) * fraction_circle * 2 * PI * 1.02;
-   z_incr = n_starts * pitch * fraction_circle * 1.005;
-
-   /*
-    (angles x0 and x3 inner are actually 60 deg)
-
-                          /\  (x2_inner, z2_inner) [2]
-                         /  \
-   (x3_inner, z3_inner) /    \
-                  [3]   \     \
-                        |\     \ (x2_outer, z2_outer) [6]
-                        | \    /
-                        |  \  /|
-             z          |[7]\/ / (x1_outer, z1_outer) [5]
-             |          |   | /
-             |   x      |   |/
-             |  /       |   / (x0_outer, z0_outer) [4]
-             | /        |  /     (behind: (x1_inner, z1_inner) [1]
-             |/         | /
-    y________|          |/
-   (r)                  / (x0_inner, z0_inner) [0]
-
-   */
-
-   x1_outer = outer_r * fraction_circle * 2 * PI;
-
-   z0_outer = (outer_r - inner_r) * tan(angle);
-   //echo (str ("z0_outer: ", z0_outer));
-
-   //polygon ([[inner_r, 0], [outer_r, z0_outer],
-   //        [outer_r, 0.5*pitch], [inner_r, 0.5*pitch]]);
-   z1_outer = z0_outer + z_incr;
-
-   // Give internal square threads some clearance in the z direction, too.
-   bottom = internal ? 0.235 : 0.25;
-   top    = internal ? 0.765 : 0.75;
-
-   translate ([0, translate_y, 0]) {
-      mirror ([reflect_x, 0, 0]) {
-
-         if (square || rectangle) {
-
-            // Rule for face ordering: look at polyhedron from outside: points must
-            // be in clockwise order.
-            polyhedron (
-               points = [
-                         [-x_incr_inner/2, -inner_r, bottom*thread_size],         // [0]
-                         [x_incr_inner/2, -inner_r, bottom*thread_size + z_incr], // [1]
-                         [x_incr_inner/2, -inner_r, top*thread_size + z_incr],    // [2]
-                         [-x_incr_inner/2, -inner_r, top*thread_size],            // [3]
-
-                         [-x_incr_outer/2, -outer_r, bottom*thread_size],         // [4]
-                         [x_incr_outer/2, -outer_r, bottom*thread_size + z_incr], // [5]
-                         [x_incr_outer/2, -outer_r, top*thread_size + z_incr],    // [6]
-                         [-x_incr_outer/2, -outer_r, top*thread_size]             // [7]
-                        ],
-
-               faces = [
-                         [0, 3, 7, 4],  // This-side trapezoid
-
-                         [1, 5, 6, 2],  // Back-side trapezoid
-
-                         [0, 1, 2, 3],  // Inner rectangle
-
-                         [4, 7, 6, 5],  // Outer rectangle
-
-                         // These are not planar, so do with separate triangles.
-                         [7, 2, 6],     // Upper rectangle, bottom
-                         [7, 3, 2],     // Upper rectangle, top
-
-                         [0, 5, 1],     // Lower rectangle, bottom
-                         [0, 4, 5]      // Lower rectangle, top
-                        ]
-            );
-         } else {
-
-            // Rule for face ordering: look at polyhedron from outside: points must
-            // be in clockwise order.
-            polyhedron (
-               points = [
-                         [-x_incr_inner/2, -inner_r, 0],                        // [0]
-                         [x_incr_inner/2, -inner_r, z_incr],                    // [1]
-                         [x_incr_inner/2, -inner_r, thread_size + z_incr],      // [2]
-                         [-x_incr_inner/2, -inner_r, thread_size],              // [3]
-
-                         [-x_incr_outer/2, -outer_r, z0_outer],                 // [4]
-                         [x_incr_outer/2, -outer_r, z0_outer + z_incr],         // [5]
-                         [x_incr_outer/2, -outer_r, thread_size - z0_outer + z_incr], // [6]
-                         [-x_incr_outer/2, -outer_r, thread_size - z0_outer]    // [7]
-                        ],
-
-               faces = [
-                         [0, 3, 7, 4],  // This-side trapezoid
-
-                         [1, 5, 6, 2],  // Back-side trapezoid
-
-                         [0, 1, 2, 3],  // Inner rectangle
-
-                         [4, 7, 6, 5],  // Outer rectangle
-
-                         // These are not planar, so do with separate triangles.
-                         [7, 2, 6],     // Upper rectangle, bottom
-                         [7, 3, 2],     // Upper rectangle, top
-
-                         [0, 5, 1],     // Lower rectangle, bottom
-                         [0, 4, 5]      // Lower rectangle, top
-                        ]
-            );
-         }
-      }
-   }
-}

+ 0 - 13
2d3d/turm.scad

@@ -1,13 +0,0 @@
-x=50;
-
-c = [30,4,4];
-
-difference() {
-    union() {
-        for ( i = [ 0 : 1 : x]) {
-            rotate([0, 0, i*360/x]) translate([0, 0, i*c.z]) cube(c);
-        }
-    }
-    translate([0,0,-c.z]) cylinder(d=c.x, h=(x+3)*c.z);
-}
-

+ 0 - 47
2d3d/winkelverbinder.json

@@ -1,47 +0,0 @@
-{
-    "parameterSets": {
-        "D45-end2end": {
-            "$fn": "60",
-            "End2End": "true",
-            "FInline": "false",
-            "Fuehrung": "1.5",
-            "Kippen": "true",
-            "Nutentiefe": "3",
-            "Raster": "20",
-            "Schraube": "5",
-            "Steps": "12",
-            "Toleranz": "0.2",
-            "Winkel": "45"
-        },
-        "D45-nut-quer": {
-            "$fn": "60",
-            "End2End": "false",
-            "F_Inline": "false",
-            "F_TFoot": "false",
-            "Fuehrung": "1.5",
-            "Kippen": "true",
-            "Nutentiefe": "3",
-            "Raster": "20",
-            "Schraube": "5",
-            "Steps": "12",
-            "Toleranz": "0.2",
-            "Winkel": "45"
-        },
-        "D45-nut-quer-T": {
-            "$fn": "60",
-            "Bohrung": "false",
-            "End2End": "false",
-            "F_Inline": "false",
-            "F_TFoot": "true",
-            "Fuehrung": "1.5",
-            "Kippen": "true",
-            "Nutentiefe": "3",
-            "Raster": "20",
-            "Schraube": "5",
-            "Steps": "12",
-            "Toleranz": "0.2",
-            "Winkel": "45"
-        }
-    },
-    "fileFormatVersion": "1"
-}

+ 0 - 118
2d3d/winkelverbinder.scad

@@ -1,118 +0,0 @@
-
-/* [OpenSCAD] */
-$fn=60; // [30:6:180]
-
-/* [Profil] */
-
-// Aluprofil (quadratisch)
-Raster = 20; // [20,30]
-// Gewindebohrung metrisch
-Schraube = 5; // [5,6,8]
-
-/* [Verbinder] */
-// Winkel der Verbindung
-Winkel = 90; // [30:5:180]
-// Schritte in der Unterteilung
-Steps = 6; // [1:1:60]
-// Ende-zu-Ende (an) oder Ende-in-Führungsnut (aus)
-End2End = true;
-// Fuehrungsnuten "inline" (an) oder "quer" (aus)
-F_Inline = true;
-// Fuehrungsnuten "T" Fuß in der Nuten
-F_TFoot = false;
-// Mit Bohrung zum Festschrauben?
-Bohrung = false;
-// Tiefe der Führung in den Nuten
-Nutentiefe = 3; // [2,3,4,5]
-// Modell für den Slicer auf die Seite legen
-Kippen = true;
-
-/* [Hidden] */
-Toleranz = 0.2;
-Fuehrung=1.5;
-
-module plate(height=2) {
-  delta=Raster/2-1;
-  hull() {
-    for (i=[0,90,180,270]) {
-      rotate([0,0,i]) translate([delta,delta,0]) cylinder(d=2, h=height);
-    }
-  }
-}
-
-module endcap() {
-  // Grundplatte
-  plate();
-  // Führungsnupsis in den Nuten (Halbkreise)
-  intersection() {
-    for (i=[0,90,180,270]) {
-      rotate([0,0,i]) translate([Raster/2,0,-Nutentiefe/2]) cylinder( d=Schraube, h=Nutentiefe, center=true );
-    }
-    cube(Raster, center=true);
-  }
-  // Innen-Nippel D=80% von Bohrung < M5 Kernloch, doppelt so lang wie die Führungen außen
-  translate([0,0,-Nutentiefe]) cylinder(d=Schraube*4/5, h=2*Nutentiefe, center=true); 
-}
-
-module nutenfuehrung() {
-  if (F_TFoot==true) {
-    // T Fuehrung in Nut mit 2.2mm Wandbreite des Profils.
-    translate([(Raster-Schraube)/2,0,-1.1]) union() {
-      cube( [Schraube,Schraube-Toleranz,2.2], center=true );
-      translate([0,0,-2.2]) cube( [Schraube,Schraube-Toleranz+3,2.2], center=true );
-    }
-  }
-  else {
-    translate([(Raster-Schraube)/2,0,-Fuehrung/2]) cube( [Schraube,Schraube-Toleranz,Fuehrung], center=true );
-  }
-}
-
-module nutencap() {
-  plate();
-  if (F_Inline==true) {
-    for (i=[0,180]) {
-      rotate([0,0,i]) nutenfuehrung();
-    }
-  }
-  else {
-    for (i=[90,270]) {
-      rotate([0,0,i]) nutenfuehrung();
-    }
-  }
-}
-
-module fill_plate() {
-  translate([10,0,0]) plate(0.01);
-}
-
-module fuellung(angle) {
-  delta_angle = Winkel/Steps;
-  hull() {
-    rotate([0,-angle*delta_angle,0]) fill_plate();
-    rotate([0,-(angle-1)*delta_angle,0]) fill_plate();
-  }
-}
-
-// Auf die Seite legen, dann wird es beim Slicen einfacher
-turn90degree=(Kippen==true)?90:0;
-rotate([turn90degree,0,0]) 
-difference() {
-  union() {
-    color("red") translate([Raster/2,0,-2]) {
-      if (End2End==true) {
-        endcap();
-      }
-      else {
-        nutencap();
-      }
-    }
-    color("orange") rotate([0,-Winkel,0]) mirror([0,0,1]) translate([Raster/2,0,-2]) endcap();
-    color("green") for ( i = [1:1:Steps] ) fuellung(i);
-  }
-  if (Bohrung==true && End2End==false && F_TFoot==false) {
-    translate([Raster/2,0,0]) {
-    mirror([0,0,1]) cylinder(d=Schraube+Toleranz, h=Schraube, center=true);
-    translate([0,0,Toleranz]) cylinder(d=11, h=Raster);
-    }
-  }
-}

+ 0 - 78
2d3d/zapfen2.scad

@@ -1,78 +0,0 @@
-/* [General] */
-
-// Resolution
-$fn=120; // [36:6:180]
-
-/* [Outer and inner tubes] */
-// Diameter of outer tube.
-outer_tube_diameter = 22;
-// Wall thickness of the outer tube.
-outer_tube_wall = 2;
-// Diameter of inner tube.
-inner_tube_diameter = 20;
-// Wall thickness of the inner tube.
-inner_tube_wall = 2;
-
-/* [Bolt drilling] */
-// Diameter of the used screw
-drill_hole_diameter = 5;
-// Position measured from the end of the tube
-drill_hole_position = 20;
-
-/* [Rubber cord] */
-rubber_band_diameter = 2.5;
-
-/* [3D printput] */
-holder_wall_thickness = 1.5;
-
-/* [Hidden] */
-
-d_a = outer_tube_diameter;
-d_i = inner_tube_diameter - 2*inner_tube_wall;
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-
-module aussen() {
-  // Sockel angerundet
-  translate([0,0,-holder_wall_thickness]) union() {
-    cylinder( d=d_a, h=holder_wall_thickness );
-    hull() 
-      rotate_extrude() 
-        translate([ (d_a-holder_wall_thickness)/2, 0 ]) 
-          circle( d=holder_wall_thickness );
-  }
-  // Zapfen Außenform
-  hull() {
-    cylinder( d=d_i, h=holder_wall_thickness );
-    translate([0, 0, drill_hole_position+drill_hole_diameter]) 
-      sphere( d=d_i );
-  }
-}
-
-module innen() {
-  // Zapfen innen hohl
-  hull() {
-    translate([0, 0, -0.01]) 
-      cylinder( d=(d_i-2*holder_wall_thickness), h=holder_wall_thickness );
-    translate([0, 0, drill_hole_position+drill_hole_diameter]) 
-      sphere( d=(d_i-2*holder_wall_thickness) );
-  }
-  // Bohrung
-  translate([0, 0, drill_hole_position]) 
-    rotate([0, 90, 0]) 
-      cylinder( d1=drill_hole_diameter, d2=max(drill_hole_diameter, 3*rubber_band_diameter), h=(d_i+holder_wall_thickness), center=true);
-  // Schlitz um Gummi einzulegen
-  translate([0, -rubber_band_diameter/2, drill_hole_position]) 
-    cube([d_i, rubber_band_diameter, d_i]);
-  // Loch oben fürs Gummiband 
-  translate([0, 0, drill_hole_position]) 
-    cylinder( d=rubber_band_diameter, h=drill_hole_position);
-}
-
-difference() {
-  aussen();
-  innen();
-  //translate([-50,-100,-10]) cube(100); // Schnittsicht, Debug
-}

+ 217 - 0
AbsperrSchieber-160.svg

@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="841mm"
+   height="594mm"
+   viewBox="0 0 841 594"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="AbsperrSchieber-160.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showguides="true"
+     inkscape:zoom="0.5209506"
+     inkscape:cx="1805.3535"
+     inkscape:cy="1338.8985"
+     inkscape:window-width="1920"
+     inkscape:window-height="1002"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1"
+     showgrid="false">
+    <inkscape:grid
+       id="grid7"
+       units="mm"
+       originx="0"
+       originy="0"
+       spacingx="40"
+       spacingy="40"
+       empcolor="#0099e5"
+       empopacity="0.30196078"
+       color="#0099e5"
+       opacity="0.14901961"
+       empspacing="5"
+       dotted="false"
+       gridanglex="30"
+       gridanglez="30"
+       visible="false" />
+  </sodipodi:namedview>
+  <defs
+     id="defs1" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Helper"
+     style="display:none">
+    <path
+       id="rect1-0"
+       style="display:none;opacity:0.65;fill:#00ff00;stroke-width:0.264583;-inkscape-stroke:none"
+       d="m 313.88813,60.068673 10.00062,19.99982 v 0.0997 l 7.74578,17.03358 c 0.68142,1.49546 2.43919,2.16433 3.94239,1.50017 l 0.003,0.001 5.2e-4,10e-4 c 55.84627,-24.181546 120.64811,-24.234027 176.61558,0 l 5.1e-4,-10e-4 0.003,-0.001 c 1.50321,0.66417 3.26098,-0.005 3.9424,-1.50017 l 7.74578,-17.03358 v -0.0997 l 10.00042,-19.99982 h -110 z"
+       sodipodi:nodetypes="cccccccccccccccc" />
+  </g>
+  <g
+     inkscape:label="Gehäuse"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <path
+       id="path5"
+       style="opacity:0.65;fill:#999999;stroke-width:0.264582;-inkscape-stroke:none"
+       d="M 252.39025,48.486102 V 362.48606 h 263.9999 V 48.486102 Z m 22.0002,21.999691 h 110.00001 110 l -10.00042,19.999813 v 0.09973 l -7.74578,17.033584 c -0.68142,1.49516 -2.43919,2.16434 -3.9424,1.50017 l -0.003,0.001 -5.1e-4,10e-4 C 444.82809,97.053339 414.76096,90.886603 384.39056,91.009533 c -30.3704,-0.12293 -60.43767,6.043734 -88.30779,18.111557 l -5.2e-4,-10e-4 -0.003,-0.001 c -1.5032,0.66416 -3.26097,-0.005 -3.94239,-1.50017 l -7.74578,-17.033584 v -0.09973 z M 384.38994,290.4858 a 20,20 0 0 1 20.00033,19.99982 20,20 0 0 1 -20.00033,20.00033 20,20 0 0 1 -19.99981,-20.00033 20,20 0 0 1 19.99981,-19.99982 z" />
+    <path
+       id="path6"
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.264582;-inkscape-stroke:none"
+       d="m 384.39046,114.51153 a 76,76 0 0 1 76.00001,76.00001 76,76 0 0 1 -76.00001,76.00002 76,76 0 0 1 -76.00001,-76.00002 76,76 0 0 1 76.00001,-76.00001 z M 274.39045,70.485793 V 268.65871 l 58.36905,71.82714 h 102.78908 l 58.84188,-81.28238 V 70.485793 Z" />
+    <circle
+       style="display:inline;opacity:0.65;fill:#0000ff;stroke-width:0.264582;-inkscape-stroke:none"
+       id="circle8-6"
+       cx="449.79776"
+       cy="125.10416"
+       r="9.25" />
+    <circle
+       style="display:inline;opacity:0.65;fill:#0000ff;stroke-width:0.264582;-inkscape-stroke:none"
+       id="circle9-0"
+       cx="318.98306"
+       cy="125.10418"
+       r="9.25" />
+    <circle
+       style="display:inline;opacity:0.65;fill:#0000ff;stroke-width:0.264582;-inkscape-stroke:none"
+       id="circle10-6"
+       cx="318.98306"
+       cy="255.91888"
+       r="9.25" />
+    <circle
+       style="display:inline;opacity:0.65;fill:#0000ff;stroke-width:0.264582;-inkscape-stroke:none"
+       id="circle2-2"
+       cx="449.79776"
+       cy="255.91885"
+       r="9.25" />
+    <circle
+       style="font-variation-settings:normal;display:inline;opacity:0.65;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+       id="circle1-6"
+       cx="384.39011"
+       cy="310.48572"
+       r="3.25" />
+    <circle
+       style="font-variation-settings:normal;display:inline;opacity:0.65;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+       id="circle1-5"
+       cx="318.39023"
+       cy="85.485779"
+       r="3.25" />
+    <circle
+       style="font-variation-settings:normal;display:inline;opacity:0.65;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+       id="circle1-2"
+       cx="450.39023"
+       cy="85.485779"
+       r="3.25" />
+    <circle
+       style="font-variation-settings:normal;display:inline;opacity:0.65;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+       id="circle1-2-5"
+       cx="318.98306"
+       cy="125.10418"
+       r="3.25" />
+    <circle
+       style="font-variation-settings:normal;display:inline;opacity:0.65;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+       id="circle1-2-2"
+       cx="449.79776"
+       cy="125.10416"
+       r="3.25" />
+    <circle
+       style="font-variation-settings:normal;display:inline;opacity:0.65;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+       id="circle1-2-7"
+       cx="449.79776"
+       cy="255.91885"
+       r="3.25" />
+    <circle
+       style="font-variation-settings:normal;display:inline;opacity:0.65;vector-effect:none;fill:#ff0000;fill-opacity:1;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+       id="circle1-2-6"
+       cx="318.98306"
+       cy="255.91888"
+       r="3.25" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Schieber"
+     style="display:inline">
+    <path
+       id="path3"
+       style="display:inline;opacity:0.65;fill:#ff6600;stroke-width:0.264583;-inkscape-stroke:none"
+       d="m 384.42456,114.51127 c 41.97348,-1.9e-4 76.0002,34.02652 76.00025,76.00024 -6e-5,41.97374 -34.0263,75.99997 -75.99977,75.99976 -35.45766,-8e-5 -66.20445,-24.51914 -74.09461,-59.08802 -1.26636,-5.5481 -1.90559,-11.22143 -1.90562,-16.9122 4e-5,-41.97354 34.0265,-75.99972 75.99975,-75.99978 z m -0.0346,175.97453 c 11.04575,-1.8e-4 20.00023,8.95407 20.00033,19.99982 1.8e-4,11.04595 -8.95437,20.0005 -20.00033,20.00034 -8.08923,-1.2e-4 -15.38188,-4.87304 -18.47742,-12.34655 -1.0051,-2.42655 -1.52241,-5.02731 -1.5224,-7.65379 1.2e-4,-11.04556 8.95427,-19.99972 19.99982,-19.99982 z M 484.42415,90.510408 476.64588,107.61908 c -0.68143,1.49546 -2.43919,2.16434 -3.9424,1.50017 l -0.003,7.3e-4 -4.5e-4,9e-4 C 444.82866,97.053136 414.76164,90.886512 384.39111,91.00944 v 0 C 262.9047,91.0287 164.42506,189.0207 164.42507,310.51095 c 1e-5,19.233 2.55731,38.36774 7.53133,56.93088 l 0.47129,-0.12609 c 7.74168,29.36744 21.48004,56.81392 40.34999,80.6111 l -5.1e-4,5.2e-4 -6.4e-4,0.003 c 1.03087,1.28006 0.83983,3.1513 -0.4284,4.19664 l -14.44872,11.89023 -0.0961,0.0258 -5.3e-4,1e-5 v 5e-4 l 1.67381,6.24873 c 2.657,9.91614 12.77936,15.76044 22.69571,13.10334 l 129.99259,-34.83145 c 4.29226,-1.15011 7.81596,-3.70214 10.22315,-7.02749 l 0.005,0.004 143.53387,-198.27421 -0.0135,-0.0147 c 2.20123,-3.04802 3.5109,-6.78648 3.51091,-10.85 l 5.9e-4,-123.36009 c -1e-5,-10.266197 -8.26549,-18.531163 -18.5317,-18.531168 z" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Stutzen"
+     style="display:inline">
+    <circle
+       style="display:inline;opacity:0.65;fill:#00ffff;stroke-width:0.264581;-inkscape-stroke:none"
+       id="circle1"
+       cx="384.39044"
+       cy="190.51152"
+       r="105" />
+    <circle
+       style="opacity:0.65;fill:#00ff00;stroke-width:0.264582;-inkscape-stroke:none"
+       id="path1"
+       cx="384.39044"
+       cy="190.51152"
+       r="80" />
+    <circle
+       style="display:inline;opacity:0.65;fill:#ffff00;stroke-width:0.264581;-inkscape-stroke:none"
+       id="path6-5"
+       cx="384.39044"
+       cy="190.51152"
+       r="76" />
+    <circle
+       style="opacity:0.65;fill:#ff0000;stroke-width:0.264582;-inkscape-stroke:none"
+       id="path2"
+       cx="229.59308"
+       cy="406.51709"
+       r="3.25"
+       inkscape:transform-center-x="-65.407351"
+       transform="rotate(-45)"
+       inkscape:transform-center-y="-65.407368" />
+    <circle
+       style="opacity:0.65;fill:#ff0000;stroke-width:0.264582;-inkscape-stroke:none"
+       id="circle11"
+       cx="-314.01712"
+       cy="137.09309"
+       r="3.25"
+       inkscape:transform-center-x="65.407371"
+       transform="rotate(-135)"
+       inkscape:transform-center-y="-65.407357" />
+    <circle
+       style="opacity:0.65;fill:#ff0000;stroke-width:0.264582;-inkscape-stroke:none"
+       id="circle12"
+       cx="-44.593121"
+       cy="-406.51712"
+       r="3.25"
+       inkscape:transform-center-x="65.407349"
+       transform="rotate(135)"
+       inkscape:transform-center-y="65.407376" />
+    <circle
+       style="opacity:0.65;fill:#ff0000;stroke-width:0.264582;-inkscape-stroke:none"
+       id="circle13"
+       cx="499.01706"
+       cy="-137.09312"
+       r="3.25"
+       inkscape:transform-center-x="-65.407362"
+       transform="rotate(45)"
+       inkscape:transform-center-y="65.407333" />
+  </g>
+</svg>

+ 116 - 0
Balance_Wuerfel.svg

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="297mm"
+   height="210mm"
+   viewBox="0 0 297 210"
+   version="1.1"
+   id="svg1"
+   xml:space="preserve"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Balance_Wuerfel.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showguides="true"
+     inkscape:zoom="0.94191667"
+     inkscape:cx="530.83252"
+     inkscape:cy="389.10024"
+     inkscape:window-width="1920"
+     inkscape:window-height="1042"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" /><defs
+     id="defs1" /><g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-87)"><rect
+       style="opacity:0.4225;fill:#ff00ff;stroke-width:5.4529;-inkscape-stroke:none"
+       id="rect2"
+       width="200"
+       height="50"
+       x="48.5"
+       y="140.15294" /><g
+       id="g6"
+       transform="translate(-22.560224)"><g
+         id="g3"
+         transform="translate(122.00369,5.2135736)"><rect
+           style="opacity:0.4225;fill:#00ff00;stroke-width:0.153714;-inkscape-stroke:none"
+           id="rect3"
+           width="16"
+           height="16"
+           x="77.595421"
+           y="151.93936"
+           ry="1.2399657" /><circle
+           style="opacity:0.4225;fill:#ffff00;stroke-width:1.18225;-inkscape-stroke:none"
+           id="circle3"
+           cx="85.595421"
+           cy="159.93936"
+           r="8" /></g><g
+         id="g4"
+         transform="translate(97.644432,5.2135836)"><rect
+           style="opacity:0.4225;fill:#00ff00;stroke-width:0.153714;-inkscape-stroke:none"
+           id="rect4"
+           width="16"
+           height="16"
+           x="77.595421"
+           y="151.93936"
+           ry="1.2399657" /><circle
+           style="opacity:0.4225;fill:#ffff00;stroke-width:1.18225;-inkscape-stroke:none"
+           id="circle4"
+           cx="85.595421"
+           cy="159.93936"
+           r="8" /></g><g
+         id="g5"
+         transform="translate(73.285175,5.2135773)"><rect
+           style="opacity:0.4225;fill:#00ff00;stroke-width:0.153714;-inkscape-stroke:none"
+           id="rect5"
+           width="16"
+           height="16"
+           x="77.595421"
+           y="151.93936"
+           ry="1.2399657" /><circle
+           style="opacity:0.4225;fill:#ffff00;stroke-width:1.18225;-inkscape-stroke:none"
+           id="circle5"
+           cx="85.595421"
+           cy="159.93936"
+           r="8" /></g><g
+         id="g2"
+         transform="translate(48.925917,5.2135736)"><rect
+           style="opacity:0.4225;fill:#00ff00;stroke-width:0.153714;-inkscape-stroke:none"
+           id="rect1"
+           width="16"
+           height="16"
+           x="77.595421"
+           y="151.93936"
+           ry="1.2399657" /><circle
+           style="opacity:0.4225;fill:#ffff00;stroke-width:1.18225;-inkscape-stroke:none"
+           id="path1"
+           cx="85.595421"
+           cy="159.93936"
+           r="8" /></g></g><path
+       style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.111455;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:3.99942;stroke-dasharray:none;stroke-opacity:1"
+       d="m 160.67963,159.06398 c -1.60306,0 -2.905,1.30193 -2.905,2.90499 0,1.14186 0.65936,2.13005 1.61884,2.60377 0.28874,0.14256 -0.0263,0.5116 -0.23837,0.27242 -0.53245,-0.60066 -1.30898,-0.97968 -2.17417,-0.97968 -1.60306,0 -2.905,1.30192 -2.905,2.90499 0,1.60307 1.30194,2.90238 2.905,2.90238 1.59079,0 2.88824,-1.27955 2.905,-2.8657 0.003,-0.28138 0.43483,-0.31052 0.43483,0.0681 0,0.59625 -0.57322,3.76289 -0.88014,4.36667 0.335,-0.0845 0.89333,-0.15455 1.23901,-0.15455 0.34568,0 0.904,0.0701 1.23901,0.15455 -0.30693,-0.60378 -0.88014,-3.77042 -0.88014,-4.36667 0,-0.37862 0.43185,-0.34948 0.43483,-0.0681 0.0168,1.58615 1.31422,2.8657 2.905,2.8657 1.60306,0 2.90499,-1.29931 2.90499,-2.90238 0,-1.60307 -1.30193,-2.90499 -2.90499,-2.90499 -0.86519,0 -1.64172,0.37902 -2.17416,0.97968 -0.21203,0.23918 -0.52712,-0.12986 -0.23838,-0.27242 0.95948,-0.47372 1.61883,-1.46191 1.61883,-2.60377 0,-1.60306 -1.30192,-2.90499 -2.90499,-2.90499 z"
+       id="path3211" /><path
+       style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0557273;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.167182, 0.167182;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 185.03888,158.24559 c -3.34222,2.25865 -5.57273,6.57723 -5.57273,9.20422 0,1.36534 1.1103,2.56881 2.5939,2.56881 1.20143,0 2.22575,-1.09086 2.22575,-2.59392 0,-0.22654 0.11896,-0.32633 0.21757,-0.32633 0.12932,0 0.25938,0.18407 0.25938,0.53552 0,0.87109 -0.43736,3.08159 -1.0292,4.4264 0.34161,-0.10099 0.79716,-0.20081 1.30533,-0.20081 0.50818,0 0.9721,0.0998 1.3137,0.20081 -0.59185,-1.34481 -1.0292,-3.55531 -1.0292,-4.4264 0,-0.35145 0.13007,-0.53552 0.25938,-0.53552 0.0986,0 0.2092,0.0998 0.2092,0.32633 0,1.50306 1.03268,2.59392 2.23411,2.59392 1.48361,0 2.58555,-1.20347 2.58555,-2.56881 0,-2.62699 -2.23051,-6.94557 -5.57274,-9.20422 z"
+       id="path2401" /><path
+       style="fill:#0000ff;stroke:none;stroke-width:0.128105;stroke-linejoin:round"
+       d="m 133.62816,160.07949 c -1.64265,0 -2.97584,1.42306 -2.97584,3.17647 0,3.56704 3.37097,4.50229 5.66806,8.02877 2.17173,-3.50479 5.66805,-4.57556 5.66805,-8.02877 0,-1.75341 -1.33318,-3.17647 -2.97584,-3.17647 -1.19153,0 -2.21705,0.75097 -2.69221,1.83143 -0.47516,-1.08045 -1.50068,-1.83143 -2.69222,-1.83143 z"
+       id="path5" /><path
+       id="path3200"
+       d="m 111.96112,158.15294 c -1.24761,2.66165 -3.08705,5.00501 -5.57274,7 2.48569,1.99499 4.32514,4.33836 5.57274,7 1.24761,-2.66164 3.08705,-5.00501 5.57273,-7 -2.48568,-1.99499 -4.32512,-4.33835 -5.57273,-7 z"
+       style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0278637;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:3.99942;stroke-dasharray:none;stroke-opacity:1" /></g></svg>

+ 103 - 0
Beamer Stativ Halterung.svg

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="420mm"
+   height="297mm"
+   viewBox="0 0 420.00001 296.99999"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Beamer Stativ Halterung.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showguides="true"
+     inkscape:zoom="3.31258"
+     inkscape:cx="576.58984"
+     inkscape:cy="722.85046"
+     inkscape:window-width="1920"
+     inkscape:window-height="1002"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-21.105128,19.323411)">
+    <g
+       id="g32"
+       transform="rotate(-34.121922,158.5068,10.930831)"
+       inkscape:transform-center-x="75.559355"
+       inkscape:transform-center-y="-101.49997">
+      <path
+         id="rect8"
+         style="display:inline;opacity:0.65;fill:#ff0000;stroke-width:0.264581;-inkscape-stroke:none"
+         d="m -81.589233,93.167185 -3.5e-5,4.435736 -31.246922,46.113569 -167.8124,1.2e-4 -47.94071,-32.485 3.3e-4,-142.369836 19.07131,-28.145052 2.94512,-2e-5 89.04472,60.3374098 -10.09745,14.9016052 33.11354,22.437997 10.09744,-14.901605 z M -301.14976,-35.979319 a 1.75,1.75 0 0 0 -2.43036,0.467424 1.75,1.75 0 0 0 0.467,2.430075 1.75,1.75 0 0 0 2.4305,-0.466707 1.75,1.75 0 0 0 -0.46714,-2.430792 z m 189.21637,142.710329 a 1.75,1.75 0 0 0 -2.4305,0.46671 1.75,1.75 0 0 0 0.46743,2.43036 1.75,1.75 0 0 0 2.43007,-0.46699 1.75,1.75 0 0 0 -0.467,-2.43008 z m -131.77101,10.56047 a 2.1000642,2.1000642 0 0 0 -2.91666,0.5605 2.1000642,2.1000642 0 0 0 0.56051,2.91667 2.1000642,2.1000642 0 0 0 2.91666,-0.56051 2.1000642,2.1000642 0 0 0 -0.56051,-2.91666 z m -66.22793,-44.876575 a 2.1000642,2.1000642 0 0 0 -2.91666,0.560506 2.1000642,2.1000642 0 0 0 0.56051,2.916663 2.1000642,2.1000642 0 0 0 2.91666,-0.560506 2.1000642,2.1000642 0 0 0 -0.56051,-2.916663 z m 27.02761,31.420405 a 1.75,1.75 0 0 0 -2.43079,0.46713 1.75,1.75 0 0 0 0.46743,2.43037 1.75,1.75 0 0 0 2.43007,-0.467 1.75,1.75 0 0 0 -0.46671,-2.4305 z m 23.28071,28.03627 a 2.1000642,2.1000642 0 0 0 -2.91638,0.56007 2.1000642,2.1000642 0 0 0 0.56051,2.91667 2.1000642,2.1000642 0 0 0 2.91666,-0.56051 2.1000642,2.1000642 0 0 0 -0.56079,-2.91623 z m -57.94912,-39.266789 a 2.1000642,2.1000642 0 0 0 -2.91637,0.560078 2.1000642,2.1000642 0 0 0 0.5605,2.916664 2.1000642,2.1000642 0 0 0 2.91624,-0.560796 2.1000642,2.1000642 0 0 0 -0.56037,-2.915946 z"
+         transform="matrix(-0.82784618,-0.56095517,-0.56095517,0.82784618,0,0)" />
+      <path
+         style="opacity:0.65;fill:#ffff00;stroke-width:0.264582;-inkscape-stroke:none"
+         d="m 32.792369,152.89624 236.696021,-12 -93.53373,105.51038 z"
+         id="path7"
+         sodipodi:nodetypes="cccc"
+         inkscape:transform-center-x="-118.34801"
+         inkscape:transform-center-y="40.75519" />
+    </g>
+    <path
+       id="rect15"
+       style="display:none;opacity:0.65;fill:#ff00ff;stroke-width:0.264582;-inkscape-stroke:none"
+       d="m 125.42544,228.90666 v 34.99992 h 100.0001 v -34.99993 z m 15.00012,13.24983 a 4.25,4.25 0 0 1 4.24987,4.24987 4.25,4.25 0 0 1 -4.24987,4.24987 4.25,4.25 0 0 1 -4.24987,-4.24987 4.25,4.25 0 0 1 4.24987,-4.24987 z m 69.99986,0 a 4.25,4.25 0 0 1 4.24987,4.24987 4.25,4.25 0 0 1 -4.24987,4.24987 4.25,4.25 0 0 1 -4.24987,-4.24987 4.25,4.25 0 0 1 4.24987,-4.24987 z" />
+    <g
+       id="g31"
+       transform="translate(-2.2916127,-159.97264)">
+      <path
+         style="opacity:0.65;fill:#ff00ff;stroke-width:0.264582;-inkscape-stroke:none"
+         d="m 125.95461,228.90667 v 34.99992 h 100.0001 v -34.99993 z"
+         id="path16" />
+      <path
+         style="opacity:0.65;fill:#00ff00;stroke-width:0.264582;-inkscape-stroke:none"
+         d="m 215.95471,233.80665 a 2.1000642,2.1000642 0 0 1 2.1,2.1 2.1000642,2.1000642 0 0 1 -2.1,2.1 2.1000642,2.1000642 0 0 1 -2.1,-2.1 2.1000642,2.1000642 0 0 1 2.1,-2.1 z"
+         id="path18" />
+      <path
+         style="opacity:0.65;fill:#00ff00;stroke-width:0.264582;-inkscape-stroke:none"
+         d="m 165.95466,244.90662 a 1.5000458,1.5000458 0 0 1 1.5,1.5 1.5000458,1.5000458 0 0 1 -1.5,1.5 1.5000458,1.5000458 0 0 1 -1.5,-1.5 1.5000458,1.5000458 0 0 1 1.5,-1.5 z"
+         id="path18-29" />
+      <path
+         style="opacity:0.65;fill:#00ff00;stroke-width:0.264582;-inkscape-stroke:none"
+         d="m 210.9547,254.80661 a 2.1000642,2.1000642 0 0 1 2.1,2.10001 2.1000642,2.1000642 0 0 1 -2.1,2.09999 2.1000642,2.1000642 0 0 1 -2.1,-2.09999 2.1000642,2.1000642 0 0 1 2.1,-2.10001 z"
+         id="path18-2" />
+      <path
+         style="opacity:0.65;fill:#00ff00;stroke-width:0.264582;-inkscape-stroke:none"
+         d="m 140.95462,254.80661 a 2.1000642,2.1000642 0 0 1 2.1,2.10001 2.1000642,2.1000642 0 0 1 -2.1,2.09999 2.1000642,2.1000642 0 0 1 -2.1,-2.09999 2.1000642,2.1000642 0 0 1 2.1,-2.10001 z"
+         id="path18-9" />
+      <path
+         style="opacity:0.65;fill:#00ff00;stroke-width:0.264582;-inkscape-stroke:none"
+         d="m 135.95461,233.80665 a 2.1000642,2.1000642 0 0 1 2.1,2.1 2.1000642,2.1000642 0 0 1 -2.1,2.1 2.1000642,2.1000642 0 0 1 -2.1,-2.1 2.1000642,2.1000642 0 0 1 2.1,-2.1 z"
+         id="path18-97" />
+      <path
+         style="opacity:0.65;fill:#00ff00;stroke-width:0.264582;-inkscape-stroke:none"
+         d="m 175.95466,242.15675 a 4.25,4.25 0 0 1 4.24987,4.24987 4.25,4.25 0 0 1 -4.24987,4.24987 4.25,4.25 0 0 1 -4.24987,-4.24987 4.25,4.25 0 0 1 4.24987,-4.24987 z"
+         id="path17" />
+    </g>
+    <path
+       style="opacity:0.65;fill:#00ffff;stroke-width:0.264582;-inkscape-stroke:none"
+       d="m 133.663,75.934009 5,20.999961 35.00005,-10.499985 35.00004,10.499985 5,-20.999961 -50.00004,10.499971 z"
+       id="path32"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>

+ 0 - 0
2d3d/Borletti/0_BORLETTI-Kodierscheibe-V2.dxf → Borletti/0_BORLETTI-Kodierscheibe-V2.dxf


+ 0 - 0
2d3d/Borletti/0_BORLETTI-Kodierscheibe-V2.svg → Borletti/0_BORLETTI-Kodierscheibe-V2.svg


+ 0 - 0
2d3d/Borletti/0_borletti.scad → Borletti/0_borletti.scad


+ 0 - 0
2d3d/Borletti/borletti-2-zickzack.svg → Borletti/borletti-2-zickzack.svg


+ 0 - 0
2d3d/Borletti/borletti-3-zickzack.svg → Borletti/borletti-3-zickzack.svg


+ 0 - 0
2d3d/Borletti/borletti-4-zickzack.svg → Borletti/borletti-4-zickzack.svg


+ 0 - 0
2d3d/Borletti/borletti-lycrastich.svg → Borletti/borletti-lycrastich.svg


+ 0 - 0
2d3d/Borletti/borletti-overlock.svg → Borletti/borletti-overlock.svg


+ 0 - 0
2d3d/Borletti/borletti-universal.svg → Borletti/borletti-universal.svg


+ 0 - 0
2d3d/Borletti/borletti.scad → Borletti/borletti.scad


+ 0 - 0
2d3d/Borletti/kontrolle-blindstich.svg → Borletti/kontrolle-blindstich.svg


+ 0 - 0
2d3d/Calibrationtest.scad → Calibrationtest.scad


+ 0 - 0
2d3d/Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/1-update.SH4 → Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/1-update.SH4


+ 0 - 0
2d3d/Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/2-V2_P316_CTB_ZNP04_F23.CBD → Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/2-V2_P316_CTB_ZNP04_F23.CBD


+ 0 - 0
2d3d/Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/3-mars2-mainboard.txt → Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/3-mars2-mainboard.txt


+ 0 - 0
2d3d/Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/mars2ChiTu CN Mainboard SpecificationV3.0.920200902.gcode.txt → Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/Machine Firmware/mars2ChiTu CN Mainboard SpecificationV3.0.920200902.gcode.txt


+ 0 - 0
2d3d/Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/UI/4-MARS 2 Multi-Language-UI_ 2020914.bin → Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/UI/4-MARS 2 Multi-Language-UI_ 2020914.bin


+ 0 - 0
2d3d/Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/UI/5-MARS 2 Boot-Interface 480x320.logo → Elegoo/ELEGOO MARS 2 Firmware-V4.4.3_c2_LCDC_1620_2560_F9.23 20210709/UI/5-MARS 2 Boot-Interface 480x320.logo


+ 79 - 0
Frontplatte-11kW.svg

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="297mm"
+   height="210mm"
+   viewBox="0 0 297 210"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Frontplatte-11kW.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="3.8232317"
+     inkscape:cx="291.50731"
+     inkscape:cy="570.59058"
+     inkscape:window-width="1920"
+     inkscape:window-height="1042"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-87)">
+    <g
+       id="g6"
+       inkscape:label="trennschalter"
+       transform="translate(-173.83899,160.05751)">
+      <rect
+         style="opacity:0.65;fill:#00ff00;stroke-width:0.134297;-inkscape-stroke:none"
+         id="rect2"
+         width="40"
+         height="20"
+         x="66.895897"
+         y="127.2009" />
+      <path
+         id="path2"
+         style="opacity:0.65;fill:#ff00ff;stroke-width:0.300303;-inkscape-stroke:none"
+         d="M 86.896081,107.20069 A 30,30 0 0 0 56.895845,137.20093 30,30 0 0 0 86.896081,167.20065 30,30 0 0 0 116.8958,137.20093 30,30 0 0 0 86.896081,107.20069 Z m -8.495605,2.50011 h 16.991211 c 0.833402,0 1.504301,0.6709 1.504301,1.5043 v 18.49758 a 12.5,12.5 0 0 1 2.500106,7.49825 12.5,12.5 0 0 1 -2.500106,7.44657 v 18.54874 c 0,0.83341 -0.670899,1.5043 -1.504301,1.5043 H 78.400476 c -0.833401,0 -1.504301,-0.67089 -1.504301,-1.5043 V 144.6475 a 12.5,12.5 0 0 1 -2.500106,-7.44657 12.5,12.5 0 0 1 2.500106,-7.44709 V 111.2051 c 0,-0.8334 0.6709,-1.5043 1.504301,-1.5043 z M 66.895752,133.951 a 3.25,3.25 0 0 1 3.249931,3.24993 3.25,3.25 0 0 1 -3.249931,3.24993 3.25,3.25 0 0 1 -3.249931,-3.24993 3.25,3.25 0 0 1 3.249931,-3.24993 z m 40.000138,0 a 3.25,3.25 0 0 1 3.24993,3.24993 3.25,3.25 0 0 1 -3.24993,3.24993 3.25,3.25 0 0 1 -3.24993,-3.24993 3.25,3.25 0 0 1 3.24993,-3.24993 z" />
+      <path
+         id="rect1"
+         style="opacity:0.65;fill:#00ff00;stroke-width:0.226976;-inkscape-stroke:none"
+         d="m 78.400382,109.70094 c -0.833402,0 -1.5043,0.6709 -1.5043,1.5043 v 18.54874 a 12.5,12.5 0 0 0 -2.500106,7.44709 12.5,12.5 0 0 0 2.500106,7.44657 v 18.54874 c 0,0.83341 0.670898,1.5043 1.5043,1.5043 h 16.991211 c 0.833403,0 1.504301,-0.67089 1.504301,-1.5043 v -18.54874 a 12.5,12.5 0 0 0 2.500106,-7.44657 12.5,12.5 0 0 0 -2.500106,-7.49825 v -18.49758 c 0,-0.8334 -0.670898,-1.5043 -1.504301,-1.5043 z" />
+      <circle
+         style="opacity:0.65;fill:#ff0000;stroke-width:0.0325328;-inkscape-stroke:none"
+         id="circle2"
+         cx="66.895897"
+         cy="137.2009"
+         r="3.25" />
+      <circle
+         style="opacity:0.65;fill:#ff0000;stroke-width:0.0325328;-inkscape-stroke:none"
+         id="circle3"
+         cx="106.8959"
+         cy="137.2009"
+         r="3.25" />
+    </g>
+    <path
+       id="path7"
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.300303;-inkscape-stroke:none"
+       d="m 77.13669,116.04882 a 30,30 0 0 0 -30.00024,30.00024 30,30 0 0 0 30.00024,29.99972 30,30 0 0 0 29.99972,-29.99972 30,30 0 0 0 -29.99972,-30.00024 z m -8.49561,2.50011 H 85.6323 c 0.8334,0 1.5043,0.6709 1.5043,1.5043 v 18.49758 a 12.5,12.5 0 0 1 2.5001,7.49825 12.5,12.5 0 0 1 -2.5001,7.44657 v 18.54874 c 0,0.83341 -0.6709,1.5043 -1.5043,1.5043 H 68.64108 c -0.8334,0 -1.5043,-0.67089 -1.5043,-1.5043 v -18.54874 a 12.5,12.5 0 0 1 -2.5001,-7.44657 12.5,12.5 0 0 1 2.5001,-7.44709 v -18.54874 c 0,-0.8334 0.6709,-1.5043 1.5043,-1.5043 z m -11.50472,24.2502 a 3.25,3.25 0 0 1 3.24993,3.24993 3.25,3.25 0 0 1 -3.24993,3.24993 3.25,3.25 0 0 1 -3.24993,-3.24993 3.25,3.25 0 0 1 3.24993,-3.24993 z m 40.00014,0 a 3.25,3.25 0 0 1 3.24993,3.24993 3.25,3.25 0 0 1 -3.24993,3.24993 3.25,3.25 0 0 1 -3.24993,-3.24993 3.25,3.25 0 0 1 3.24993,-3.24993 z" />
+  </g>
+</svg>

+ 47 - 0
Halter-Laserfuss.svg

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="90.000198mm"
+   height="90.000191mm"
+   viewBox="0 0 90.000198 90.000191"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Halter-Laserfuss.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="1.2762345"
+     inkscape:cx="12.145104"
+     inkscape:cy="226.83919"
+     inkscape:window-width="1920"
+     inkscape:window-height="1002"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-51.792704,-117.63121)">
+    <path
+       id="path1"
+       style="opacity:0.65;fill:#0000ff;stroke-width:4.99999;-inkscape-stroke:none"
+       d="M 96.792542,117.63121 A 45,45 0 0 0 51.792704,162.63104 45,45 0 0 0 96.792542,207.6314 45,45 0 0 0 141.7929,162.63104 45,45 0 0 0 96.792542,117.63121 Z m 0,29.99971 A 15,15 0 0 1 111.79266,162.63104 15,15 0 0 1 96.792542,177.63116 15,15 0 0 1 81.79294,162.63104 15,15 0 0 1 96.792542,147.63092 Z m -29.99972,12.50002 a 2.5,2.5 0 0 1 2.500106,2.5001 2.5,2.5 0 0 1 -2.500106,2.50011 2.5,2.5 0 0 1 -2.500106,-2.50011 2.5,2.5 0 0 1 2.500106,-2.5001 z m 59.999958,0 a 2.5,2.5 0 0 1 2.5001,2.5001 2.5,2.5 0 0 1 -2.5001,2.50011 2.5,2.5 0 0 1 -2.50011,-2.50011 2.5,2.5 0 0 1 2.50011,-2.5001 z m -30.000238,30.00023 a 2.5,2.5 0 0 1 2.500105,2.50011 2.5,2.5 0 0 1 -2.500105,2.5001 2.5,2.5 0 0 1 -2.49959,-2.5001 2.5,2.5 0 0 1 2.49959,-2.50011 z" />
+  </g>
+</svg>

File diff suppressed because it is too large
+ 26 - 375
IG-KLETTERN-Logo-embroider.svg


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.dst → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.dst


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.exp → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.exp


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.jef → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.jef


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.pec → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.pec


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.pes → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.pes


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.svg → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.svg


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.txt → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.txt


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.u01 → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.u01


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.vp3 → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider.vp3


+ 0 - 0
2d3d/IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider_threadlist.txt → IG-KLETTERN-Logo-embroider/IG-KLETTERN-Logo-embroider_threadlist.txt


+ 106 - 0
Kindergarten-Puzzle-Kalender.1.svg

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="1189mm"
+   height="841mm"
+   viewBox="0 0 1189 841"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Kindergarten-Puzzle-Kalender.1.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showguides="true"
+     inkscape:zoom="0.63758056"
+     inkscape:cx="2956.4891"
+     inkscape:cy="1948.7733"
+     inkscape:window-width="1920"
+     inkscape:window-height="1002"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1">
+    <sodipodi:guide
+       position="567.1707,420.86598"
+       orientation="0,1"
+       id="guide1"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="567.17069,420.86598"
+       orientation="-0.49978718,0.86614824"
+       id="guide2"
+       inkscape:locked="false" />
+  </sodipodi:namedview>
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,544)">
+    <circle
+       style="opacity:0.65;fill:#ff0000;stroke-width:4.99999;-inkscape-stroke:none"
+       id="circle1"
+       cx="567.17072"
+       cy="-123.86597"
+       r="400" />
+    <circle
+       style="opacity:0.65;fill:#ffff00;stroke-width:4.99999;-inkscape-stroke:none"
+       id="path1"
+       cx="567.17072"
+       cy="-123.86597"
+       r="200" />
+    <path
+       sodipodi:type="star"
+       style="opacity:0.65;fill:#ffff00;stroke-width:5.2803;-inkscape-stroke:none"
+       id="path2"
+       inkscape:flatsided="true"
+       sodipodi:sides="12"
+       sodipodi:cx="2308.1228"
+       sodipodi:cy="1587.9081"
+       sodipodi:r1="1596.5652"
+       sodipodi:r2="1542.1635"
+       sodipodi:arg1="2.0051931e-13"
+       sodipodi:arg2="0.26179939"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 3904.688,1587.9081 -213.8992,798.2826 -584.3834,584.3834 -798.2826,213.8992 L 1509.8402,2970.5741 925.45679,2386.1907 711.55762,1587.9081 925.45679,789.62549 1509.8402,205.24207 2308.1228,-8.6571045 3106.4054,205.24207 3690.7888,789.62549 Z"
+       transform="matrix(0.25053784,0,0,0.25053784,-11.101396,-521.69703)"
+       inkscape:transform-center-x="1.743832e-05"
+       inkscape:transform-center-y="-1.23664e-05" />
+    <path
+       style="opacity:0.65;fill:#666666;stroke-width:4.99999;-inkscape-stroke:none"
+       d="m 767.17072,-123.86596 -26.77039,-99.95749 310.11647,-178.94416 34.8432,278.90162 z"
+       id="path3" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:4.99999;-inkscape-stroke:none"
+       id="rect3"
+       width="199.99998"
+       height="19.771648"
+       x="767.17072"
+       y="-123.86598" />
+    <path
+       id="rect4"
+       style="opacity:0.65;fill:#ff00ff;stroke-width:4.99999;-inkscape-stroke:none"
+       d="M 867.17084 -150.69119 A 35 10 0 0 0 832.17091 -140.69077 A 35 10 0 0 0 842.17082 -133.71755 L 842.17082 -123.86595 L 892.17087 -123.86595 L 892.17087 -133.71755 A 35 10 0 0 0 902.17077 -140.69077 A 35 10 0 0 0 867.17084 -150.69119 z " />
+    <path
+       id="path4"
+       style="opacity:0.65;fill:#ff00ff;stroke-width:4.99999;-inkscape-stroke:none"
+       d="m 813.56583,-297.09735 a 10,35 60 0 0 -25.31061,26.16058 10,35 60 0 0 12.14678,1.03903 l 4.9258,8.53174 43.30131,-25.00003 -4.9258,-8.53173 a 10,35 60 0 0 5.17356,-11.03894 10,35 60 0 0 -35.31104,8.83935 z"
+       inkscape:transform-center-x="-251.38894"
+       inkscape:transform-center-y="-160.79838" />
+  </g>
+</svg>

+ 48 - 0
Kindergarten-Puzzle-Kalender.2.svg

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="1189mm"
+   height="841mm"
+   viewBox="0 0 1189 841"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Kindergarten-Puzzle-Kalender.2.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showguides="true"
+     inkscape:zoom="0.77570135"
+     inkscape:cx="3077.8598"
+     inkscape:cy="1935.6676"
+     inkscape:window-width="1920"
+     inkscape:window-height="1002"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,544)">
+    <path
+       id="circle1"
+       style="opacity:0.65;fill:#ff0000;stroke-width:4.99999;-inkscape-stroke:none"
+       d="M 912.84299 -323.32716 L 848.66861 -286.29738 L 843.70354 -294.89789 C 848.30462 -299.70541 850.16087 -303.66631 848.87687 -305.93649 C 846.11607 -310.71996 830.30654 -306.76247 813.56584 -297.09724 C 796.82517 -287.43199 785.49305 -275.71921 788.25524 -270.93656 C 789.57929 -268.68951 793.93784 -268.31698 800.40179 -269.89787 L 805.36118 -261.30769 L 740.40028 -223.82368 L 740.50881 -223.4175 A 200 200 0 0 1 767.17074 -123.86595 L 842.17082 -123.86595 L 842.17082 -133.71755 A 35 10 0 0 1 832.17091 -140.69077 A 35 10 0 0 1 867.17084 -150.69119 A 35 10 0 0 1 902.17077 -140.69077 A 35 10 0 0 1 892.17087 -133.71755 L 892.17087 -123.86595 L 967.17094 -123.86595 A 400 400 0 0 0 912.84299 -323.32716 z " />
+  </g>
+</svg>

+ 47 - 0
Kindergarten-Schiene-Verbinder.2d.svg

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="12.50001mm"
+   height="35.000439mm"
+   viewBox="0 0 12.50001 35.000439"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Kindergarten-Schiene-Verbinder.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="4.1678175"
+     inkscape:cx="56.624361"
+     inkscape:cy="52.905388"
+     inkscape:window-width="1920"
+     inkscape:window-height="1002"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-142.31896,-182.70734)">
+    <path
+       id="rect8"
+       style="opacity:0.65;fill:#ff0000;stroke-width:4.99999;-inkscape-stroke:none"
+       d="m 148.56923,182.70734 a 6.25,6.25 0 0 0 -6.25027,6.25026 6.25,6.25 0 0 0 2.75022,5.16713 v 1.08262 5.00021 5.00021 1.08262 a 6.25,6.25 0 0 0 -2.75022,5.16713 6.25,6.25 0 0 0 6.25027,6.25026 6.25,6.25 0 0 0 6.24974,-6.25026 6.25,6.25 0 0 0 -2.7497,-5.16713 v -1.08262 -5.00021 -5.00021 -1.08262 a 6.25,6.25 0 0 0 2.7497,-5.16713 6.25,6.25 0 0 0 -6.24974,-6.25026 z" />
+  </g>
+</svg>

+ 9 - 0
Kindergarten-Schiene-Verbinder.3d.scad

@@ -0,0 +1,9 @@
+$fn=90;
+
+D=12.5;
+H=10;
+x=5.5;
+
+translate([+(D/2+x),0,0]) cylinder(h=H, d=D, center=true);
+translate([-(D/2+x),0,0]) cylinder(h=H, d=D, center=true);
+cube([3*x,7.0,H], center=true);

+ 61 - 0
Kindergarten-Schiene.svg

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="94.248413mm"
+   height="159.16187mm"
+   viewBox="0 0 94.248413 159.16187"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Kindergarten-Schiene.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showguides="true"
+     inkscape:zoom="0.86161192"
+     inkscape:cx="217.03507"
+     inkscape:cy="203.68799"
+     inkscape:window-width="1920"
+     inkscape:window-height="1002"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-770.51328,370.36667)">
+    <g
+       id="g10">
+      <path
+         id="path1"
+         style="opacity:0.65;fill:#ffff00;stroke-width:4.99998;-inkscape-stroke:none"
+         d="m 776.76396,-370.36667 a 6.25,6.25 0 0 0 -4.41989,1.83038 6.25,6.25 0 0 0 0,8.83925 6.25,6.25 0 0 0 5.59863,1.70894 l 0.76532,0.76585 3.53571,3.5357 -11.66699,11.66699 0.0682,0.16433 a 185,185 0 0 1 54.11711,130.65042 h 16.24965 v -5.49992 -1.20871 a 6.5,6.5 0 0 1 -2.7497,-5.29167 6.5,6.5 0 0 1 6.49986,-6.49986 6.5,6.5 0 0 1 6.49987,6.49986 6.5,6.5 0 0 1 -2.74971,5.29167 v 1.20871 5.49992 h 16.24966 A 225,225 0 0 0 798.8608,-370.30363 l -11.66699,11.66699 -3.5357,-3.5357 -0.76585,-0.76533 a 6.25,6.25 0 0 0 -1.70945,-5.5981 6.25,6.25 0 0 0 -4.41885,-1.8309 z" />
+      <path
+         id="circle5"
+         style="opacity:0.65;fill:none;stroke:#000000;stroke-width:5;stroke-dasharray:none;stroke-opacity:1"
+         d="m 832.26186,-211.20481 c -1.1e-4,-51.0541 -20.28135,-100.01713 -56.38209,-136.11779"
+         sodipodi:nodetypes="cc" />
+      <path
+         id="circle6"
+         style="font-variation-settings:normal;opacity:0.65;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+         d="m 857.26189,-211.20481 c 5e-5,-57.68458 -22.91501,-113.00658 -63.70413,-153.79578"
+         sodipodi:nodetypes="cc" />
+    </g>
+  </g>
+</svg>

+ 0 - 0
2d3d/Kreis-rund-1920.svg → Kreis-rund-1920.svg


+ 244 - 0
Lasercutter/Druckluft.svg

@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Druckluft.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showguides="true"
+     inkscape:zoom="4.1598333"
+     inkscape:cx="300.8534"
+     inkscape:cy="136.18334"
+     inkscape:window-width="1920"
+     inkscape:window-height="1042"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1">
+    <sodipodi:guide
+       position="44.565677,270.96568"
+       orientation="0,-1"
+       id="guide3"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="44.565677,268.59068"
+       orientation="0,-1"
+       id="guide4"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="44.565677,267.46568"
+       orientation="0,-1"
+       id="guide5"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="44.565677,260.96568"
+       orientation="0,-1"
+       id="guide6"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="44.565678,259.84067"
+       orientation="0,-1"
+       id="guide7"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="44.565677,257.46567"
+       orientation="0,-1"
+       id="guide8"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="88.817055,279.25648"
+       orientation="0,-1"
+       id="guide10"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="38.491451,259.43451"
+       orientation="1,0"
+       id="guide13"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="49.705682,259.84041"
+       orientation="1,0"
+       id="guide14"
+       inkscape:locked="false" />
+  </sodipodi:namedview>
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <circle
+       style="opacity:0.65;fill:#666666;stroke-width:0.143963"
+       id="path1"
+       cx="44.565678"
+       cy="32.784332"
+       r="6.75" />
+    <circle
+       style="opacity:0.65;fill:#00ff00;stroke-width:0.0933092"
+       id="circle1"
+       cx="44.565678"
+       cy="32.784332"
+       r="4.375" />
+    <circle
+       style="opacity:0.65;fill:#0000ff;stroke-width:0.0693154"
+       id="circle2"
+       cx="44.565678"
+       cy="32.784332"
+       r="3.25" />
+    <rect
+       style="opacity:0.65;fill:#00ff00;stroke-width:0.521254"
+       id="rect2"
+       width="3.5999999"
+       height="8.75"
+       x="89.33989"
+       y="28.409321" />
+    <rect
+       style="opacity:0.65;fill:#00ff00;stroke-width:0.140622"
+       id="rect10"
+       width="5.1008506"
+       height="2.9999955"
+       x="44.565548"
+       y="37.159332" />
+    <rect
+       style="opacity:0.65;fill:#00ff00;stroke-width:0.140622"
+       id="rect14"
+       width="5.1008506"
+       height="2.9999955"
+       x="39.464699"
+       y="37.159332" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:1.1802"
+       id="rect15"
+       width="15.5"
+       height="10.5"
+       x="73.83989"
+       y="27.534321" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:1.1802"
+       id="rect16"
+       width="15.5"
+       height="10.5"
+       x="92.939888"
+       y="27.534321" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:0.433301"
+       id="rect25"
+       width="5"
+       height="3"
+       x="88.639893"
+       y="23.034321"
+       ry="1.5" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:0.433301"
+       id="rect19"
+       width="5"
+       height="3"
+       x="98.189888"
+       y="22.377937"
+       ry="1.5" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:0.433301"
+       id="rect17"
+       width="5"
+       height="3"
+       x="79.08989"
+       y="22.377937"
+       ry="1.5" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.264583"
+       id="rect20"
+       width="4.762435"
+       height="2.1563833"
+       x="98.30867"
+       y="25.377937" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.264583"
+       id="rect18"
+       width="4.762435"
+       height="2.1563833"
+       x="79.208672"
+       y="25.377937" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:0.433301"
+       id="rect26"
+       width="5"
+       height="3"
+       x="88.639893"
+       y="-42.534321"
+       ry="1.5"
+       transform="scale(1,-1)" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:0.433301"
+       id="rect21"
+       width="5"
+       height="3"
+       x="98.189888"
+       y="-43.190704"
+       ry="1.5"
+       transform="scale(1,-1)" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:0.433301"
+       id="rect22"
+       width="5"
+       height="3"
+       x="79.08989"
+       y="-43.190704"
+       ry="1.5"
+       transform="scale(1,-1)" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.264583"
+       id="rect23"
+       width="4.762435"
+       height="2.1563833"
+       x="98.30867"
+       y="-40.190704"
+       transform="scale(1,-1)" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.264583"
+       id="rect24"
+       width="4.762435"
+       height="2.1563833"
+       x="79.208672"
+       y="-40.190704"
+       transform="scale(1,-1)" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.241417"
+       id="rect27"
+       width="3.5999999"
+       height="2.3750002"
+       x="89.33989"
+       y="26.034321" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.241417"
+       id="rect28"
+       width="3.5999999"
+       height="2.3750002"
+       x="89.33989"
+       y="37.159321" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:0.665643"
+       id="rect29"
+       width="10"
+       height="6.5"
+       x="63.83989"
+       y="29.534321" />
+  </g>
+</svg>

+ 83 - 0
Lasercutter/Halter2Schleppkette.svg

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="Halter2Schleppkette.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="4.0551469"
+     inkscape:cx="221.07707"
+     inkscape:cy="204.06166"
+     inkscape:window-width="1920"
+     inkscape:window-height="1042"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <rect
+       style="opacity:0.65;fill:#ff0000;stroke-width:1.60201"
+       id="rect4"
+       width="59.999992"
+       height="20"
+       x="24.888412"
+       y="38.028091"
+       ry="3.3631792" />
+    <rect
+       style="opacity:0.65;fill:#00ff00;stroke-width:0.110393"
+       id="rect1"
+       width="10"
+       height="20"
+       x="24.888412"
+       y="38.028091" />
+    <rect
+       style="opacity:0.65;fill:#ffff00;stroke-width:0.191206"
+       id="rect2"
+       width="30"
+       height="20"
+       x="34.888412"
+       y="38.028091" />
+    <rect
+       style="opacity:0.65;fill:#00ff00;stroke-width:0.156119"
+       id="rect3"
+       width="20"
+       height="20"
+       x="64.888412"
+       y="38.028091" />
+    <circle
+       style="opacity:0.65;fill:#ff0000;stroke-width:0.359434"
+       id="path3"
+       cx="34.888412"
+       cy="48.028091"
+       r="2.75" />
+    <circle
+       style="opacity:0.65;fill:#ff0000;stroke-width:0.274477"
+       id="circle3"
+       cx="64.888412"
+       cy="48.028091"
+       r="2.0999999" />
+  </g>
+</svg>

File diff suppressed because it is too large
+ 285 - 0
Lasercutter/LaserfussDuplo-V2.svg


File diff suppressed because it is too large
+ 43 - 0
Lasercutter/Laserhalter-Pur.svg


File diff suppressed because it is too large
+ 44 - 22
Lasercutter/Lichtschranke.svg


File diff suppressed because it is too large
+ 1 - 2
Lasercutter/MontagePlatte-Fest.svg


File diff suppressed because it is too large
+ 11 - 18
Lasercutter/MotorHalter.svg


+ 298 - 0
Lasercutter/NeutrikPanel.svg

@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="297mm"
+   height="210mm"
+   viewBox="0 0 297 210"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="NeutrikPanel.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showgrid="false"
+     inkscape:zoom="1.0323127"
+     inkscape:cx="378.27684"
+     inkscape:cy="230.06594"
+     inkscape:window-width="1920"
+     inkscape:window-height="1042"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g12"
+       transform="rotate(-90,98.856485,78.933404)">
+      <rect
+         style="opacity:0.65;fill:#ff8080;stroke-width:0.241738"
+         id="rect8"
+         width="26"
+         height="31"
+         x="34.889267"
+         y="28.712963"
+         ry="1.9" />
+      <g
+         id="g11">
+        <rect
+           style="opacity:0.65;fill:#ffff00;stroke-width:0.175891"
+           id="rect9"
+           width="19"
+           height="24"
+           x="38.389267"
+           y="32.212963" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.170313"
+           id="circle9"
+           cx="47.889267"
+           cy="44.212963"
+           r="11.85" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle10"
+           cx="38.389267"
+           cy="32.212963"
+           r="1.6" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle11"
+           cx="57.389267"
+           cy="56.212963"
+           r="1.6" />
+      </g>
+      <ellipse
+         style="opacity:0.65;fill:#0000ff;stroke-width:0.695318"
+         id="ellipse11"
+         cx="47.889267"
+         cy="32.362961"
+         rx="4"
+         ry="2.5" />
+    </g>
+    <g
+       id="g8">
+      <rect
+         style="opacity:0.65;fill:#ff8080;stroke-width:0.241738"
+         id="rect2"
+         width="26"
+         height="31"
+         x="34.889267"
+         y="28.712963"
+         ry="1.9" />
+      <g
+         id="g2">
+        <rect
+           style="opacity:0.65;fill:#ffff00;stroke-width:0.175891"
+           id="rect1"
+           width="19"
+           height="24"
+           x="38.389267"
+           y="32.212963" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.170313"
+           id="path1"
+           cx="47.889267"
+           cy="44.212963"
+           r="11.85" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle1"
+           cx="38.389267"
+           cy="32.212963"
+           r="1.6" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle2"
+           cx="57.389267"
+           cy="56.212963"
+           r="1.6" />
+      </g>
+      <ellipse
+         style="opacity:0.65;fill:#0000ff;stroke-width:0.695318"
+         id="path7"
+         cx="47.889267"
+         cy="32.362961"
+         rx="4"
+         ry="2.5" />
+    </g>
+    <g
+       id="g16"
+       transform="rotate(-90,116.85649,60.933401)">
+      <rect
+         style="opacity:0.65;fill:#ff8080;stroke-width:0.241738"
+         id="rect12"
+         width="26"
+         height="31"
+         x="34.889267"
+         y="28.712963"
+         ry="1.9" />
+      <g
+         id="g15">
+        <rect
+           style="opacity:0.65;fill:#ffff00;stroke-width:0.175891"
+           id="rect13"
+           width="19"
+           height="24"
+           x="38.389267"
+           y="32.212963" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.170313"
+           id="circle13"
+           cx="47.889267"
+           cy="44.212963"
+           r="11.85" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle14"
+           cx="38.389267"
+           cy="32.212963"
+           r="1.6" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle15"
+           cx="57.389267"
+           cy="56.212963"
+           r="1.6" />
+      </g>
+      <ellipse
+         style="opacity:0.65;fill:#0000ff;stroke-width:0.695318"
+         id="ellipse15"
+         cx="47.889267"
+         cy="32.362961"
+         rx="4"
+         ry="2.5" />
+    </g>
+    <g
+       id="g20"
+       transform="rotate(-90,134.85649,42.933401)">
+      <rect
+         style="opacity:0.65;fill:#ff8080;stroke-width:0.241738"
+         id="rect16"
+         width="26"
+         height="31"
+         x="34.889267"
+         y="28.712963"
+         ry="1.9" />
+      <g
+         id="g19">
+        <rect
+           style="opacity:0.65;fill:#ffff00;stroke-width:0.175891"
+           id="rect17"
+           width="19"
+           height="24"
+           x="38.389267"
+           y="32.212963" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.170313"
+           id="circle17"
+           cx="47.889267"
+           cy="44.212963"
+           r="11.85" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle18"
+           cx="38.389267"
+           cy="32.212963"
+           r="1.6" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle19"
+           cx="57.389267"
+           cy="56.212963"
+           r="1.6" />
+      </g>
+      <ellipse
+         style="opacity:0.65;fill:#0000ff;stroke-width:0.695318"
+         id="ellipse19"
+         cx="47.889267"
+         cy="32.362961"
+         rx="4"
+         ry="2.5" />
+    </g>
+    <g
+       id="g24"
+       transform="rotate(-90,152.85649,24.933407)">
+      <rect
+         style="opacity:0.65;fill:#ff8080;stroke-width:0.241738"
+         id="rect20"
+         width="26"
+         height="31"
+         x="34.889267"
+         y="28.712963"
+         ry="1.9" />
+      <g
+         id="g23">
+        <rect
+           style="opacity:0.65;fill:#ffff00;stroke-width:0.175891"
+           id="rect21"
+           width="19"
+           height="24"
+           x="38.389267"
+           y="32.212963" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.170313"
+           id="circle21"
+           cx="47.889267"
+           cy="44.212963"
+           r="11.85" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle22"
+           cx="38.389267"
+           cy="32.212963"
+           r="1.6" />
+        <circle
+           style="opacity:0.65;fill:#00ff00;stroke-width:0.0229959"
+           id="circle23"
+           cx="57.389267"
+           cy="56.212963"
+           r="1.6" />
+      </g>
+      <ellipse
+         style="opacity:0.65;fill:#0000ff;stroke-width:0.695318"
+         id="ellipse23"
+         cx="47.889267"
+         cy="32.362961"
+         rx="4"
+         ry="2.5" />
+    </g>
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.299812"
+       id="rect24"
+       width="5"
+       height="10"
+       x="79.636047"
+       y="124.90062" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.299812"
+       id="rect26"
+       width="5"
+       height="10"
+       x="151.63605"
+       y="124.90063" />
+    <rect
+       style="opacity:0.65;fill:#ff00ff;stroke-width:0.299812"
+       id="rect25"
+       width="5"
+       height="10"
+       x="115.63605"
+       y="124.90062" />
+  </g>
+</svg>

Some files were not shown because too many files changed in this diff