From 0518be5bee8de50307842eb8a2bfc194a9bfe43c Mon Sep 17 00:00:00 2001
From: Grace Kwak <gracekwak25@gmail.com>
Date: Sat, 21 Aug 2021 13:57:27 -0700
Subject: [PATCH] parameterized servomountandstack component

---
 .../boat/mounts/DoubleServoMountBuilder.py    |   4 +-
 .../boat/mounts/ServoMountAndStackBuilder.py  |  21 +-
 rocolib/library/DoubleServoMount.yaml         |  18 +-
 rocolib/library/ServoMountAndStack.yaml       | 218 +++---------------
 .../output/ServoMountAndStack/graph-anim.svg  |  12 +-
 .../graph-autofold-default.dxf                |  16 +-
 .../graph-autofold-graph.dxf                  |  16 +-
 .../ServoMountAndStack/graph-lasercutter.svg  |  12 +-
 .../ServoMountAndStack/graph-silhouette.dxf   |  16 +-
 9 files changed, 89 insertions(+), 244 deletions(-)

diff --git a/rocolib/builders/boat/mounts/DoubleServoMountBuilder.py b/rocolib/builders/boat/mounts/DoubleServoMountBuilder.py
index 7e1c6fd..91b6a04 100644
--- a/rocolib/builders/boat/mounts/DoubleServoMountBuilder.py
+++ b/rocolib/builders/boat/mounts/DoubleServoMountBuilder.py
@@ -7,9 +7,9 @@ c.addParameter("depth", 70, paramType="length")
 # c.addConstraint(("boat", "boat.width"), "width")
 # c.addConstraint(("boat", "boat.depth"), "depth")
 
-c.addSubcomponent("lServoMount", "SideServoMount", inherit=("depth","length"))
+c.addSubcomponent("lServoMount", "SideServoMount", inherit=("depth","length","width"))
 c.inheritAllInterfaces("lServoMount")
-c.addSubcomponent("rServoMount", "SideServoMount", inherit=("depth","length"))
+c.addSubcomponent("rServoMount", "SideServoMount", inherit=("depth","length","width"))
 c.inheritAllInterfaces("rServoMount")
 #Bottom belt
 c.addSubcomponent("lservodown", "Rectangle")
diff --git a/rocolib/builders/boat/mounts/ServoMountAndStackBuilder.py b/rocolib/builders/boat/mounts/ServoMountAndStackBuilder.py
index b5b6693..779645d 100644
--- a/rocolib/builders/boat/mounts/ServoMountAndStackBuilder.py
+++ b/rocolib/builders/boat/mounts/ServoMountAndStackBuilder.py
@@ -3,35 +3,28 @@ from rocolib.api.Function import Function
 
 c = Component()
 
-c.addSubcomponent("doubleServoMount", "DoubleServoMount", inherit=True, prefix=None)
+c.addSubcomponent("doubleServoMount", "DoubleServoMount", inherit=("lServoMount.depth","lServoMount.width"), prefix=None)
 c.inheritAllInterfaces("doubleServoMount")
-c.addSubcomponent("espStack", "StackMount", inherit=True)
-#c.inheritAllInterfaces("espStack")
+c.addSubcomponent("espStack", "StackMount", inherit="stack.length", prefix=None)
+c.inheritAllInterfaces("espStack")
 
 c.addSubcomponent("portsplit", "SplitEdge")
 c.inheritAllInterfaces("portsplit")
-c.addConstConstraint(("portsplit", "toplength"), (168,)) #(("doubleServoMount", "lServoMount.depth"), ("espStack", "stack.length")), "(x[0] + x[1],)"
-c.addConstConstraint(("portsplit", "botlength"), (61, 10, 24, 73)) #but the value of the new component's boat.length parameter is completely disconnected from the value of the boat component's boat.length parameter
+c.addConstraint(("portsplit", "toplength"), ("lServoMount.depth", "lServoMount.width", "stack.length"), "(x[0]*2+x[1]*2+10*2+x[2],)")
+c.addConstraint(("portsplit", "botlength"), ("lServoMount.depth", "lServoMount.width", "stack.length"), "(x[2], 10, x[0], x[0]+x[1]*2+10)")
 
 c.addConnection(("doubleServoMount", "lServoInterface"), ("portsplit", "botedge2")) #both face the same direction
 c.addConnection(("espStack", "leftArmInterface"), ("portsplit", "botedge0")) #both face the same direction
 
 c.addSubcomponent("starsplit", "SplitEdge")
 c.inheritAllInterfaces("starsplit")
-c.addConstConstraint(("starsplit", "toplength"), (168,))
-c.addConstConstraint(("starsplit", "botlength"), (73, 24, 10, 61)) #but the value of the new component's boat.length parameter is completely disconnected from the value of the boat component's boat.length parameter
+c.addConstraint(("starsplit", "toplength"), ("lServoMount.depth", "lServoMount.width", "stack.length"), "(x[0] * 2 + x[1] * 2  + 10 * 2 + x[2],)")
+c.addConstraint(("starsplit", "botlength"), ("lServoMount.depth", "lServoMount.width", "stack.length"), "(x[0]+x[1]*2+10, x[0], 10, x[2])")
 
 c.addConnection(("doubleServoMount", "rServoInterface"), ("starsplit", "botedge1"))
 c.addConnection(("espStack", "rightArmInterface"), ("starsplit", "botedge3"), tabWidth=10)
 
-# c.addSubcomponent("topStarSplit", "SplitEdge")
-# c.addConstraint(("topStarSplit", "toplength"), ("topDistance"), "(x,)")
-# c.addConstraint(("topStarSplit", "botlength"), ("topDistance", "espStack.stack.length"), "(x[0]-x[1], x[1])") #but the value of the new component's boat.length parameter is completely disconnected from the value of the boat component's boat.length parameter
-# c.addConnection(("topStarSplit", "topedge0"), ("boatwithservo", "topStar")) #both face the same direction
-# c.addConnection(("topStarSplit", "botedge1"), ("espStack", "rightArmInterface"), tabWidth=10)
-
 c.inheritInterface("lmountandservosplit", ("portsplit","topedge0"))
 c.inheritInterface("rmountandservosplit", ("starsplit","topedge0"))
-#c.inheritInterface("espMountTab", ("espStack", "rightArmInterface")) #need to add this onto the boat, not the splitEdge
 
 c.toLibrary("ServoMountAndStack")
diff --git a/rocolib/library/DoubleServoMount.yaml b/rocolib/library/DoubleServoMount.yaml
index 73a4d07..9bfacee 100644
--- a/rocolib/library/DoubleServoMount.yaml
+++ b/rocolib/library/DoubleServoMount.yaml
@@ -67,6 +67,12 @@ parameters:
       minValue: 0
       units: mm
       valueType: (float, int)
+  lServoMount.width:
+    defaultValue: 20
+    spec:
+      minValue: 0
+      units: mm
+      valueType: (float, int)
   rServoMount.depth:
     defaultValue: 24
     spec:
@@ -79,13 +85,19 @@ parameters:
       minValue: 0
       units: mm
       valueType: (float, int)
+  rServoMount.width:
+    defaultValue: 20
+    spec:
+      minValue: 0
+      units: mm
+      valueType: (float, int)
   width:
     defaultValue: 90
     spec:
       minValue: 0
       units: mm
       valueType: (float, int)
-source: ../builders/boat/DoubleServoMountBuilder.py
+source: ../builders/boat/mounts/DoubleServoMountBuilder.py
 subcomponents:
   lServoMount:
     classname: SideServoMount
@@ -95,6 +107,8 @@ subcomponents:
         parameter: lServoMount.depth
       length:
         parameter: lServoMount.length
+      width:
+        parameter: lServoMount.width
   lservoacross:
     classname: Rectangle
     kwargs: {}
@@ -123,6 +137,8 @@ subcomponents:
         parameter: rServoMount.depth
       length:
         parameter: rServoMount.length
+      width:
+        parameter: rServoMount.width
   rservoacross:
     classname: Rectangle
     kwargs: {}
diff --git a/rocolib/library/ServoMountAndStack.yaml b/rocolib/library/ServoMountAndStack.yaml
index 749f50e..0b35228 100644
--- a/rocolib/library/ServoMountAndStack.yaml
+++ b/rocolib/library/ServoMountAndStack.yaml
@@ -42,6 +42,12 @@ interfaces:
   doubleServoMount.rServoMount.rightInterface:
     interface: rServoMount.rightInterface
     subcomponent: doubleServoMount
+  espStack.leftArmInterface:
+    interface: leftArmInterface
+    subcomponent: espStack
+  espStack.rightArmInterface:
+    interface: rightArmInterface
+    subcomponent: espStack
   lmountandservosplit:
     interface: topedge0
     subcomponent: portsplit
@@ -1249,230 +1255,60 @@ interfaces:
     interface: topedge99
     subcomponent: starsplit
 parameters:
-  depth:
-    defaultValue: 70
-    spec:
-      minValue: 0
-      units: mm
-      valueType: (float, int)
-  espStack.depth:
-    defaultValue: 70
-    spec:
-      minValue: 0
-      units: mm
-      valueType: (float, int)
-  espStack.lArm._dx:
-    defaultValue: 0
-    spec:
-      minValue: null
-      units: mm
-      valueType: (float, int)
-  espStack.lArm._dy:
-    defaultValue: 0
-    spec:
-      minValue: null
-      units: mm
-      valueType: (float, int)
-  espStack.lArm._dz:
-    defaultValue: 0
-    spec:
-      minValue: null
-      units: mm
-      valueType: (float, int)
-  espStack.lArm._q_a:
-    defaultValue: 1
-    spec:
-      maxValue: 1
-      minValue: -1
-      valueType: (int, float)
-  espStack.lArm._q_i:
-    defaultValue: 0
-    spec:
-      maxValue: 1
-      minValue: -1
-      valueType: (int, float)
-  espStack.lArm._q_j:
-    defaultValue: 0
-    spec:
-      maxValue: 1
-      minValue: -1
-      valueType: (int, float)
-  espStack.lArm._q_k:
-    defaultValue: 0
-    spec:
-      maxValue: 1
-      minValue: -1
-      valueType: (int, float)
-  espStack.rArm._dx:
-    defaultValue: 0
-    spec:
-      minValue: null
-      units: mm
-      valueType: (float, int)
-  espStack.rArm._dy:
-    defaultValue: 0
-    spec:
-      minValue: null
-      units: mm
-      valueType: (float, int)
-  espStack.rArm._dz:
-    defaultValue: 0
-    spec:
-      minValue: null
-      units: mm
-      valueType: (float, int)
-  espStack.rArm._q_a:
-    defaultValue: 1
-    spec:
-      maxValue: 1
-      minValue: -1
-      valueType: (int, float)
-  espStack.rArm._q_i:
-    defaultValue: 0
-    spec:
-      maxValue: 1
-      minValue: -1
-      valueType: (int, float)
-  espStack.rArm._q_j:
-    defaultValue: 0
-    spec:
-      maxValue: 1
-      minValue: -1
-      valueType: (int, float)
-  espStack.rArm._q_k:
-    defaultValue: 0
-    spec:
-      maxValue: 1
-      minValue: -1
-      valueType: (int, float)
-  espStack.stack.brains:
-    defaultValue: esp32stack
-    spec:
-      valueType: str
-  espStack.stack.dy1:
-    defaultValue: 18
-    spec:
-      parameterType: length
-  espStack.stack.length:
-    defaultValue: 61
-    spec:
-      minValue: 0
-      units: mm
-      valueType: (float, int)
-  espStack.width:
-    defaultValue: 70
-    spec:
-      minValue: 0
-      units: mm
-      valueType: (float, int)
   lServoMount.depth:
     defaultValue: 24
     spec:
       minValue: 0
       units: mm
       valueType: (float, int)
-  lServoMount.length:
-    defaultValue: 34
+  lServoMount.width:
+    defaultValue: 20
     spec:
       minValue: 0
       units: mm
       valueType: (float, int)
-  rServoMount.depth:
-    defaultValue: 24
-    spec:
-      minValue: 0
-      units: mm
-      valueType: (float, int)
-  rServoMount.length:
-    defaultValue: 34
-    spec:
-      minValue: 0
-      units: mm
-      valueType: (float, int)
-  width:
-    defaultValue: 90
+  stack.length:
+    defaultValue: 61
     spec:
       minValue: 0
       units: mm
       valueType: (float, int)
-source: ../builders/boat/ServoMountAndStackBuilder.py
+source: ../builders/boat/mounts/ServoMountAndStackBuilder.py
 subcomponents:
   doubleServoMount:
     classname: DoubleServoMount
     kwargs: {}
     parameters:
-      depth:
-        parameter: depth
       lServoMount.depth:
         parameter: lServoMount.depth
-      lServoMount.length:
-        parameter: lServoMount.length
-      rServoMount.depth:
-        parameter: rServoMount.depth
-      rServoMount.length:
-        parameter: rServoMount.length
-      width:
-        parameter: width
+      lServoMount.width:
+        parameter: lServoMount.width
   espStack:
     classname: StackMount
     kwargs: {}
     parameters:
-      depth:
-        parameter: espStack.depth
-      lArm._dx:
-        parameter: espStack.lArm._dx
-      lArm._dy:
-        parameter: espStack.lArm._dy
-      lArm._dz:
-        parameter: espStack.lArm._dz
-      lArm._q_a:
-        parameter: espStack.lArm._q_a
-      lArm._q_i:
-        parameter: espStack.lArm._q_i
-      lArm._q_j:
-        parameter: espStack.lArm._q_j
-      lArm._q_k:
-        parameter: espStack.lArm._q_k
-      rArm._dx:
-        parameter: espStack.rArm._dx
-      rArm._dy:
-        parameter: espStack.rArm._dy
-      rArm._dz:
-        parameter: espStack.rArm._dz
-      rArm._q_a:
-        parameter: espStack.rArm._q_a
-      rArm._q_i:
-        parameter: espStack.rArm._q_i
-      rArm._q_j:
-        parameter: espStack.rArm._q_j
-      rArm._q_k:
-        parameter: espStack.rArm._q_k
-      stack.brains:
-        parameter: espStack.stack.brains
-      stack.dy1:
-        parameter: espStack.stack.dy1
       stack.length:
-        parameter: espStack.stack.length
-      width:
-        parameter: espStack.width
+        parameter: stack.length
   portsplit:
     classname: SplitEdge
     kwargs: {}
     parameters:
       botlength:
-      - 61
-      - 10
-      - 24
-      - 73
-      toplength: &id001
-      - 168
+        function: (x[2], 10, x[0], x[0]+x[1]*2+10)
+        parameter: &id001
+        - lServoMount.depth
+        - lServoMount.width
+        - stack.length
+      toplength:
+        function: (x[0]*2+x[1]*2+10*2+x[2],)
+        parameter: *id001
   starsplit:
     classname: SplitEdge
     kwargs: {}
     parameters:
       botlength:
-      - 73
-      - 24
-      - 10
-      - 61
-      toplength: *id001
+        function: (x[0]+x[1]*2+10, x[0], 10, x[2])
+        parameter: *id001
+      toplength:
+        function: (x[0] * 2 + x[1] * 2  + 10 * 2 + x[2],)
+        parameter: *id001
diff --git a/rocolib/output/ServoMountAndStack/graph-anim.svg b/rocolib/output/ServoMountAndStack/graph-anim.svg
index cb06156..348e573 100644
--- a/rocolib/output/ServoMountAndStack/graph-anim.svg
+++ b/rocolib/output/ServoMountAndStack/graph-anim.svg
@@ -11,11 +11,11 @@
   <line stroke="#000000" x1="115.00000000000001" x2="120.00000000000001" y1="98.00000000000001" y2="98.00000000000001"/>
   <line stroke="#000000" x1="0.0" x2="34.0" y1="98.00000000000001" y2="98.00000000000001"/>
   <line opacity="0.5" stroke="#0000ff" x1="34.0" x2="0.0" y1="74.0" y2="74.0"/>
-  <line stroke="#000000" x1="0.0" x2="0.0" y1="74.0" y2="1.0000000000000002"/>
+  <line stroke="#000000" x1="0.0" x2="0.0" y1="74.0" y2="0.0"/>
   <line stroke="#000000" x1="0.0" x2="0.0" y1="108.00000000000001" y2="98.00000000000001"/>
   <line stroke="#000000" x1="0.0" x2="0.0" y1="169.00000000000003" y2="169.00000000000003"/>
-  <line stroke="#000000" x1="0.0" x2="0.0" y1="1.0000000000000002" y2="169.00000000000003"/>
-  <line stroke="#000000" x1="0.0" x2="0.0" y1="1.0000000000000002" y2="1.0000000000000002"/>
+  <line stroke="#000000" x1="0.0" x2="0.0" y1="0.0" y2="169.00000000000003"/>
+  <line stroke="#000000" x1="0.0" x2="0.0" y1="0.0" y2="0.0"/>
   <line opacity="0.25" stroke="#0000ff" x1="36.138621999185304" x2="36.138621999185304" y1="108.00000000000001" y2="169.00000000000003"/>
   <line stroke="#000000" x1="0.0" x2="36.138621999185304" y1="169.00000000000003" y2="169.00000000000003"/>
   <line stroke="#000000" x1="36.138621999185304" x2="0.0" y1="108.00000000000001" y2="108.00000000000001"/>
@@ -102,9 +102,9 @@
   <line opacity="0.5" stroke="#0000ff" x1="130.0" x2="164.0" y1="98.00000000000001" y2="98.00000000000001"/>
   <line stroke="#000000" x1="130.0" x2="130.0" y1="64.00000000000001" y2="3.0000000000000004"/>
   <line stroke="#000000" x1="130.0" x2="130.0" y1="74.0" y2="64.00000000000001"/>
-  <line stroke="#000000" x1="130.0" x2="130.0" y1="171.00000000000003" y2="98.00000000000001"/>
-  <line stroke="#000000" x1="130.0" x2="130.0" y1="171.00000000000003" y2="171.00000000000003"/>
-  <line stroke="#000000" x1="130.0" x2="130.0" y1="3.0000000000000004" y2="171.00000000000003"/>
+  <line stroke="#000000" x1="130.0" x2="130.0" y1="172.00000000000003" y2="98.00000000000001"/>
+  <line stroke="#000000" x1="130.0" x2="130.0" y1="172.00000000000003" y2="172.00000000000003"/>
+  <line stroke="#000000" x1="130.0" x2="130.0" y1="3.0000000000000004" y2="172.00000000000003"/>
   <line stroke="#000000" x1="130.0" x2="130.0" y1="3.0000000000000004" y2="3.0000000000000004"/>
   <line stroke="#000000" x1="130.0" x2="130.0" y1="98.00000000000001" y2="118.00000000000001"/>
   <line stroke="#000000" x1="164.0" x2="164.0" y1="118.00000000000001" y2="98.00000000000001"/>
diff --git a/rocolib/output/ServoMountAndStack/graph-autofold-default.dxf b/rocolib/output/ServoMountAndStack/graph-autofold-default.dxf
index 42cea24..138411e 100644
--- a/rocolib/output/ServoMountAndStack/graph-autofold-default.dxf
+++ b/rocolib/output/ServoMountAndStack/graph-autofold-default.dxf
@@ -1175,7 +1175,7 @@ cut
  11
 0.0
  21
-1.0000000000000002
+0.0
  31
 0.0
   0
@@ -1223,7 +1223,7 @@ cut
  10
 0.0
  20
-1.0000000000000002
+0.0
  30
 0.0
  11
@@ -1241,13 +1241,13 @@ cut
  10
 0.0
  20
-1.0000000000000002
+0.0
  30
 0.0
  11
 0.0
  21
-1.0000000000000002
+0.0
  31
 0.0
   0
@@ -2823,7 +2823,7 @@ cut
  10
 130.0
  20
-171.00000000000003
+172.00000000000003
  30
 0.0
  11
@@ -2841,13 +2841,13 @@ cut
  10
 130.0
  20
-171.00000000000003
+172.00000000000003
  30
 0.0
  11
 130.0
  21
-171.00000000000003
+172.00000000000003
  31
 0.0
   0
@@ -2865,7 +2865,7 @@ cut
  11
 130.0
  21
-171.00000000000003
+172.00000000000003
  31
 0.0
   0
diff --git a/rocolib/output/ServoMountAndStack/graph-autofold-graph.dxf b/rocolib/output/ServoMountAndStack/graph-autofold-graph.dxf
index 65512a4..1a7f733 100644
--- a/rocolib/output/ServoMountAndStack/graph-autofold-graph.dxf
+++ b/rocolib/output/ServoMountAndStack/graph-autofold-graph.dxf
@@ -1135,7 +1135,7 @@ LINE
  11
 0.0
  21
-1.0000000000000002
+0.0
  31
 0.0
   0
@@ -1183,7 +1183,7 @@ LINE
  10
 0.0
  20
-1.0000000000000002
+0.0
  30
 0.0
  11
@@ -1201,13 +1201,13 @@ LINE
  10
 0.0
  20
-1.0000000000000002
+0.0
  30
 0.0
  11
 0.0
  21
-1.0000000000000002
+0.0
  31
 0.0
   0
@@ -2783,7 +2783,7 @@ LINE
  10
 130.0
  20
-171.00000000000003
+172.00000000000003
  30
 0.0
  11
@@ -2801,13 +2801,13 @@ LINE
  10
 130.0
  20
-171.00000000000003
+172.00000000000003
  30
 0.0
  11
 130.0
  21
-171.00000000000003
+172.00000000000003
  31
 0.0
   0
@@ -2825,7 +2825,7 @@ LINE
  11
 130.0
  21
-171.00000000000003
+172.00000000000003
  31
 0.0
   0
diff --git a/rocolib/output/ServoMountAndStack/graph-lasercutter.svg b/rocolib/output/ServoMountAndStack/graph-lasercutter.svg
index cd575c1..755cd98 100644
--- a/rocolib/output/ServoMountAndStack/graph-lasercutter.svg
+++ b/rocolib/output/ServoMountAndStack/graph-lasercutter.svg
@@ -11,11 +11,11 @@
   <line stroke="#000000" x1="115.00000000000001" x2="120.00000000000001" y1="98.00000000000001" y2="98.00000000000001"/>
   <line stroke="#000000" x1="0.0" x2="34.0" y1="98.00000000000001" y2="98.00000000000001"/>
   <line stroke="#0000ff" stroke-dasharray="2 6" stroke-dashoffset="5" x1="34.0" x2="0.0" y1="74.0" y2="74.0"/>
-  <line stroke="#000000" x1="0.0" x2="0.0" y1="74.0" y2="1.0000000000000002"/>
+  <line stroke="#000000" x1="0.0" x2="0.0" y1="74.0" y2="0.0"/>
   <line stroke="#000000" x1="0.0" x2="0.0" y1="108.00000000000001" y2="98.00000000000001"/>
   <line stroke="#000000" x1="0.0" x2="0.0" y1="169.00000000000003" y2="169.00000000000003"/>
-  <line stroke="#000000" x1="0.0" x2="0.0" y1="1.0000000000000002" y2="169.00000000000003"/>
-  <line stroke="#000000" x1="0.0" x2="0.0" y1="1.0000000000000002" y2="1.0000000000000002"/>
+  <line stroke="#000000" x1="0.0" x2="0.0" y1="0.0" y2="169.00000000000003"/>
+  <line stroke="#000000" x1="0.0" x2="0.0" y1="0.0" y2="0.0"/>
   <line stroke="#0000ff" stroke-dasharray="2 6" stroke-dashoffset="5" x1="36.138621999185304" x2="36.138621999185304" y1="108.00000000000001" y2="169.00000000000003"/>
   <line stroke="#000000" x1="0.0" x2="36.138621999185304" y1="169.00000000000003" y2="169.00000000000003"/>
   <line stroke="#000000" x1="36.138621999185304" x2="0.0" y1="108.00000000000001" y2="108.00000000000001"/>
@@ -102,9 +102,9 @@
   <line stroke="#0000ff" stroke-dasharray="2 6" stroke-dashoffset="5" x1="130.0" x2="164.0" y1="98.00000000000001" y2="98.00000000000001"/>
   <line stroke="#000000" x1="130.0" x2="130.0" y1="64.00000000000001" y2="3.0000000000000004"/>
   <line stroke="#000000" x1="130.0" x2="130.0" y1="74.0" y2="64.00000000000001"/>
-  <line stroke="#000000" x1="130.0" x2="130.0" y1="171.00000000000003" y2="98.00000000000001"/>
-  <line stroke="#000000" x1="130.0" x2="130.0" y1="171.00000000000003" y2="171.00000000000003"/>
-  <line stroke="#000000" x1="130.0" x2="130.0" y1="3.0000000000000004" y2="171.00000000000003"/>
+  <line stroke="#000000" x1="130.0" x2="130.0" y1="172.00000000000003" y2="98.00000000000001"/>
+  <line stroke="#000000" x1="130.0" x2="130.0" y1="172.00000000000003" y2="172.00000000000003"/>
+  <line stroke="#000000" x1="130.0" x2="130.0" y1="3.0000000000000004" y2="172.00000000000003"/>
   <line stroke="#000000" x1="130.0" x2="130.0" y1="3.0000000000000004" y2="3.0000000000000004"/>
   <line stroke="#000000" x1="130.0" x2="130.0" y1="98.00000000000001" y2="118.00000000000001"/>
   <line stroke="#000000" x1="164.0" x2="164.0" y1="118.00000000000001" y2="98.00000000000001"/>
diff --git a/rocolib/output/ServoMountAndStack/graph-silhouette.dxf b/rocolib/output/ServoMountAndStack/graph-silhouette.dxf
index 88a2003..ecd7846 100644
--- a/rocolib/output/ServoMountAndStack/graph-silhouette.dxf
+++ b/rocolib/output/ServoMountAndStack/graph-silhouette.dxf
@@ -1135,7 +1135,7 @@ LINE
  11
 0.0
  21
-1.0000000000000002
+0.0
  31
 0.0
   0
@@ -1183,7 +1183,7 @@ LINE
  10
 0.0
  20
-1.0000000000000002
+0.0
  30
 0.0
  11
@@ -1201,13 +1201,13 @@ LINE
  10
 0.0
  20
-1.0000000000000002
+0.0
  30
 0.0
  11
 0.0
  21
-1.0000000000000002
+0.0
  31
 0.0
   0
@@ -2783,7 +2783,7 @@ LINE
  10
 130.0
  20
-171.00000000000003
+172.00000000000003
  30
 0.0
  11
@@ -2801,13 +2801,13 @@ LINE
  10
 130.0
  20
-171.00000000000003
+172.00000000000003
  30
 0.0
  11
 130.0
  21
-171.00000000000003
+172.00000000000003
  31
 0.0
   0
@@ -2825,7 +2825,7 @@ LINE
  11
 130.0
  21
-171.00000000000003
+172.00000000000003
  31
 0.0
   0
-- 
GitLab