Compare commits

...

3 commits
trunk ... wip/8

Author SHA1 Message Date
djerun
a94d14e632 [WIP] leightweight lighthouse 2024-12-14 22:30:38 +01:00
djerun
89a33df7ff [WIP] bottle tag logo 2024-12-14 14:31:52 +01:00
djerun
892899c511 [WIP] pressfit ears 2024-12-14 14:29:56 +01:00
9 changed files with 1160 additions and 45 deletions

View file

@ -61,7 +61,7 @@ USE_TINY_EARS = true;
*/
scale([0.2, 0.2, 0.2]) {
difference() {
scale([5, 5, 5]) rotate(45, [0, 0, 1]) bottle_clip(name=NAME);
scale([5, 5, 5]) rotate(45, [0, 0, 1]) bottle_clip(name=NAME, logo=LOGO_FILE);
translate([ 15*5, 0*5, 18*5]) rotate(80, [0, 1, 0]) catear();
translate([-15*5, 0*5, 18*5]) rotate(-80, [0, 1, 0]) catear();
}
@ -93,6 +93,7 @@ module name(name, font, rl, ht, ru) {
module logo(logo, rl, ht, ru, width) {
echo("logo: ", logo);
if(logo == "") {
echo("CATEAR LOGO");
ear_size=ht;
echo("ht: ", ht);
echo("ru: ", ru);
@ -114,32 +115,29 @@ module logo(logo, rl, ht, ru, width) {
with_rake=false
);
} else {
echo("LOGO: ", logo);
// The logo has been split in 3 parts. // well was... TODO
/*
rotate([0,0,-48]) translate([0,0,ht*3/4-0.1])
rotate([0,0,-45]) translate([0,0,ht*3/4-0.1])
rotate([90,0,0])
scale([0.9,0.9,1])
scale([0.8,0.8,1])
scale([ht/100,ht/100,1])
translate([-25,-29,0.5])
translate([-32,-33,0.5])
linear_extrude(height=max(ru,rl)*2)
import("logo_1.dxf");
*/
import("test.svg");
translate([0,0,ht*3/4-0.1])
rotate([90,0,0])
scale([0.8,0.8,1])
scale([ht/100,ht/100,1])
translate([-18,-22,0.5])
translate([-32,-33,0.5])
linear_extrude(height=max(ru,rl)*2)
import(logo);
/*
rotate([0,0,44]) translate([0,0,ht*3/4-0.1])
rotate([0,0,45]) translate([0,0,ht*3/4-0.1])
rotate([90,0,0])
scale([0.7,0.7,1])
scale([0.8,0.8,1])
scale([ht/100,ht/100,1])
translate([-25,-26,0.5])
translate([-32,-33,0.5])
linear_extrude(height=max(ru,rl)*2)
import("logo_3.dxf");
*/
import("test.svg");
}
}
@ -153,7 +151,7 @@ module bottle_clip(ru=13, rl=17.5, ht=26, width=2.5, name="c3cat", font="write/o
difference() {
union() {
name(name=name, font=font, rl=rl, ht=ht, ru=ru);
logo(logo=logo, rl=rl, ht=ht, ru=ru, width=width);
logo(logo=logo, rl=rl, ht=ht, ru=ru, width=2*width);
}
cylinder(r1=rl+width/2, r2=ru+width/2, h=ht);
}

View file

@ -0,0 +1,910 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="64mm"
height="64mm"
id="svg2"
sodipodi:version="0.32"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="sterntastatur.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
class="TridactylThemeDark"
version="1.1"
viewBox="0 0 226.77166 226.77167"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : -184.8189 : 1"
inkscape:vp_y="0 : 1066.6668 : 0"
inkscape:vp_z="793.70077 : -184.8189 : 1"
inkscape:persp3d-origin="396.85039 : -371.90552 : 1"
id="perspective10" />
<inkscape:perspective
id="perspective2447"
inkscape:persp3d-origin="396.85039 : -371.90552 : 1"
inkscape:vp_z="793.70077 : -184.8189 : 1"
inkscape:vp_y="0 : 1066.6668 : 0"
inkscape:vp_x="0 : -184.8189 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="98.5"
inkscape:cy="100"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="1035"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:showpageshadow="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:window-maximized="1">
<sodipodi:guide
orientation="1,0"
position="1638.0953,-228.02731"
id="guide3559"
inkscape:locked="false" />
</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" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-11.630257,-173.89075)">
<path
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 124.63977,336.54091 -58.001141,43.35048 13.626759,-42.5247 h -6.256877 l -18.860883,58.84873 69.477402,-51.9401 70.67062,51.71951 -19.45247,-58.62814 h -6.28696 l 14.04789,42.34422 z m 0.24596,-158.20317 -25.970036,83.25457 -87.285434,0.11025 13.265772,9.54575 h 10.448189 l -5.033584,-3.61977 72.856523,-0.0902 21.66843,-69.48744 22.59094,69.46682 72.15462,-0.18995 -27.08305,19.91371 h 10.68883 l 35.21498,-25.89986 -86.44316,0.32031 z"
id="path3555"
sodipodi:nodetypes="cccccccccccccccccccccccccc" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2461"
width="7.778954"
height="8.2651386"
x="29.938887"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3233"
width="7.778954"
height="8.2651386"
x="46.307102"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3235"
width="7.778954"
height="8.2651386"
x="55.004387"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3237"
width="7.778954"
height="8.2651386"
x="63.701714"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3239"
width="7.778954"
height="8.2651386"
x="72.399002"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3241"
width="7.778954"
height="8.2651386"
x="83.824341"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3243"
width="7.778954"
height="8.2651386"
x="92.521629"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3245"
width="7.778954"
height="8.2651386"
x="101.21893"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3247"
width="7.778954"
height="8.2651386"
x="109.91624"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3249"
width="7.778954"
height="8.2651386"
x="121.74675"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3251"
width="7.778954"
height="8.2651386"
x="130.44405"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3253"
width="7.778954"
height="8.2651386"
x="139.14133"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3255"
width="7.778954"
height="8.2651386"
x="147.83865"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3257"
width="7.778954"
height="8.2651386"
x="159.50708"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3259"
width="7.778954"
height="8.2651386"
x="168.20438"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3261"
width="7.778954"
height="8.2651386"
x="176.9017"
y="274.89148"
ry="1.4585506" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3265"
width="7.3783197"
height="7.461844"
x="159.80417"
y="291.61737"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3267"
width="7.3783293"
height="7.461844"
x="168.05357"
y="291.61737"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3269"
width="7.3783197"
height="7.461844"
x="176.22189"
y="291.61737"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3271"
width="7.321022"
height="7.3913627"
x="160.08084"
y="300.09735"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3273"
width="7.321022"
height="7.3913627"
x="168.33022"
y="300.09735"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3275"
width="7.3783197"
height="7.3913627"
x="176.57959"
y="300.09735"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3277"
width="6.9686465"
height="7.4041867"
x="38.852264"
y="291.70407"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3279"
width="6.9686465"
height="7.4041867"
x="47.238949"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3281"
width="6.9686465"
height="7.4041867"
x="55.625633"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3283"
width="6.9686465"
height="7.4041867"
x="64.012314"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3285"
width="6.9686465"
height="7.4041867"
x="72.399002"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3287"
width="6.9686465"
height="7.4041867"
x="80.785675"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3289"
width="6.9686465"
height="7.4041867"
x="89.172363"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3291"
width="6.9686465"
height="7.4041867"
x="97.559044"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3293"
width="6.9686465"
height="7.4041867"
x="105.94573"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3295"
width="6.9686465"
height="7.4041867"
x="114.33241"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3297"
width="6.9686465"
height="7.4041867"
x="122.7191"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3299"
width="6.9686465"
height="7.4041867"
x="131.10579"
y="291.70416"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3301"
width="6.9686465"
height="7.4041867"
x="42.88353"
y="300.12665"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3303"
width="6.9686465"
height="7.4041867"
x="51.270214"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3305"
width="6.9686465"
height="7.4041867"
x="59.656898"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3307"
width="6.9686465"
height="7.4041867"
x="68.043579"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3309"
width="6.9686465"
height="7.4041867"
x="76.43026"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3311"
width="6.9686465"
height="7.4041867"
x="84.81694"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3313"
width="6.9686465"
height="7.4041867"
x="93.203629"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3315"
width="6.9686465"
height="7.4041867"
x="101.59031"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3317"
width="6.9686465"
height="7.4041867"
x="109.97699"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3319"
width="6.9686465"
height="7.4041867"
x="118.36369"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3321"
width="6.9686465"
height="7.4041867"
x="126.75037"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3323"
width="6.9686465"
height="7.4041867"
x="135.13705"
y="300.1022"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3325"
width="6.9686465"
height="7.4041867"
x="44.828308"
y="308.54919"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3327"
width="6.9686465"
height="7.4041867"
x="53.214951"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3329"
width="6.9686465"
height="7.4041867"
x="61.601635"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3331"
width="6.9686465"
height="7.4041867"
x="69.988319"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3333"
width="6.9686465"
height="7.4041867"
x="78.375"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3335"
width="6.9686465"
height="7.4041867"
x="86.761681"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3337"
width="6.9686465"
height="7.4041867"
x="95.148361"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3339"
width="6.9686465"
height="7.4041867"
x="103.53505"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3341"
width="6.9686465"
height="7.4041867"
x="111.92173"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3343"
width="6.9686465"
height="7.4041867"
x="120.30843"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3345"
width="6.9686465"
height="7.4041867"
x="128.69508"
y="308.52939"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3349"
width="6.9686465"
height="7.4041867"
x="49.203938"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3351"
width="6.9686465"
height="7.4041867"
x="57.590622"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3353"
width="6.9686465"
height="7.4041867"
x="65.977303"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3355"
width="6.9686465"
height="7.4041867"
x="74.363983"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3357"
width="6.9686465"
height="7.4041867"
x="82.750664"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3359"
width="6.9686465"
height="7.4041867"
x="91.137352"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3361"
width="6.9686465"
height="7.4041867"
x="99.524033"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3363"
width="6.9686465"
height="7.4041867"
x="107.91072"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3365"
width="6.9686465"
height="7.4041867"
x="116.2974"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3367"
width="6.9686465"
height="7.4041867"
x="124.68409"
y="316.97177"
ry="1.3066182" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3373"
width="7.3783216"
height="7.778954"
x="189.24539"
y="291.61737"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3375"
width="7.3783216"
height="7.778954"
x="197.40019"
y="291.57684"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3377"
width="7.3783216"
height="7.778954"
x="205.55504"
y="291.57684"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3379"
width="7.3783216"
height="7.778954"
x="189.24539"
y="299.93683"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3381"
width="7.3783216"
height="7.778954"
x="197.41371"
y="299.90979"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3383"
width="7.3783216"
height="7.778954"
x="205.58208"
y="299.90979"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3385"
width="7.3783216"
height="7.778954"
x="189.24539"
y="308.25623"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3387"
width="7.3783216"
height="7.778954"
x="197.40388"
y="308.24274"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3389"
width="7.3783216"
height="7.778954"
x="205.56241"
y="308.24274"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3391"
width="7.3783216"
height="7.778954"
x="189.23802"
y="316.57568"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3393"
width="7.3783216"
height="7.778954"
x="197.39656"
y="316.57568"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3395"
width="7.3783216"
height="7.778954"
x="205.55504"
y="316.57568"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3397"
width="7.2262039"
height="7.6778531"
x="214.01192"
y="291.61737"
ry="1.3430512" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3401"
width="7.3783216"
height="7.778954"
x="168.29529"
y="315.94006"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3403"
width="7.3783216"
height="7.778954"
x="168.29529"
y="324.96848"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3405"
width="7.3783216"
height="7.778954"
x="176.54613"
y="324.96848"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3407"
width="7.3783216"
height="7.778954"
x="160.04446"
y="324.96848"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3409"
width="7.3783221"
height="7.4143133"
x="30.139193"
y="291.66492"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3411"
width="11.25044"
height="7.3913627"
x="30.100925"
y="300.09735"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3413"
width="13.291304"
height="7.3913674"
x="30.100925"
y="308.54874"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3415"
width="17.509472"
height="7.3893433"
x="30.100925"
y="316.97144"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3417"
width="11.346565"
height="7.3738036"
x="30.100925"
y="325.37366"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3419"
width="11.267799"
height="7.3738012"
x="51.693386"
y="325.37366"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3421"
width="11.392224"
height="7.3738012"
x="122.10909"
y="325.37366"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3423"
width="11.062954"
height="7.3738012"
x="143.01506"
y="325.37366"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3425"
width="10.647362"
height="7.4090323"
x="143.47343"
y="300.09735"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3427"
width="17.16914"
height="7.3848572"
x="136.95163"
y="308.54874"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3429"
width="21.106087"
height="7.334084"
x="133.01468"
y="317.04187"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3431"
width="14.672773"
height="7.4416533"
x="139.44801"
y="291.62433"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3433"
width="15.484227"
height="7.3738012"
x="189.23802"
y="325.37366"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3437"
width="7.1352501"
height="16.125122"
x="214.09291"
y="299.849"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3439"
width="56.482964"
height="7.3738012"
x="64.33416"
y="325.37366"
ry="1.3727535" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3441"
width="7.0459976"
height="16.20615"
x="214.19212"
y="316.54129"
ry="1.3727535"
inkscape:label="rect3441" />
<rect
style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.641731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect3447"
width="7.356194"
height="7.3738012"
x="205.53864"
y="325.37366"
ry="1.3727535"
inkscape:label="rect3447" />
</g>
<xhtml:iframe
class="cleanslate hidden"
src="sterntastatur_files/commandline.html"
id="cmdline_iframe"
loading="lazy"
style="height: 0px !important;" />
</svg>

After

(image error) Size: 38 KiB

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="64mm"
height="64mm"
viewBox="0 0 64 64"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="test.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
inkscape:zoom="3"
inkscape:cx="119"
inkscape:cy="116.33333"
inkscape:window-width="1920"
inkscape:window-height="1035"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
id="rect1"
style="fill:#800080;stroke-width:0.264583"
d="M 0 0 L 0 16.000057 L 11.999784 16.000057 L 11.999784 27.999841 L 24.000085 27.999841 L 24.000085 35.99987 L 11.999784 35.99987 L 11.999784 48.000171 L 0 48.000171 L 0 64.000228 L 16.000057 64.000228 L 16.000057 51.999927 L 27.999841 51.999927 L 27.999841 40.000142 L 35.99987 40.000142 L 35.99987 51.999927 L 48.000171 51.999927 L 48.000171 64.000228 L 64.000228 64.000228 L 64.000228 48.000171 L 51.999927 48.000171 L 51.999927 35.99987 L 40.000142 35.99987 L 40.000142 27.999841 L 51.999927 27.999841 L 51.999927 16.000057 L 64.000228 16.000057 L 64.000228 0 L 48.000171 0 L 48.000171 11.999784 L 35.99987 11.999784 L 35.99987 24.000085 L 27.999841 24.000085 L 27.999841 11.999784 L 16.000057 11.999784 L 16.000057 0 L 0 0 z " />
</g>
</svg>

After

(image error) Size: 2 KiB

View file

@ -3,7 +3,7 @@ include <globals.scad>;
use <headband.scad>;
use <chamfer.scad>;
module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretch_factor=1.2, debug=false, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE, details=true) {
module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretch_factor=1.2, debug=false, chamfer=CHAMFER, chamfer_shape=CHAMFER_SHAPE, details=true, end_caps=true) {
$A=[0, side_len/2];
$B=[0,-side_len/2];
$C=[-(side_len/2/sin(120))*1.5*stretch_factor, 0];
@ -42,15 +42,17 @@ module catear(height, thickness, fractal=0, side_len=30, bend_factor=0.5, stretc
thickness=thickness,
height=height
);
translate($A) color("#aaaaaa")
chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
cylinder(h=height, d=thickness, center=true);
translate($B) color("#bbbbbb")
chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
cylinder(h=height, d=thickness, center=true);
translate($C) color("#cccccc")
chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
cylinder(h=height, d=thickness, center=true);
if (end_caps) {
translate($A) color("#aaaaaa")
chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
cylinder(h=height, d=thickness, center=true);
translate($B) color("#bbbbbb")
chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
cylinder(h=height, d=thickness, center=true);
translate($C) color("#cccccc")
chamfer(size=chamfer, child_h=height, child_bot=-height/2, shape=chamfer_shape)
cylinder(h=height, d=thickness, center=true);
}
if (debug) {
echo("A", $A, "a", $a, "alpha", $alpha);

View file

@ -11,6 +11,10 @@ FN=90
NAME="\"$1\""
if [[ $# -ge 2 ]];then
LOGO_FILE="\"$2\""
fi
# usage: render NAME PART
render() {
case "$2" in

43
generate_lighthouse.sh Executable file
View file

@ -0,0 +1,43 @@
#!/bin/sh
# usage: generate_bottle_tag.sh NAME
set -u
VERSION=0.1
FN=360
# usage: render LAYER PART
render() {
case "$2" in
layer)
CONNECTOR=false
;;
connector)
CONNECTOR=true
;;
*)
echo 'fatal: invalid part' >&2
exit 1
;;
esac
echo rendering "$1" "$2"
openscad \
-D "\$fn=${FN}" \
-D "CONNECTOR=${CONNECTOR}" \
-D "LAYER=$1" \
-o "stls/lighthouse-${2}${1}-v${VERSION}.stl" \
lighthouse.scad
}
cd "$(dirname $0)"
for LAYER in 1 2 3 4;
do
for PART in layer connector
do
render "$LAYER" "$PART"
sleep 1
done
done

72
lighthouse.scad Normal file
View file

@ -0,0 +1,72 @@
$fn=360;
LAYER = 1;
CONNECTOR = false;
BASE_LAYER_DIAMETER = 140;
LAYER_HEIGHT = 125;
LAYER_SHRINK = 10;
CONNECTOR_RING_GROOVE_DEPTH = 0.5;
module layer(d) {
difference() {
cylinder(h=LAYER_HEIGHT, d1=d, d2=d-LAYER_SHRINK);
cylinder(h=LAYER_HEIGHT, d1=d-1, d2=d-LAYER_SHRINK-1);
}
}
module layer_connector(d) {
difference() {
cylinder(h=3*CONNECTOR_RING_GROOVE_DEPTH, d=d+2, center=true);
cylinder(h=3*CONNECTOR_RING_GROOVE_DEPTH, d=d-3, center=true);
translate([0, 0, CONNECTOR_RING_GROOVE_DEPTH/2]) layer(d);
translate([0, 0, -125-CONNECTOR_RING_GROOVE_DEPTH/2]) layer(d+LAYER_SHRINK);
}
}
module base(d) {
difference() {
union() {
difference() {
cylinder(h=LAYER_HEIGHT/10, d=d+3*LAYER_SHRINK);
translate([0, 0, LAYER_HEIGHT/10-CONNECTOR_RING_GROOVE_DEPTH])
cylinder(h=LAYER_HEIGHT, d1=d, d2=d-LAYER_SHRINK);;
}
intersection() {
cylinder(h=LAYER_HEIGHT, d1=d-1, d2=d-LAYER_SHRINK-1);
cylinder(h=LAYER_HEIGHT/5, d=d+3*LAYER_SHRINK);
}
}
cylinder(h=LAYER_HEIGHT, d=d-LAYER_SHRINK, center=true);
translate([0, 0, 5]) rotate([90, 0, 0]) cylinder(h=d, d=10);
translate([0, -d/2, 0]) cube([10, d, 10], center=true);
}
}
module brim(d) {
// TODO
}
module lightroom(d) {
// TODO
}
module light(d) {
// TODO
}
module roof(d) {
// TODO
}
D = BASE_LAYER_DIAMETER - (LAYER-1) * LAYER_SHRINK;
if (CONNECTOR) {
if (LAYER == 1) base(D);
if ((LAYER >= 2) && (LAYER <= 4)) layer_connector(D);
if (LAYER == 5) brim(D);
if (LAYER == 6) roof(D);
} else {
if ((LAYER >=1) && (LAYER <=4)) layer(D);
if (LAYER == 5) lightroom(D);
if (LAYER == 6) light(D);
}

38
pressfit_bunnyears.scad Normal file
View file

@ -0,0 +1,38 @@
include <globals.scad>;
use <catear_headband.scad>;
use <pressfit_headband.scad>;
use <chamfer.scad>;
$fn=90;
EAR_SCALE = 0.5;
EAR_BEND_FACTOR = 0.2;
EAR_STRETCH_FACTOR = 8;
STEP_SIZE = .5;
//difference() {
translate([20*pow(0.99, SIZE/2*EAR_SCALE-1-THICKNESS), 0, -THICKNESS/2])
/*union()*/ for (i=[0:STEP_SIZE:SIZE/2*EAR_SCALE-1]) {
j=pow(0.99, i);
chamfer_ = floor(abs(2*i/(SIZE/2*EAR_SCALE-1)-1));
translate([-j*20, 0, 0])
rotate(90, [0, 1, 0])
/*chamfer(size=1, child_h=1, child_bot=-0.5, shape=CHAMFER_SHAPE)*/ {
echo("i", i, "j", j, "chamfer_", chamfer_);
catear(
debug=DEBUG,
height=INSERTICLE_Z*1.2,
thickness=THICKNESS,
side_len=SIZE/2*EAR_SCALE-i,
bend_factor=EAR_BEND_FACTOR,
stretch_factor=EAR_STRETCH_FACTOR,
chamfer=0, //chamfer_,
chamfer_shape=CHAMFER_SHAPE,
details=false,
end_caps=false
);
}
}
// translate([0, 0, -THICKNESS]) cube([100, 100, THICKNESS], center=true);
// scale([1, 1, 2]) inserticle();
//}

View file

@ -7,26 +7,28 @@ use <chamfer.scad>;
EAR_SCALE = 1.5;
EAR_BEND_FACTOR = 0.15;
EAR_STRETCH_FACTOR = 1.2;
STEP_SIZE = 1;
difference() {
translate([20*pow(0.99, SIZE/2*EAR_SCALE-1-THICKNESS), 0, -THICKNESS/2])
union() for (i=[0:SIZE/2*EAR_SCALE-1]) {
j=pow(0.99, i);
chamfer_ = floor(abs(2*i/(SIZE/2*EAR_SCALE-1)-1));
translate([-j*20, 0, 0])
rotate(90, [0, 1, 0])
/*chamfer(size=1, child_h=1, child_bot=-0.5, shape=CHAMFER_SHAPE)*/
catear(
debug=DEBUG,
height=INSERTICLE_Z*1.2,
thickness=THICKNESS,
side_len=SIZE/2*EAR_SCALE-i,
bend_factor=EAR_BEND_FACTOR,
stretch_factor=EAR_STRETCH_FACTOR,
chamfer=chamfer_,
chamfer_shape=CHAMFER_SHAPE
);
}
translate([0, 0, -THICKNESS]) cube([100, 100, THICKNESS], center=true);
scale([1, 1, 2]) inserticle();
translate([20*pow(0.99, SIZE/2*EAR_SCALE-1-THICKNESS), 0, -THICKNESS/2])
union() for (i=[0:STEP_SIZE:SIZE/2*EAR_SCALE-1]) {
j=pow(0.99, i);
chamfer_ = floor(abs(2*i/(SIZE/2*EAR_SCALE-1)-1));
translate([-j*20, 0, 0])
rotate(90, [0, 1, 0])
/*chamfer(size=1, child_h=1, child_bot=-0.5, shape=CHAMFER_SHAPE)*/
catear(
debug=DEBUG,
height=INSERTICLE_Z*1.2,
thickness=THICKNESS,
side_len=SIZE/2*EAR_SCALE-i,
bend_factor=EAR_BEND_FACTOR,
stretch_factor=EAR_STRETCH_FACTOR,
chamfer=0, //chamfer_,
chamfer_shape=CHAMFER_SHAPE,
end_caps=false
);
}
translate([0, 0, -THICKNESS]) cube([100, 100, THICKNESS], center=true);
scale([1, 1, 2]) inserticle();
}