--- /dev/null
+infty = 1000;
+eps = 0.01;
+
+wall = 2;
+screw_hole = 3.5;
+screw_l = 3;
+screw_off = 10;
+
+cable_w = 7;
+cable_h = 3;
+cable_off = 24;
+
+led_w = 10;
+led_h = 2.5;
+led_d = (pow(led_w/2, 2) - pow(led_h, 2))
+ / (2 * led_h);
+
+holder_w = 8.5;
+
+vert_l = 20;
+
+module body() {
+ cube([wall, vert_l + wall, holder_w]);
+// translate([-10, -wall, 0])
+// cube([10+wall, wall+eps, holder_w]);
+ hull() {
+ for (x = [0, cable_w - 2*cable_h])
+ translate([0, cable_off+x, 0])
+ cylinder(r = cable_h + wall, h = holder_w, $fn = 64);
+ }
+ translate([-led_w/2, led_d, 0])
+ cylinder(r = led_d + led_h + wall, h = holder_w);
+}
+
+difference() {
+ body();
+ translate([-50, 0, -50/2]) cube(50);
+ // screw hole
+ hull() {
+ for (x = [0, screw_l])
+ translate([-eps, screw_off + x, holder_w/2])
+ rotate([0, 90, 0])
+ rotate([0, 0, 90])
+ cylinder(r = screw_hole/2, h = wall + 2*eps, $fn = 6);
+ }
+ // cable hole
+ hull() {
+ for (x = [0, cable_w - 2*cable_h])
+ translate([0, cable_off+x, -eps])
+ cylinder(r = cable_h, h = holder_w + 2*eps, $fn = 64);
+ }
+ // led strip
+ intersection() {
+ translate([-led_w/2, led_d, -eps])
+ cylinder(r = led_d + led_h, h = holder_w + 2*eps);
+ translate([-50, -50/2, -50/2]) cube(50);
+ }
+ // strip off the vertical part of led strip cylinder
+ translate([wall, -50+screw_off, -50/2]) cube(50);
+}
--- /dev/null
+infty = 1000;
+eps = 0.01;
+
+wall = 2;
+screw_hole = 3.5;
+screw_l = 1;
+screw_head = 9;
+holder_w = 8.5;
+strip_w = 13;
+strip_h = 0.5;
+holder_l = strip_w + wall;
+
+module body_solid() {
+ cube([wall + strip_h, holder_l, holder_w]);
+ translate([wall-eps, 0, 0])
+ cube([screw_head + screw_l + eps, wall, holder_w]);
+// translate([holder_w/2, holder_w/2, wall-eps])
+// cylinder(r = screw_head/2, h = wall+eps, $fn = 128);
+}
+
+module body() {
+ difference() {
+ body_solid();
+ // LED strip
+ translate([-eps, -eps, -eps])
+ cube([strip_h + eps, strip_w, holder_w + 2*eps]);
+ // screw hole
+ hull() for (x = [0, screw_l])
+ translate([wall + screw_head/2 + x, -eps, holder_w/2])
+ rotate([-90, 0, 0])
+ cylinder(r = screw_hole/2, h = wall + 2*eps);
+/*
+ hull() for (x = [0,1])
+ translate([holder_w/2, wall + screw_hole/2 + screw_l*x, -eps])
+ cylinder(r = screw_hole/2, h = wall + strip_h + 2*eps);
+ translate([-eps, holder_l - wall - strip_w, -eps])
+ cube([holder_w + 2*eps, strip_w, strip_h+eps]);
+*/
+ }
+}
+
+body();
--- /dev/null
+<?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="210mm"
+ height="297mm"
+ viewBox="0 0 744.09448819 1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="vesak.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8"
+ inkscape:cx="220.81103"
+ inkscape:cy="500.47034"
+ inkscape:document-units="cm"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:window-width="1851"
+ inkscape:window-height="1170"
+ inkscape:window-x="49"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ units="mm"
+ spacingx="3.5433071"
+ spacingy="3.5433072"
+ empspacing="10" />
+ </sodipodi:namedview>
+ <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">
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59842,474.80314 -7.6e-4,14.17376 c 0.24904,11.07191 -21.25908,17.71601 -21.25908,28.34593 l -6.9e-4,17.71657 10.63061,-7e-4 0,-14.17382 10.62916,7e-4 0,102.75571 c 0.24904,11.07191 -21.25908,17.7173 -21.25977,28.34765 l 0,17.7168 10.63061,-7e-4 0,-14.17383 10.62916,7e-4 7.6e-4,14.17313 c 14.17323,0 14.17323,-7.08662 14.17323,-24.80315 0,-53.14961 56.69291,-85.03937 56.69292,-120.47245 -10e-6,-21.25984 -56.69292,81.49607 -56.69292,-3.5433 0,-35.43308 0.30494,-45.64128 -14.17323,-46.063 z"
+ id="path4138"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccsccc" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 207.76715,506.66478 Z"
+ id="path4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>