Classify Beziers, use DeCasteljau for CPU renderer
authorSam Moore <[email protected]>
Mon, 1 Sep 2014 12:55:55 +0000 (20:55 +0800)
committerSam Moore <[email protected]>
Mon, 1 Sep 2014 12:55:55 +0000 (20:55 +0800)
I don't know how glDrawLines does it, but I can't get rid of the wiggles in straight lines done using CPU renderer.
So I switched to DeCasteljau.

Then I made it classify the lines and only use one Bresenham instead of 100 anyway.

src/bezier.cpp
src/bezier.h
src/objectrenderer.cpp
src/rational.h
src/real.h
src/svg-tests/fox_simple.svg [new file with mode: 0644]
src/svg-tests/kinematic_diagram.svg [new file with mode: 0644]
src/svg-tests/lines.svg

index 3fa16e3..9d24672 100644 (file)
@@ -166,8 +166,8 @@ pair<Real, Real> BezierTurningPoints(const Real & p0, const Real & p1, const Rea
        {
                return pair<Real,Real>(0, 1);
        }
-       Real a = (3*(p1-p2) + p3 - p0);
-       Real b = 2*(p2 - 2*p1 + p0);
+       Real a = ((p1-p2)*3 + p3 - p0);
+       Real b = (p2 - p1*2 + p0)*2;
        Real c = (p1-p0);
        if (a == 0)
        {
@@ -179,7 +179,7 @@ pair<Real, Real> BezierTurningPoints(const Real & p0, const Real & p1, const Rea
                return pair<Real, Real>(t, t);
        }
        //Debug("a, b, c are %f, %f, %f", Float(a), Float(b), Float(c));
-       if (b*b - 4*a*c < 0)
+       if (b*b - a*c*4 < 0)
        {
                //Debug("No real roots");
                return pair<Real, Real>(0,1);
index 7ff4f87..a7124af 100644 (file)
@@ -25,16 +25,72 @@ namespace IPDF
                Real x2; Real y2;
                Real x3; Real y3;
                
-               typedef enum {LINE, QUADRATIC, CUSP, LOOP, SERPENTINE} Type;
+               typedef enum {UNKNOWN, LINE, QUADRATIC, CUSP, LOOP, SERPENTINE} Type;
                Type type;
                
                Bezier() = default; // Needed so we can fread/fwrite this struct... for now.
-               Bezier(Real _x0, Real _y0, Real _x1, Real _y1, Real _x2, Real _y2, Real _x3, Real _y3) : x0(_x0), y0(_y0), x1(_x1), y1(_y1), x2(_x2), y2(_y2), x3(_x3), y3(_y3) 
+               Bezier(Real _x0, Real _y0, Real _x1, Real _y1, Real _x2, Real _y2, Real _x3, Real _y3) : x0(_x0), y0(_y0), x1(_x1), y1(_y1), x2(_x2), y2(_y2), x3(_x3), y3(_y3), type(UNKNOWN)
                {
-                       //TODO: classify the curve
-                       type = SERPENTINE;
+
                }
                
+               const Type & GetType()
+               {
+                       if (type != Bezier::UNKNOWN)
+                               return type;
+                       // From Loop-Blinn 2005, with w0 == w1 == w2 == w3 = 1
+                       // Transformed control points: (a0 = x0, b0 = y0)
+                       Real a1 = (x1-x0)*3;
+                       Real a2 = (x0- x1*2 +x2)*3;
+                       Real a3 = (x3 - x0 + (x1 - x2)*3);
+                       
+                       Real b1 = (y1-y0)*3;
+                       Real b2 = (y0- y1*2 +y2)*3;
+                       Real b3 = (y3 - y0 + (y1 - y2)*3);
+                       
+                       // d vector (d0 = 0 since all w = 1)
+                       Real d1 = a2*b3 - a3*b2;
+                       Real d2 = a3*b1 - a1*b3;
+                       Real d3 = a1*b2 - a2*b1;
+                       
+                       if (d1 == d2 && d2 == d3 && d3 == 0)
+                       {
+                               type = LINE;
+                               //Debug("LINE %s", Str().c_str());
+                               return type;
+                       }
+                       
+                       Real delta1 = -d1*d1;
+                       Real delta2 = d1*d2;
+                       Real delta3 = d1*d3 -d2*d2;
+                       if (delta1 == delta2 && delta2 == delta3 && delta3 == 0)
+                       {
+                               type = QUADRATIC;
+                               
+                               //Debug("QUADRATIC %s", Str().c_str());
+                               return type;
+                       }
+                       
+                       Real discriminant = d1*d3*4 -d2*d2;
+                       if (discriminant == 0)
+                       {
+                               type = CUSP;
+                               //Debug("CUSP %s", Str().c_str());
+                       }
+                       else if (discriminant > 0)
+                       {
+                               type = SERPENTINE;
+                               //Debug("SERPENTINE %s", Str().c_str());
+                       }
+                       else
+                       {
+                               type = LOOP;
+                               //Debug("LOOP %s", Str().c_str());
+                       }
+                       return type;
+               }
+               
+               
                std::string Str() const
                {
                        std::stringstream s;
@@ -46,7 +102,7 @@ namespace IPDF
                 * Construct absolute control points using relative control points to a bounding rectangle
                 * ie: If cpy is relative to bounds rectangle, this will be absolute
                 */
-               Bezier(const Bezier & cpy, const Rect & t = Rect(0,0,1,1)) : x0(cpy.x0), y0(cpy.y0), x1(cpy.x1), y1(cpy.y1), x2(cpy.x2),y2(cpy.y2), x3(cpy.x3), y3(cpy.y3), type(cpy.type)
+               Bezier(const Bezier & cpy, const Rect & t = Rect(0,0,1,1)) : x0(cpy.x0), y0(cpy.y0), x1(cpy.x1), y1(cpy.y1), x2(cpy.x2),y2(cpy.y2), x3(cpy.x3), y3(cpy.y3), type(UNKNOWN)
                {
                        x0 *= t.w;
                        y0 *= t.h;
index f39bae8..4e59cd0 100644 (file)
@@ -7,6 +7,7 @@
 #include "view.h"
 #include <vector>
 #include <queue>
+#include <stack>
 
 using namespace std;
 
@@ -254,36 +255,50 @@ void BezierRenderer::RenderUsingCPU(const Objects & objects, const View & view,
                                                                                
 
                
-               Real x[2]; Real y[2];
-               control.Evaluate(x[0], y[0], Real(0));
-               //Debug("target is (%lu, %lu)", target.w, target.h);
-               int64_t blen = min(max((int64_t)2, (int64_t)(target.w/view.GetBounds().w)), (int64_t)100);
+       
+               unsigned blen = min(max(2U, (unsigned)(target.w/view.GetBounds().w)), min((unsigned)(pix_bounds.w+pix_bounds.h)/4 + 1, 100U));
                
-               Real invblen(1); invblen /= blen;
-               //Debug("Using %li lines, inverse %f", blen, Double(invblen));
-               for (int64_t j = 1; j <= blen; ++j)
+               // DeCasteljau Divide the Bezier
+               queue<Bezier> divisions;
+               divisions.push(control);
+               while(divisions.size() < blen)
                {
-                       control.Evaluate(x[j % 2],y[j % 2], invblen*j);
-                       ObjectRenderer::RenderLineOnCPU((int64_t)Double(x[0]),(int64_t)Double(y[0]), (int64_t)Double(x[1]),(int64_t)Double(y[1]), target, Colour(0,0,0,!view.PerformingShading()));
+                       Bezier & current = divisions.front();
+                       if (current.GetType() == Bezier::LINE)
+                       {
+                               --blen;
+                               continue;
+                       }
+                       divisions.push(current.DeCasteljauSubdivideRight(Real(1)/Real(2)));     
+                       divisions.push(current.DeCasteljauSubdivideLeft(Real(1)/Real(2)));
+                       divisions.pop();
+                       
+                       //Debug("divisions %u", divisions.size());
+               }
+               while (divisions.size() > 0)
+               {
+                       Bezier & current = divisions.front();
+                       RenderLineOnCPU(current.x0, current.y0, current.x3, current.y3, target, Colour(0,0,0,!view.PerformingShading()));
+                       divisions.pop();
                }
                
-               /*
-               Real u(0);
-               while (u < Real(1))
+               /* Draw the Bezier by sampling
+               Real invblen(1); invblen /= blen;
+               Real t(invblen);
+               Vec2 v0;
+               Vec2 v1;
+               control.Evaluate(v0.x, v0.y, 0);
+               for (int64_t j = 1; j <= blen; ++j)
                {
-                       u += Real(1e-6);
-                       Real x; Real y; control.Evaluate(x,y,u);
-                       int64_t index = ((int64_t)x + (int64_t)y*target.w)*4;
-                       if (index >= 0 && index < 4*(target.w*target.h))
-                       {
-                               target.pixels[index+0] = 0;
-                               target.pixels[index+1] = 0;
-                               target.pixels[index+2] = 0;
-                               target.pixels[index+3] = 255;
-                       }       
+                       control.Evaluate(v1.x, v1.y, t);
+                       
+                       ObjectRenderer::RenderLineOnCPU(v0.x, v0.y, v1.x, v1.y, target, Colour(0,0,0,!view.PerformingShading()));
+                       //ObjectRenderer::SetColour(target, x[0], y[0], Colour(1,0,0,1));
+                       //ObjectRenderer::SetColour(target, x[1], y[1], Colour(0,0,1,1));
+                       t += invblen;
+                       v0 = v1;
                }
                */
-               
        }
 }
 
index b019505..f9157c7 100644 (file)
@@ -77,6 +77,8 @@ struct Rational
        {
                Simplify();
        }
+       
+
 
        Rational(const T & _P, const T & _Q) : P(_P), Q(_Q)
        {
@@ -174,7 +176,7 @@ struct Rational
        double ToDouble() const 
        {
                T num = P, denom = Q;
-               while (Tabs(num) > T(DBL_MAX))
+               while (Tabs(num) > T(1e10))
                {
                        num /= T(16);
                        denom /= T(16);
@@ -206,8 +208,6 @@ struct Rational
 
 
 
-
-
 }
 
 #endif //_RATIONAL_H
index b766558..322b02b 100644 (file)
@@ -81,7 +81,6 @@ namespace IPDF
                        r *= a;
                return r;
        }
-       
        struct Vec2
        {
                Real x;
@@ -89,6 +88,7 @@ namespace IPDF
                Vec2() : x(0), y(0) {}
                Vec2(Real _x, Real _y) : x(_x), y(_y) {}
                Vec2(const std::pair<Real, Real> & p) : x(p.first), y(p.second) {}
+               Vec2(const std::pair<int64_t, int64_t> & p) : x(p.first), y(p.second) {}
        
                bool operator==(const Vec2& other) const { return (x == other.x) && (y == other.y); }
                bool operator!=(const Vec2& other) const { return !(*this == other); }
diff --git a/src/svg-tests/fox_simple.svg b/src/svg-tests/fox_simple.svg
new file mode 100644 (file)
index 0000000..58e2b8a
--- /dev/null
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<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"
+   width="339.96875"
+   height="174.53125"
+   id="svg3022"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="fox_simple.svg"
+   inkscape:export-filename="/home/sam/Documents/University/2014/ipdf/sam/figures/fox2.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3024" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2"
+     inkscape:cx="142.37824"
+     inkscape:cy="89.239126"
+     inkscape:document-units="px"
+     inkscape:current-layer="g3636"
+     showgrid="true"
+     inkscape:window-width="1366"
+     inkscape:window-height="692"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-global="false">
+    <sodipodi:guide
+       orientation="0,1"
+       position="-35.751799,-26.251486"
+       id="guide3352" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid3582"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-10.236155px"
+       originy="24.614914px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3027">
+    <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
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(718.85153,123.69135)">
+    <g
+       id="g3636"
+       transform="matrix(1.32835,0,0,1.32835,180.62125,44.059858)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3058"
+         d="m -475.53407,-57.612466 c 0.96246,-1.80273 1.94356,-3.63947 2.18018,-4.08165 0.23649,-0.44218 0.52287,-0.80396 0.63616,-0.80396 0.11337,0 0.20597,-0.16697 0.20597,-0.37106 0,-0.67997 -0.7057,-0.38354 -2.06114,0.86581 -0.73802,0.68027 -1.47714,1.23686 -1.64248,1.23686 -0.19904,0 -0.35099,0.47996 -0.44982,1.42239 -0.1403,1.33807 -0.62724,3.78729 -0.92049,4.63028 -0.0726,0.20846 -0.0344,0.37901 0.0849,0.37901 0.11927,0 1.00421,-1.47495 1.9667,-3.27768 z"
+         style="fill:#ffffff;fill-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3060"
+         d="m -513.21317,-32.346356 c 6.43298,-0.6637 12.87679,-2.45259 13.2277,-3.67219 0.0677,-0.23657 -0.12979,-1.25411 -0.43959,-2.26122 -0.30984,-1.00711 -0.56406,-1.85892 -0.56491,-1.89294 -0.005,-0.21364 -1.88104,-2.1e-4 -2.70868,0.30822 -1.51357,0.56405 -12.56876,3.23995 -15.23292,3.6871 -5.71868,0.95982 -16.38269,1.40022 -21.7531,0.89834 -3.56688,-0.33333 -4.49883,-0.24039 -2.31548,0.2309 0.71894,0.15521 2.3163,0.55978 3.54969,0.89906 3.22895,0.88822 15.07984,2.07976 20.29466,2.0405 2.1584,-0.0162 4.83259,-0.12325 5.94263,-0.23777 z"
+         style="fill:#ffffff;fill-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3062"
+         d="m -453.18418,-98.023856 c 0.0677,-0.10693 0.12338,-0.25557 0.12338,-0.33037 0,-0.16698 -0.21931,-0.52476 -0.32162,-0.52476 -0.14646,0 -0.39193,0.35321 -0.39193,0.56352 0,0.12166 0.0759,0.27232 0.17621,0.34984 0.23034,0.17796 0.26725,0.17275 0.41391,-0.0582 z"
+         style="fill:#ffffff;fill-opacity:1" />
+      <path
+         style="fill:#ff7f2a;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 26.5,115.20766 -3,-5 -6.5,5 -2.5,-8 -4,6.5 -3.5,-5.5 7,-27.500003 27.5,-14 20.5,-1 24,11 28.5,28.500003 15.5,-12.500003 19,-2 31.5,7 41,-2.5 26.5,-6 11.5,-10 0,15 9,-9 2.5,14 7,-8 11,8 -6.5,-13 0,-14 15,-10 13.5,3.5 2,-6 8,13 22,16 1.5,1.997398 -1.37868,2.002602 -29.12132,-7.5 -19,-10.5 -5,7 3.5,7.5 4.5,3.5 -18,25.000003 -5.0625,1.125 -4.875,1.15625 -8.0625,51.71875 6,25 8,2 1.5,5.5 -14,2.5 -6.5,-3.5 -12.5,-31 -5.5,-37.5 2,13.1875 -29,5.8125 -26.5,1 -17.5,-3 -26.5,18 -20,2 -11.5,11 8.5,17.5 10,2.5 -1,6.5 -15.5,0 -13,-27.5 -17.5,13.5 -7.5,-3.5 10.5,-13.5 23.5,-28 5,-14.5 -2,-20.5 -25.5,-11.5 -25,-6.500003 -19.5,5.500003 z"
+         id="path3030"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)"
+         sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 99.25,182.20766 1.5,-5.75 11.25,-17 4.25,-11 -3,-13"
+         id="path3032"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:#ff7f2a;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 234.5,158.20766 8,-1.5 1.5,14.25 -11.5,17.25 -22.5,-5.25 -2.75,-4.75 6,-5.25 7.5,4.75 7,1 z"
+         id="path3036"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:#ffe6d5;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 6.5,108.20766 -0.75,25 1.75,11 18.75,-29.5 -3.5,-4.5 -5,5.25 -3.75,-8.5 -3.25,6.75 z"
+         id="path3038"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:#ffe6d5;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 298,92.707657 -5,-4.5 -3.5,-6 5.5,-8 19.25,11 28.75,7.5 -1,6 -4.25,1 -5.47963,0.0052 -7.52037,-2.505204 -10.75,-4 -10.25,1.5 z"
+         id="path3042"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)"
+         sodipodi:nodetypes="ccccccccccccc" />
+      <path
+         style="fill:#d40000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 259.25,79.207657 0.5,14.5 8.5,-8.5 3,13.25 6.75,-6.5 10.25,7 -5.5,-12.5 -0.25,-14.5 14.75,-10 14,4.25 2,-7 -7.5,-5.5 -6.25,-17.5 -4.25,5.5 -1,11 -7.25,1.75 -16,-12.5 0.75,7.5 4.5,13 -9.5,7.5 z"
+         id="path3044"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 301.375,66.082657 9.375,3.25"
+         id="path3046"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 317.08579,79.132594 5.60615,-5.102476"
+         id="path3048"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 319.75,81.895157 c 4.9375,2.666667 18.96341,9.12624 19.32031,9.502602"
+         id="path3050"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.75281364px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m -424.61818,-83.097032 -1.18711,4.857654 -11.42252,-4.810603"
+         id="path3052"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccc" />
+      <path
+         style="fill:#ffffff;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 301.875,71.520157 0.4375,2.125 5.29804,1.896247 2.20196,-0.521247 -0.75,-2.125 -5.74729,-2.448917 z"
+         id="path3054"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)"
+         sodipodi:nodetypes="ccccccc" />
+      <path
+         style="fill:#0000ff;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 304.25,74.020157 -0.5625,-1.9375 1.4375,-0.5625 1.9375,1.3125 -0.4375,1.4375 z"
+         id="path3057"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 276.75,200.33266 -6.25,1.75"
+         id="path3059"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:#501616;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 282.75,64.082657 -7,-12.75 11.75,8 -3,0.5 z"
+         id="path3061"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 276.125,62.207657 2.625,3.625"
+         id="path3063"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 294.375,52.457657 5.25,-0.5 6.1875,1.9375"
+         id="path3065"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 167.58431,151.63391 7.42462,-20.5061"
+         id="path3067"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:#ffe6d5;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 266.875,139.58266 13.25,-22 -10.125,2.5 z"
+         id="path3069"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:#1a1a1a;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 339.03125,91.363907 3.8125,-3 1.75,2.40625 -1.65625,2.09375 z"
+         id="path3073"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+      <path
+         style="fill:#ffe6d5;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 167.625,151.83266 17.625,7.25 37.75,1.25 19.375,-3.5 -1.625,-9 -28.5,5.75 -27.125,1.125 z"
+         id="path3075"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.75281364,0,0,0.75281364,-681.08765,-152.77503)" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 243.42578,54.019531 c 1.96094,-1.121094 2.39063,-0.402344 2.39063,-0.402344"
+       id="path3011"
+       inkscape:connector-curvature="0"
+       transform="translate(-681.08768,-132.77502)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -430.71268,-77.013301 1.57031,-0.859375 0.21094,1.078125"
+       id="path3781"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/src/svg-tests/kinematic_diagram.svg b/src/svg-tests/kinematic_diagram.svg
new file mode 100644 (file)
index 0000000..ca35cc2
--- /dev/null
@@ -0,0 +1,1243 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<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"
+   width="730.3288"
+   height="407.77399"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="kinematic.png">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.5"
+     inkscape:cx="294.97053"
+     inkscape:cy="208.70431"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1366"
+     inkscape:window-height="692"
+     inkscape:window-x="1280"
+     inkscape:window-y="280"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <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
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-2.3587257,-8.6740247)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 4.608579,37.598222 154.419231,0"
+       id="path3007"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 19.13727,37.183117 80.572876,98.618726 141.38582,37.805776"
+       id="path3009"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 80.157769,98.618726 0,31.132924 -24.283666,24.28366 47.529567,0 -23.245901,-24.28366"
+       id="path3011"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 55.827152,153.55061 0,115.64841"
+       id="path3013"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 104.25858,153.84414 0,116.52898"
+       id="path3015"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 55.533617,268.31845 48.724963,0 -24.656011,24.656 z"
+       id="path3017"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 79.602569,292.38741 -46.670288,46.67029 93.340589,0 -47.99116,-47.99116"
+       id="path3019"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 14.415446,37.027452 8.3512486,26.523954"
+       id="path3021"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 22.169368,36.882831 16.105172,26.379333"
+       id="path3021-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 29.53749,36.779054 23.473294,26.275556"
+       id="path3021-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 37.049989,36.74759 -6.0642,-10.503498"
+       id="path3021-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 44.75202,36.81052 38.68782,26.307022"
+       id="path3021-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 51.964478,36.81052 45.900288,26.307022"
+       id="path3021-7-6-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 59.952971,36.711431 53.88877,26.207933"
+       id="path3021-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 67.706893,36.56681 61.642704,26.063312"
+       id="path3021-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 75.075013,36.463033 69.010824,25.959535"
+       id="path3021-7-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 82.587514,36.431568 76.523313,25.928071"
+       id="path3021-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 90.289545,36.494498 84.225344,25.991001"
+       id="path3021-7-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 97.501991,36.494498 -6.0642,-10.503497"
+       id="path3021-7-6-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 106.18533,36.659542 100.12115,26.156044"
+       id="path3021-95"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 113.93926,36.514921 -6.0642,-10.503497"
+       id="path3021-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 121.30738,36.411144 115.24319,25.907648"
+       id="path3021-7-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 128.81988,36.37968 -6.0642,-10.503498"
+       id="path3021-3-75"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 136.52191,36.44261 -6.0642,-10.503497"
+       id="path3021-7-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 143.73437,36.44261 -6.0642,-10.503497"
+       id="path3021-7-6-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,-122.63562,-42.091348)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-2"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,-122.85577,-7.2353904)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-9"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,-146.92472,13.898329)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-21"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,-98.78681,13.89833)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-7"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,-146.92472,127.7856)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,-97.612714,128.95971)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-1"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,-123.44282,153.61571)" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="126.42857"
+       y="83.076469"
+       id="text4036"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4038"
+         x="126.42857"
+         y="83.076469"></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="145.71429"
+       y="155.21931"
+       id="text4061"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4063"
+         x="145.71429"
+         y="155.21931"></tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 212.05342,41.121049 154.41924,0"
+       id="path3007-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 226.58211,40.705948 61.43561,61.435602 60.81296,-60.812949"
+       id="path3009-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 287.60261,102.14155 0,31.13294 -24.28367,24.28365 47.52957,0 -23.2459,-24.28365"
+       id="path3011-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 263.27199,157.07344 0,115.6484"
+       id="path3013-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 311.70341,157.36698 0,116.52898"
+       id="path3015-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 262.97846,271.84129 48.72495,0 -24.65599,24.65599 z"
+       id="path3017-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 287.04742,295.91025 -46.6703,46.67029 93.3406,0 -47.99116,-47.99116"
+       id="path3019-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 221.86029,40.550281 -6.06421,-10.5035"
+       id="path3021-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 229.61421,40.405657 -6.06419,-10.5035"
+       id="path3021-7-11"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 236.98234,40.301876 -6.0642,-10.5035"
+       id="path3021-7-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 244.49483,40.270413 -6.06419,-10.5035"
+       id="path3021-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 252.19686,40.333339 246.13267,29.829851"
+       id="path3021-7-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 259.40931,40.333339 253.34512,29.829851"
+       id="path3021-7-6-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 267.39781,40.234254 -6.06419,-10.5035"
+       id="path3021-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 275.15174,40.089629 -6.0642,-10.503492"
+       id="path3021-7-2-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 282.51985,39.985859 276.45566,29.48236"
+       id="path3021-7-6-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 290.03235,39.954396 -6.0642,-10.5035"
+       id="path3021-3-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 297.73438,40.017322 -6.0642,-10.503495"
+       id="path3021-7-0-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 304.94683,40.017322 298.88264,29.513827"
+       id="path3021-7-6-1-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 313.63017,40.182368 -6.06419,-10.5035"
+       id="path3021-95-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 321.3841,40.037744 315.31989,29.534249"
+       id="path3021-7-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 328.75222,39.933975 -6.0642,-10.503502"
+       id="path3021-7-6-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 336.26472,39.9025 330.20053,29.399008"
+       id="path3021-3-75-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 343.96676,39.965438 -6.06419,-10.5035"
+       id="path3021-7-0-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 351.17921,39.965438 -6.06419,-10.5035"
+       id="path3021-7-6-1-9-9"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-5"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,84.809207,-38.568523)" />
+    <g
+       id="g4250"
+       transform="matrix(1.1622953,0,0,1.1622953,-28.707733,10.562892)">
+      <path
+         transform="matrix(1.5315983,0,0,1.5315983,119.19507,104.89558)"
+         d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+         sodipodi:ry="3.1567266"
+         sodipodi:rx="3.1567266"
+         sodipodi:cy="78.44886"
+         sodipodi:cx="113.8947"
+         id="path3188-6-3"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4233"
+         d="m 290.16632,221.76425 7.19734,7.19734"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4235"
+         d="m 290.41886,228.70905 6.62912,-6.62913"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-3-1"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,60.009625,131.45466)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 258.72867,267.29056 8.36545,8.36543"
+       id="path4233-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 259.02221,275.36247 7.70499,-7.705"
+       id="path4235-5"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-3-7"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,60.774643,18.112879)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 259.49371,153.94879 8.36544,8.36543"
+       id="path4233-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 259.78724,162.0207 7.70499,-7.70501"
+       id="path4235-6"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-3-0"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,108.73407,18.25964)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 307.45315,154.09555 8.36543,8.36543"
+       id="path4233-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 307.74667,162.16746 7.70499,-7.70501"
+       id="path4235-2"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="80.157753"
+       y="67.070717"
+       id="text4288"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4290"
+         x="80.157753"
+         y="67.070717">1*</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="90.1203"
+       y="121.86463"
+       id="text4292"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4294"
+         x="90.1203"
+         y="121.86463">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="79.327545"
+       y="152.58243"
+       id="text4296"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4298"
+         x="79.327545"
+         y="152.58243">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="113.36619"
+       y="208.20656"
+       id="text4300"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4302"
+         x="113.36619"
+         y="208.20656">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="62.723351"
+       y="208.20657"
+       id="text4304"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4306"
+         x="62.723351"
+         y="208.20657">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="80.157768"
+       y="282.9256"
+       id="text4308"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4310"
+         x="80.157768"
+         y="282.9256">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="78.49736"
+       y="325.26633"
+       id="text4312"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4314"
+         x="78.49736"
+         y="325.26633">7*</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="288.70493"
+       y="69.70211"
+       id="text4288-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4290-9"
+         x="288.70493"
+         y="69.70211">1*</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="299.91278"
+       y="136.74164"
+       id="text4292-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4294-9"
+         x="299.91278"
+         y="136.74164">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="321.91336"
+       y="210.83795"
+       id="text4300-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4302-6"
+         x="321.91336"
+         y="210.83795">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="271.27051"
+       y="210.83798"
+       id="text4304-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4306-9"
+         x="271.27051"
+         y="210.83798">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="286.35672"
+       y="329.58551"
+       id="text4308-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4310-7"
+         x="286.35672"
+         y="329.58551">5*</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 413.49302,41.12489 154.41924,0"
+       id="path3007-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 428.02171,40.709788 61.4356,61.435612 60.81295,-60.812959"
+       id="path3009-3-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 489.0422,102.1454 0,31.13293 -24.28367,24.28366 47.52958,0 -23.24591,-24.28366"
+       id="path3011-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 464.71158,157.07729 0,115.64841"
+       id="path3013-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 513.14301,157.37082 0,116.52898"
+       id="path3015-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.26285791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 460.31728,271.89541 57.75672,0 -29.2263,24.55544 z"
+       id="path3017-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#1a1a1a;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 488.487,295.9141 -46.67029,46.67028 93.3406,0 -47.99116,-47.99115"
+       id="path3019-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 423.29988,40.554121 -6.0642,-10.5035"
+       id="path3021-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 431.0538,40.409497 424.9896,29.905998"
+       id="path3021-7-11-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 438.42192,40.305716 -6.06419,-10.5035"
+       id="path3021-7-6-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 445.93442,40.274253 -6.06419,-10.5035"
+       id="path3021-3-4-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 453.63645,40.33718 447.57226,29.833691"
+       id="path3021-7-0-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 460.84891,40.33718 454.78472,29.833691"
+       id="path3021-7-6-1-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 468.8374,40.238094 -6.06419,-10.5035"
+       id="path3021-9-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 476.59134,40.093469 470.52713,29.589981"
+       id="path3021-7-2-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 483.95944,39.989699 477.89526,29.486211"
+       id="path3021-7-6-3-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 491.47194,39.958236 -6.0642,-10.5035"
+       id="path3021-3-7-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 499.17398,40.021163 -6.0642,-10.503489"
+       id="path3021-7-0-8-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 506.38642,40.021163 500.32223,29.517674"
+       id="path3021-7-6-1-5-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 515.06977,40.186209 -6.06419,-10.5035"
+       id="path3021-95-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 522.8237,40.041585 516.75949,29.538096"
+       id="path3021-7-1-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 530.19182,39.937815 -6.0642,-10.5035"
+       id="path3021-7-6-4-9-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 537.70432,39.90634 -6.0642,-10.503488"
+       id="path3021-3-75-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 545.40635,39.969277 -6.0642,-10.503499"
+       id="path3021-7-0-4-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 552.61881,39.969277 546.55462,29.465778"
+       id="path3021-7-6-1-9-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-5-5"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,286.24881,-38.564679)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-3-7-3"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,262.21423,18.116721)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 460.93331,153.95264 8.36543,8.36543"
+       id="path4233-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 461.22683,162.02455 7.705,-7.70502"
+       id="path4235-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-3-0-1"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.7801695,0,0,1.7801695,310.17365,18.263485)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 508.89273,154.09939 8.36545,8.36545"
+       id="path4233-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.16229534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 509.18627,162.1713 7.70499,-7.705"
+       id="path4235-2-2"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="490.14444"
+       y="69.70594"
+       id="text4288-3-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4290-9-6"
+         x="490.14444"
+         y="69.70594">1*</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="501.35233"
+       y="136.74548"
+       id="text4292-9-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4294-9-7"
+         x="501.35233"
+         y="136.74548">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="523.35291"
+       y="210.8418"
+       id="text4300-3-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4302-6-6"
+         x="523.35291"
+         y="210.8418">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="472.71002"
+       y="210.84183"
+       id="text4304-0-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4306-9-2"
+         x="472.71002"
+         y="210.84183">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="487.79623"
+       y="329.58936"
+       id="text4308-1-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4310-7-8"
+         x="487.79623"
+         y="329.58936">5*</tspan></text>
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-0"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.3957876,0,0,1.3957876,305.61032,151.81192)" />
+    <path
+       style="fill:#ffffff;stroke:#000000;stroke-width:0.91132748px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 464.90862,265.86651 -5.45171,5.45169 11.1475,0 z"
+       id="path4774"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-0-6"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.3957876,0,0,1.3957876,354.02198,152.1482)" />
+    <path
+       style="fill:#ffffff;stroke:#000000;stroke-width:0.91132748px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 513.32029,266.2028 -5.45171,5.45169 11.1475,0 z"
+       id="path4774-6"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="77.309052"
+       y="18.841839"
+       id="text4797"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799"
+         x="77.309052"
+         y="18.841839"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif">Base</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:13.9475441px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="78.417809"
+       y="355.64136"
+       id="text4797-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-5"
+         x="78.417809"
+         y="355.64136"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif">Travelling Plate</tspan></text>
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-0"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.8517193,0,0,1.8517193,359.37139,-21.013609)" />
+    <text
+       xml:space="preserve"
+       style="font-size:14.50813103px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="654.84406"
+       y="129.43718"
+       id="text4797-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3"
+         x="654.84406"
+         y="129.43718"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif">= Pin / Revolute (<tspan
+   style="font-style:italic;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4861">f</tspan> )</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:9.2721138px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="718.75409"
+       y="133.77475"
+       id="text4797-8-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4"
+         x="718.75409"
+         y="133.77475"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">1</tspan></text>
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-3-1-8"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.8517193,0,0,1.8517193,359.37139,20.204774)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.20901108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 566.07749,161.50027 8.70167,8.70165"
+       id="path4233-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.20901108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 566.38282,169.89661 8.01467,-8.01471"
+       id="path4235-5-3"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:14.50813103px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="618.3219"
+       y="170.38852"
+       id="text4797-8-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-47"
+         x="618.3219"
+         y="170.38852"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif">= Ball (<tspan
+   style="font-style:italic;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4861-9">f</tspan> )</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:9.2721138px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="645.66693"
+       y="174.40663"
+       id="text4797-8-8-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-9"
+         x="645.66693"
+         y="174.40663"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">3</tspan></text>
+    <path
+       sodipodi:type="arc"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.65291274;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3188-6-0-1"
+       sodipodi:cx="113.8947"
+       sodipodi:cy="78.44886"
+       sodipodi:rx="3.1567266"
+       sodipodi:ry="3.1567266"
+       d="m 117.05143,78.44886 c 0,1.743412 -1.41332,3.156727 -3.15673,3.156727 -1.74341,0 -3.15673,-1.413315 -3.15673,-3.156727 0,-1.743412 1.41332,-3.156726 3.15673,-3.156726 1.74341,0 3.15673,1.413314 3.15673,3.156726 z"
+       transform="matrix(1.6743438,0,0,1.6743438,380.02739,8.4710844)" />
+    <path
+       style="fill:#ffffff;stroke:#000000;stroke-width:1.09320033px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 571.11671,145.28747 -6.53968,6.53968 13.37218,0 z"
+       id="path4774-9"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:14.50813103px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="639.41882"
+       y="146.2681"
+       id="text4797-8-5-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-47-2"
+         x="639.41882"
+         y="146.2681"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif">= Universal (<tspan
+   style="font-style:italic;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4861-9-3">f</tspan> )</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:9.2721138px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="687.10468"
+       y="151.13657"
+       id="text4797-8-8-6-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-9-9"
+         x="687.10468"
+         y="151.13657"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14.50813103px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:DejaVu Serif Bold"
+       x="588.40039"
+       y="103.82843"
+       id="text4797-8-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-2"
+         x="588.40039"
+         y="103.82843"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Bold">Joints</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.20901108;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5086"
+       width="178.30768"
+       height="92.817696"
+       x="553.78497"
+       y="86.391808" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="464.92349"
+       y="396.78979"
+       id="text4797-8-8-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96"
+         x="464.92349"
+         y="396.78979"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="501.18198"
+       y="396.52145"
+       id="text4797-8-8-7-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96-8"
+         x="501.18198"
+         y="396.52145"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="536.61084"
+       y="397.08331"
+       id="text4797-8-8-7-2-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96-8-0"
+         x="536.61084"
+         y="397.08331"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.60449505px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="79.227173"
+       y="385.02295"
+       id="text5114"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5116"
+         x="79.227173"
+         y="385.02295"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Original NUWAR Arm</tspan><tspan
+         sodipodi:role="line"
+         x="79.227173"
+         y="399.52856"
+         style="font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Oblique"
+         id="tspan5120">n = 17, f = 21, f = 0, f = 0</tspan><tspan
+         sodipodi:role="line"
+         x="79.227173"
+         y="414.03418"
+         style="font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Oblique"
+         id="tspan5222">Mobility = -4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.60449505px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="289.65292"
+       y="382.59662"
+       id="text5114-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5116-2"
+         x="289.65292"
+         y="382.59662"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Variation #1</tspan><tspan
+         sodipodi:role="line"
+         x="289.65292"
+         y="397.10223"
+         style="font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Oblique"
+         id="tspan5120-5">n = 11, f = 3, f = 0, f = 12</tspan><tspan
+         sodipodi:role="line"
+         x="291.50012"
+         y="411.60785"
+         style="font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Oblique"
+         id="tspan5224">Mobility = 9 </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.60449505px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="487.25211"
+       y="380.3909"
+       id="text5114-9-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5116-2-4"
+         x="487.25211"
+         y="380.3909"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">Variation #2</tspan><tspan
+         sodipodi:role="line"
+         x="487.25211"
+         y="394.89651"
+         style="font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Oblique"
+         id="tspan5120-5-4">n = 11, f = 3, f = 6, f = 6</tspan><tspan
+         sodipodi:role="line"
+         x="487.25211"
+         y="409.40213"
+         style="font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Oblique"
+         id="tspan5226">Mobility = 3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11.43720245px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+       x="547.46826"
+       y="200.76332"
+       id="text5214"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5216"
+         x="547.46826"
+         y="200.76332">* The base and travelling plate </tspan><tspan
+         sodipodi:role="line"
+         x="547.46826"
+         y="215.05983"
+         id="tspan5220">   are common to all 3 arms</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="264.1481"
+       y="398.80005"
+       id="text4797-8-8-7-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96-1"
+         x="264.1481"
+         y="398.80005"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="300.40652"
+       y="398.53168"
+       id="text4797-8-8-7-2-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96-8-2"
+         x="300.40652"
+         y="398.53168"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="335.83548"
+       y="399.09357"
+       id="text4797-8-8-7-2-6-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96-8-0-2"
+         x="335.83548"
+         y="399.09357"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="54.012356"
+       y="399.62418"
+       id="text4797-8-8-7-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96-9"
+         x="54.012356"
+         y="399.62418"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="96.581543"
+       y="399.57596"
+       id="text4797-8-8-7-2-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96-8-1"
+         x="96.581543"
+         y="399.57596"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.49763489px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:ComicSans;-inkscape-font-specification:ComicSans"
+       x="132.01048"
+       y="400.13782"
+       id="text4797-8-8-7-2-6-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4799-3-4-96-8-0-7"
+         x="132.01048"
+         y="400.13782"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic">3</tspan></text>
+  </g>
+</svg>
index f15c961..ff7eddb 100644 (file)
@@ -5,17 +5,20 @@
 <svg xmlns="http://www.w3.org/2000/svg"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      width="400" height="400">
-    <line x1="0" y1="0" x2="400" y2="0" stroke="red"/>
+    <!--<line x1="0" y1="0" x2="400" y2="0" stroke="red"/>-->
     
-    <line x1="0" y1="0" x2="0" y2="400" stroke="red"/>
+    <!--<line x1="0" y1="0" x2="0" y2="400" stroke="red"/>-->
     
-    <line x1="400" y1="0" x2="400" y2="400" stroke="red"/>
+    <!--<line x1="400" y1="0" x2="400" y2="400" stroke="red"/>-->
     
-    <line x1="0" y1="400" x2="400" y2="400" stroke="red"/>
+    <!--<line x1="0" y1="400" x2="400" y2="400" stroke="red"/>-->
     
-       <line 
+       <!--<line
                x1="0" y1="0" x2="400" y2="400" stroke="black"/>
-
+       -->
        <line
-               x1="400" y1="0" x2="0" y2="400" stroke="black"/>
+               x1="0" y1="200" x2="400" y2="0" stroke="black"/>
+               
+       <!--<line
+               x1="200" y1="200" x2="400" y2="100" stroke="black"/>-->
 </svg>

UCC git Repository :: git.ucc.asn.au