Compare commits

...

10 Commits

Author SHA1 Message Date
jdb 703a39dd57 Updates to kallax lower right drawer face. 2026-08-04 18:26:11 -05:00
jdb 52d836de34 All kid's D&D characters laid out in one file. 2026-08-04 18:25:51 -05:00
jdb 142b10d2b8 Adelle's trebuchet release pin. 2026-08-04 18:25:31 -05:00
jdb 709c4cb6bc Probatem logo pieces. 2026-08-04 18:25:19 -05:00
jdb 4465097a29 Elijah's sword. 2026-08-04 18:25:11 -05:00
jdb 7a046d5648 Rylynn's D&D character. 2026-08-04 18:24:56 -05:00
jdb 7dbaf2fdb8 Protractor 2026-08-04 18:24:34 -05:00
jdb 163b1787c4 Phone cluster stand. 2026-08-04 18:24:28 -05:00
jdb 6f3edad8ab Switch plates for home lighting. 2026-08-04 18:23:59 -05:00
jdb 5987b647be Ignore STL files by default (typically rendered from SCAD). 2026-04-26 18:55:14 -05:00
33 changed files with 4840 additions and 7406 deletions
+1
View File
@@ -1 +1,2 @@
.*.sw? .*.sw?
*.stl
+57
View File
@@ -0,0 +1,57 @@
module P() {
intersection() {
scale(1.2) linear_extrude(5) import("probatem-logo.svg");
translate([-1, -1, -1]) cube([50, 70, 10]);
}
}
module R() {
intersection() {
scale(1.2) linear_extrude(5) import("probatem-logo.svg");
translate([70, -1, -1]) cube([60, 70, 10]);
}
}
module O() {
intersection() {
scale(1.2) linear_extrude(5) import("probatem-logo.svg");
translate([135, -1, -1]) cube([100, 70, 10]);
}
}
module B() {
intersection() {
scale(1.2) linear_extrude(5) import("probatem-logo.svg");
translate([220, -1, -1]) cube([90, 70, 10]);
}
}
module A() {
intersection() {
scale(1.2) linear_extrude(5) import("probatem-logo.svg");
translate([300, -1, -1]) cube([100, 70, 10]);
}
}
module T() {
intersection() {
scale(1.2) linear_extrude(5) import("probatem-logo.svg");
translate([380, -1, -1]) cube([90, 70, 10]);
}
}
module E() {
intersection() {
scale(1.2) linear_extrude(5) import("probatem-logo.svg");
translate([460, -1, -1]) cube([90, 70, 10]);
}
}
module M() {
intersection() {
scale(1.2) linear_extrude(5) import("probatem-logo.svg");
translate([530, -1, -1]) cube([90, 70, 10]);
}
}
B();
+48
View File
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1458"
height="160"
viewBox="0 0 385.76249 42.333334"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
sodipodi:docname="probate-logo-one-path-no-border.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="2"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showguides="true"
inkscape:zoom="1.4142136"
inkscape:cx="516.5415"
inkscape:cy="8.4852813"
inkscape:window-width="2560"
inkscape:window-height="1410"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"><sodipodi:guide
position="93.46406,1.657876e-05"
orientation="0,-1"
id="guide2"
inkscape:locked="false" /></sodipodi:namedview><defs
id="defs1" /><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(88.01959,-128.92059)"><path
id="rect1"
style="stroke-width:0.264583;stroke-dasharray:none"
d="m 25.486142,128.92084 v 2.11667 h 1.05885 c 7.708027,0 14.649705,4.6382 17.599442,11.75949 2.949737,7.12129 1.321455,15.31112 -4.128947,20.76152 -5.450399,5.4504 -13.640232,7.07868 -20.761523,4.12895 -7.121291,-2.94974 -11.7600062,-9.89141 -11.7600054,-17.59945 v -1.05885 H 5.3788423 v 1.05885 c -8e-7,8.55806 5.1597677,16.27934 13.0663857,19.55436 7.906619,3.27503 17.014829,1.46364 23.066292,-4.58783 6.051466,-6.05146 7.862864,-15.15967 4.587834,-23.06629 -3.275031,-7.90661 -10.996303,-13.06742 -19.554362,-13.06742 z m -113.505732,-3e-5 v 2.11667 h 15.61145 c 5.930101,5.6e-4 10.714592,4.78486 10.714591,10.7151 -4e-6,5.91688 -4.804038,10.69411 -10.715625,10.71615 H -88.01959 v 2.11666 16.66875 h 2.116667 v -16.66875 h 14.287499 c 6.706618,-0.41121 12.039054,-6.02469 12.039059,-12.83281 1e-6,-6.80813 -5.332437,-12.42056 -12.039059,-12.83177 -0.27085,-3e-5 -0.522898,4e-5 -0.79375,0 z m 46.566666,-2.2e-4 v 2.11666 c 5.29182,0.007 10.318602,-0.01 15.610417,5.1e-4 5.493367,0 10.082499,4.13277 10.656713,9.59603 0.569514,5.41852 -2.997898,10.37516 -8.298718,11.57035 h -1.035079 l 10.997262,19.05003 h 2.1177 l -10.066569,-17.4362 c 5.466766,-1.97843 9.014223,-7.47948 8.391219,-13.40694 -0.657742,-6.25796 -5.764544,-11.10822 -11.969812,-11.48995 z m 106.097915,2.4e-4 v 2.11667 h 15.081767 v 5.1e-4 c 5.025933,0 8.995835,3.83996 8.995833,8.33334 2e-6,4.4867 -3.958278,8.3239 -8.973612,8.3349 H 64.644991 v 2.11666 c -5.467962,-0.0299 21.872204,0.007 16.404167,-0.001 5.592513,0 10.054169,4.1493 10.054166,9.39374 -2e-6,5.24442 -4.462171,9.92136 -10.054683,9.92136 h -16.40365 v 2.11718 h 16.66875 c 6.561126,-0.13564 11.906765,-5.67815 11.906767,-12.03802 3e-6,-5.01315 -3.321284,-9.13691 -7.941117,-10.78126 3.30773,-1.77907 5.558319,-5.22797 5.558317,-9.06249 2e-6,-5.48355 -4.600407,-10.07311 -10.317717,-10.45156 z m 62.573959,0 c -5.0683,13.93574 -10.33498,28.39882 -15.40669,42.33333 h 2.11667 l 14.28324,-39.24153 14.28276,39.24156 h 2.11667 c -5.07843,-13.93232 -10.32707,-28.40207 -15.40828,-42.33337 z m 36.11562,3e-5 v 2.11667 h 30.1625 v -2.11667 z m 48.15417,1e-5 v 2.11667 h 27.51667 v -2.1167 z m 45.50833,-2e-5 v 42.33333 h 2.11667 v -36.64272 l 18.25625,25.12715 20.37292,-28.04067 v -2.77709 h -0.86662 l -19.5063,26.84901 -19.5063,-26.84901 z m -79.63958,15.08119 v 27.25212 h 2.11667 v -27.25212 z m 118.26875,-9.8e-4 v 27.25312 h 2.11667 v -27.25312 z m -84.1375,5.02811 v 2.11667 h 27.51667 v -2.11667 z m 0,20.10833 v 2.11667 h 27.51667 v -2.11667 z"
sodipodi:nodetypes="ccsssssccsssssccccscccccccsccccccscccccsccccccsccccsscccscsccccccccccccccccccccccccccccccccccccccccccccccccccc" /></g></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+36
View File
@@ -0,0 +1,36 @@
bays = 5;
wt = 2; // wall thickness
pt = 12; // phone thickness
l = 170; // length
h = 40; // height
w = bays * (pt + wt) + wt;
lip = 10;
T=atan((h - lip + 0.5) / l);
difference() {
union() {
cube([w, l, wt]); // base
cube([w, wt, lip]); // front lip
// back
translate([0, l - wt, 0])
cube([w, wt, h]);
// side walls
for (i = [0 : bays]) {
translate([i*(pt + wt), 0, lip]) rotate([T, 0, 0])
translate([0, 0, -h]) cube([wt, l / cos(T), h]);
}
}
translate([-wt, -wt, -h]) cube([w+2*wt, l+2*wt, h]); // bottom
translate([-wt, -wt, h]) cube([w+2*wt, l+2*wt, h]); // top
translate([-wt, l, -wt]) cube([w+2*wt, l, h + 2*wt]); // back
}
/*
sin(ang) = opp / hyp
ang = asin(opp/hyp)
cos(ang) = adj / hyp
hyp = adj / cos(ang)
*/
@@ -0,0 +1,211 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 33.866666 33.866666"
version="1.1"
id="svg1"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="chandelier-icon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showguides="true"
inkscape:zoom="3.9803311"
inkscape:cx="81.777117"
inkscape:cy="84.540706"
inkscape:window-width="3440"
inkscape:window-height="1368"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<sodipodi:guide
position="16.933333,16.933333"
orientation="1,0"
id="guide1"
inkscape:locked="false" />
<sodipodi:guide
position="16.933333,22.754166"
orientation="0,1"
id="guide2"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="16.933333,11.1125"
orientation="0,1"
id="guide3"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="8.4666665,16.933333"
orientation="-1,0"
id="guide4"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="25.399999,16.933333"
orientation="-1,0"
id="guide5"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="2.6458333,16.933333"
orientation="-1,0"
id="guide8"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="16.933333,18.520833"
orientation="0,1"
id="guide9"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="16.933333,14.816666"
orientation="0,1"
id="guide10"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="2.0215776,16.296018"
orientation="0,-1"
id="guide11"
inkscape:locked="false" />
<sodipodi:guide
position="3.9687499,17.481796"
orientation="-1,0"
id="guide12"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="1.3229166,17.614547"
orientation="-1,0"
id="guide13"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="15.610416,16.296018"
orientation="-1,0"
id="guide14"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
<sodipodi:guide
position="18.25625,16.296018"
orientation="-1,0"
id="guide15"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" />
</sodipodi:namedview>
<defs
id="defs1">
<inkscape:path-effect
effect="mirror_symmetry"
start_point="16.933333,15.513066"
end_point="16.933333,22.586934"
center_point="16.933333,19.05"
id="path-effect13"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="free"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" />
<inkscape:path-effect
effect="mirror_symmetry"
start_point="16.933336,22.754166"
end_point="16.933336,32.774889"
center_point="16.933336,27.764527"
id="path-effect8"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="free"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" />
<inkscape:path-effect
effect="mirror_symmetry"
start_point="16.933333,0.048479"
end_point="16.933333,33.818187"
center_point="16.933333,16.933333"
id="path-effect6"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="free"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
d="M 16.933333,33.767964 C 9.4713474,33.866666 6.2771729,28.774134 6.3499999,22.754166 12.874316,17.35994 13.74129,8.5795681 15.875,0 h 1.058333 m 0,33.767964 c 7.461986,0.0987 10.65616,-4.99383 10.583333,-11.013798 C 20.99235,17.35994 20.125376,8.5795681 17.991666,0 h -1.058333"
style="fill:none;stroke:#000000;stroke-width:2.18294;stroke-linejoin:round"
id="path6"
inkscape:path-effect="#path-effect6"
inkscape:original-d="M 16.933333,33.767964 C 9.4713474,33.866666 6.2771729,28.774134 6.3499999,22.754166 12.874316,17.35994 13.74129,8.5795681 15.875,0 h 1.058333"
sodipodi:nodetypes="cccc"
transform="matrix(1.0000038,0,0,0.94020146,-6.1354782e-5,1.0262002)" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none"
d="M 6.3499626,22.419701 H 27.516709"
id="path7" />
<path
style="display:none;fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none"
d="M 16.933336,32.774889 C 14.438259,32.605733 12.287577,29.02428 12.126849,22.754166 m 4.806487,10.020723 c 2.495077,-0.169156 4.645759,-3.750609 4.806487,-10.020723"
id="path8"
inkscape:path-effect="#path-effect8"
inkscape:original-d="M 16.933336,32.774889 C 14.438259,32.605733 12.287577,29.02428 12.126849,22.754166"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none"
d="M 6.3499626,22.419701 C 3.8522717,22.027667 2.6175619,20.904433 2.6458333,19.05 H 3.96875 1.3229166 2.6458333 L 1.3229166,17.570648 C 0.74053188,14.931764 1.7937319,13.0699 2.6458333,11.1125 3.364172,13.032699 4.5342909,14.574168 3.96875,17.570648 L 2.6458333,19.05 m 24.8708697,3.369701 c 2.497691,-0.392034 3.732401,-1.515268 3.70413,-3.369701 h -1.322917 2.645833 -1.322916 l 1.322916,-1.479352 C 33.126134,14.931764 32.072934,13.0699 31.220833,11.1125 c -0.718339,1.920199 -1.888458,3.461668 -1.322917,6.458148 L 31.220833,19.05"
id="path13"
inkscape:path-effect="#path-effect13"
inkscape:original-d="M 6.3499626,22.419701 C 3.8522717,22.027667 2.6175619,20.904433 2.6458333,19.05 H 3.96875 1.3229166 2.6458333 L 1.3229166,17.570648 C 0.74053188,14.931764 1.7937319,13.0699 2.6458333,11.1125 3.364172,13.032699 4.5342909,14.574168 3.96875,17.570648 2.6458333,19.05 3.0868055,18.556883 2.6458333,19.05"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none"
d="m 16.933336,32.77489 -3e-6,-13.72489 h 1.322917 -2.645834 1.322917 l -1.322917,-1.479352 c -0.582247,-2.213817 0.481387,-4.329351 1.322917,-6.458148 0.76812,1.979419 1.898811,3.766776 1.322917,6.458148 L 16.933333,19.05"
id="path15"
sodipodi:nodetypes="ccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="127.99999"
height="128.00002"
viewBox="0 0 33.866665 33.866671"
version="1.1"
id="svg1"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="dishwasher-icon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="2.8284271"
inkscape:cx="43.487067"
inkscape:cy="60.811183"
inkscape:window-width="1707"
inkscape:window-height="1039"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(1.0583346,1.0583346)">
<rect
style="fill:none;stroke:#000000;stroke-width:1.99215;stroke-dasharray:none"
id="rect1"
width="31.874516"
height="31.874519"
x="-0.0622596"
y="-0.0622596" />
<path
style="fill:none;stroke:#000000;stroke-width:2.13907;stroke-dasharray:none"
d="M 3.1749984,8.4778668 H 28.574998"
id="path1" />
<rect
style="fill:none;stroke:#000000;stroke-width:1.56062;stroke-dasharray:none"
id="rect2"
width="0.55605459"
height="0.55605119"
x="5.0136433"
y="3.9553099" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="33.866665mm"
height="33.866665mm"
viewBox="0 0 33.866666 33.866665"
version="1.1"
id="svg1"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="disposal-icon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="4"
inkscape:cx="74.875"
inkscape:cy="49.75"
inkscape:window-width="1707"
inkscape:window-height="1039"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0.01726782,0.01721442)">
<circle
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-dasharray:none;stroke-opacity:1"
id="path1"
cx="20.717878"
cy="11.961516"
r="15.874998"
transform="rotate(15)" />
<g
id="g3"
transform="rotate(15,16.916065,16.916119)">
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-dasharray:none;stroke-opacity:1"
d="m 1.0410671,16.916118 h 7.9375"
id="path2" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-dasharray:none;stroke-opacity:1"
d="m 24.853563,16.916119 h 7.9375"
id="path3" />
</g>
<g
id="g5"
transform="rotate(75,16.916065,16.916118)">
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-dasharray:none;stroke-opacity:1"
d="m 1.0410671,16.916118 h 7.9375"
id="path4" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-dasharray:none;stroke-opacity:1"
d="m 24.853563,16.916119 h 7.9375"
id="path5" />
</g>
<g
id="g8"
transform="rotate(135,16.916065,16.916118)">
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-dasharray:none;stroke-opacity:1"
d="m 1.0410671,16.916118 h 7.9375"
id="path7" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-dasharray:none;stroke-opacity:1"
d="m 24.853563,16.916119 h 7.9375"
id="path8" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 33.866666 33.866666"
version="1.1"
id="svg1"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="exterior-lights-icon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="5.6290382"
inkscape:cx="32.77647"
inkscape:cy="55.693351"
inkscape:window-width="3440"
inkscape:window-height="1368"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="8"
enabled="true"
visible="true"
dotted="true" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g2"
transform="translate(-4.2333336)">
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round"
d="m 19.049999,8.4666662 -4.233333,-2e-7 L 31.75,2.1166666 V 8.4666662 H 19.049999 V 31.75 l 12.699999,-2e-6 V 8.4666662"
id="path1"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round"
d="M 19.049999,12.699999 H 12.7 13.49375 l 3.439583,4.233333 H 8.4666667 L 11.90625,12.699999 H 12.7 v 2.116667 c -1.058334,1.058333 -2.116667,2.116666 -2.116667,4.233333 0,1.322917 0,2.910416 2.116667,4.233333 2.116666,-1.322917 2.116666,-2.910416 2.116666,-4.233333 0,-2.116667 -1.058333,-3.175 -2.116666,-4.233333"
id="path2"
sodipodi:nodetypes="cccccccccccc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M424.5 355.1C449 329.2 464 294.4 464 256C464 176.5 399.5 112 320 112C240.5 112 176 176.5 176 256C176 294.4 191 329.2 215.5 355.1C236.8 377.5 260.4 409.1 268.8 448L371.2 448C379.6 409 403.2 377.5 424.5 355.1zM459.3 388.1C435.7 413 416 443.4 416 477.7L416 496C416 540.2 380.2 576 336 576L304 576C259.8 576 224 540.2 224 496L224 477.7C224 443.4 204.3 413 180.7 388.1C148 353.7 128 307.2 128 256C128 150 214 64 320 64C426 64 512 150 512 256C512 307.2 492 353.7 459.3 388.1zM272 248C272 261.3 261.3 272 248 272C234.7 272 224 261.3 224 248C224 199.4 263.4 160 312 160C325.3 160 336 170.7 336 184C336 197.3 325.3 208 312 208C289.9 208 272 225.9 272 248z"/></svg>

After

Width:  |  Height:  |  Size: 877 B

+87
View File
@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 33.866666 33.866666"
version="1.1"
id="svg1"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="outlet-icon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="4.3632813"
inkscape:cx="30.940018"
inkscape:cy="33.346464"
inkscape:window-width="3440"
inkscape:window-height="1368"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="8"
enabled="true"
visible="true"
dotted="true" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g5"
transform="matrix(1.2499999,0,0,1.2538461,-4.2349535,-4.2984597)"
style="stroke-width:0.798772">
<g
id="g4"
style="stroke-width:0.798772">
<path
style="fill:none;stroke:#000000;stroke-width:1.69074;stroke-linecap:round;stroke-linejoin:round"
d="M 8.4666662,6.3499997 H 25.399999 c 5.644444,7.0555553 5.644444,14.1111103 0,21.1666653 H 8.4666662 c -5.6444441,-7.055555 -5.6444442,-14.11111 0,-21.1666653 z"
id="path1"
sodipodi:nodetypes="ccccc" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:1.69074;stroke-linecap:round;stroke-linejoin:round"
d="m 12.699999,10.054166 v 5.291668"
id="path2"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1.69074;stroke-linecap:round;stroke-linejoin:round"
d="m 21.166666,10.583333 v 4.233334"
id="path3" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.69074;stroke-linecap:round;stroke-linejoin:round"
d="m 14.816666,23.283334 c 0,-0.79375 -10e-7,-2.645833 2.116666,-2.645834 2.116666,1e-6 2.116667,1.852084 2.116667,2.645834 z"
id="path4"
sodipodi:nodetypes="cccc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@@ -0,0 +1,43 @@
include <../../lib/chamfered-cube.scad>
numPaddles = 4;
// All units in millimeters
//
// screw distance (on center), horizontal and vertical
screwDX = 45;
screwDY = 82;
// paddle size
pX = 33.7;
pY = 66.3;
// inter-switch distance (horizontal)
interX = 12;
// plate side size (square)
sideX = pX*numPaddles + interX*(numPaddles - 1) + 64;
sideY = 120;
pDepth = 6;
backingDepth = 2;
tDepth = pDepth + backingDepth;
pOffsetX = 32;
pOffsetY = (sideY - pY)/2;
difference() {
translate([0, 0, -2])
chamferedCube([sideX, sideY, tDepth - 3 + 2], chamfer=2);
// bottom flush cut
translate([-10, -10, -4]) cube([sideX + 20, sideY + 20, 4]);
// paddle cutouts
for (i = [0:numPaddles - 1]) {
translate([pOffsetX + (pX + interX)*i, pOffsetY, -2]) cube([pX, pY, tDepth + 4]);
}
// interior-space carve-out
translate([4, 4, -2]) chamferedCube([sideX - 8, sideY - 8, tDepth - 5 + 2]);
}
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 33.866666 33.866666"
version="1.1"
id="svg1"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="stair-lights-icon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showguides="true"
showgrid="true"
inkscape:zoom="3.4906242"
inkscape:cx="-5.2999116"
inkscape:cy="11.029546"
inkscape:window-width="3440"
inkscape:window-height="1368"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid5"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="8"
enabled="true"
visible="true"
dotted="true" />
</sodipodi:namedview>
<defs
id="defs1">
<inkscape:path-effect
effect="mirror_symmetry"
start_point="7.2760413,8.8635414"
end_point="7.2760413,10.451041"
center_point="7.2760413,9.6572912"
id="path-effect7"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="free"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round"
d="M 1.7197916,6.4822912 -0.13229162,9.1281244 M 12.832291,6.4822912 14.684374,9.1281244"
id="path7"
inkscape:path-effect="#path-effect7"
inkscape:original-d="M 1.7197916,6.4822912 -0.13229162,9.1281244"
transform="translate(1.1906249,7.2760414)"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round"
d="m 8.4666662,15.874999 0,2.910417"
id="path8"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round"
d="m 31.749999,12.699999 h -6.35 v 6.35 h -6.35 v 6.35 h -6.35 V 31.75 l -6.3499993,-2e-6"
id="path9"
sodipodi:nodetypes="ccccccc" />
<path
id="path10"
style="fill:none;stroke:#000000;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round"
d="m 6.3499999,2.1166666 v 2.6458333 0 C 4.9984853,5.5053705 4.2354036,6.9244459 4.2333332,8.4666665 4.233333,10.804672 6.128661,12.7 8.4666665,12.7 10.804672,12.7 12.7,10.804672 12.7,8.4666665 12.697929,6.9244458 11.934848,5.5053703 10.583333,4.7624999 v 0 -2.6458333 c -0.7937502,-0.5291667 -3.4395834,-0.5291667 -4.2333331,0 z"
sodipodi:nodetypes="ccccsccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

@@ -0,0 +1,40 @@
include <../../lib/chamfered-cube.scad>
// All units in millimeters
//
// screw distance (on center), horizontal and vertical
screwDX = 45;
screwDY = 82;
// paddle size
pX = 33.7;
pY = 66.3;
// inter-switch distance (horizontal)
interX = 12;
// plate side size (square_
side = 120;
pDepth = 6;
backingDepth = 2;
tDepth = pDepth + backingDepth;
pOffsetX = (side - 2*pX - interX)/2;
pOffsetY = (side - pY)/2;
difference() {
translate([0, 0, -2])
chamferedCube([side, side, tDepth - 3 + 2], chamfer=2);
// bottom flush cut
translate([-10, -10, -4]) cube([side + 20, side + 20, 4]);
// paddle cutouts
for (i = [0, 1]) {
translate([pOffsetX + (pX + interX)*i, pOffsetY, -2]) cube([pX, pY, tDepth + 4]);
}
// interior-space carve-out
translate([4, 4, -2]) chamferedCube([side - 8, side - 8, tDepth - 5 + 2]);
}
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -351,7 +351,7 @@ module lowerRightDrawerFace(outerDims, boxDims) {
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]); cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
translate([ translate([
feltThickness + boardThickness/2 + drawerWidth(boxDims) - boardThickness, feltThickness + boardThickness/2 + drawerWidth(boxDims) - boardThickness,
feltThickness + boardThickness/2 + boardThickness - ep, drawerSideOffset + boardThickness - ep,
-ep]) -ep])
cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]); cube([boardThickness, drawerHeight(boxDims) - boardThickness + ep, 4+ep]);
@@ -626,7 +626,7 @@ innerBoxDims =
//drawerBottom(innerBoxDims); //drawerBottom(innerBoxDims);
//lowerLeftDrawerFace(shelfDims, innerBoxDims); //lowerLeftDrawerFace(shelfDims, innerBoxDims);
//lowerRightDrawerFace(shelfDims, innerBoxDims); lowerRightDrawerFace(shelfDims, innerBoxDims);
//upperLeftDrawerFace(shelfDims, innerBoxDims); //upperLeftDrawerFace(shelfDims, innerBoxDims);
upperRightDrawerFace(shelfDims, innerBoxDims); //upperRightDrawerFace(shelfDims, innerBoxDims);
//drawerHandle(); //drawerHandle();
Binary file not shown.
Binary file not shown.
+174
View File
@@ -0,0 +1,174 @@
// use </home/elijah/Applications/OpenSCAD Libraries/OpenSCAD-Pattern-Filling-master/pattern.scad>
wallLength=127;
largeWallHeight=228.6;
//full size is 228.6mm
wallWidth=10;
sinkHoleDiameter=19.05;
sinkPadding=1;
circleRadius=3.175;
module CutOutCircles(r)
{
color("blue")
cylinder(h=15, r=r, center=false);
translate([0, 0, 29])
sphere(r*5.2);
}
module DrawAllCircles(startPoint, endPoint, distanceBetween, xPoint, zPoint) {
for(i = [startPoint : distanceBetween : endPoint])
{
translate([xPoint, i, zPoint])
CutOutCircles(circleRadius);
}
}
module mainBody() {
translate([0, 0, wallWidth])
difference(){
union(){
//Longer Wall
color("cyan")
cube([wallLength, wallWidth, largeWallHeight]);
color("cyan")
translate([0, -117, 0])
cube([wallLength, wallWidth, largeWallHeight]);
//Shorter Wall
color("yellow")
translate([0,0,-10])
rotate([0, 0, -90])
cube([wallLength - (wallWidth*2), wallWidth, largeWallHeight + 10]);
color("yellow")
translate([117, 0, -10])
rotate([0, 0, -90])
cube([wallLength - (wallWidth*2), wallWidth, largeWallHeight + 10]);
difference()
{
color("green")
rotate([90,0,0])
translate([0, -10, -10])
cube([wallLength, wallWidth, wallLength]);
DrawAllCircles(-72, -27.5, circleRadius*4, 15, -20);
DrawAllCircles(-91, -10, circleRadius*4, 27.5, -20);
DrawAllCircles(-91, -10, circleRadius*4, 40, -20);
DrawAllCircles(-91, -10, circleRadius*4, 52.5, -20);
DrawAllCircles(-91, -10, circleRadius*4, 65, -20);
DrawAllCircles(-91, -10, circleRadius*4, 77.5, -20);
DrawAllCircles(-91, -10, circleRadius*4, 90, -20);
DrawAllCircles(-91, -10, circleRadius*4, 102.5, -20);
DrawAllCircles(-72, -27.5, circleRadius*4, 113, -20);
}
}
// Holes in the bottom
// translate([15, -30, -20])
// CutOutCircles(circleRadius);
// Triangular cutouts in the corners
union(){
color("blue")
translate([0, 10, -30])
rotate([45, 0, 45])
cube([70,70,70], center=true);
color("blue")
translate([0, -117, -30])
rotate([45, 0, -45])
cube([70,70,70], center=true);
color("blue")
translate([wallLength, 10, -30])
rotate([-45, 0, -45])
cube([70,70,70], center=true);
color("blue")
translate([127, -117, -30])
rotate([-45, 0, 45])
cube([70,70,70], center=true);
}
}
}
// Grip Mechanism
module grip() {
translate([0, 0, wallWidth])
difference()
{
union()
{
//Base
translate([63.5, 30, 162.3])
cube([90.8,47.4,76.2], center=true);
//Rounded far edge
translate([63.5, 46.6625, 125])
rotate([0,90,0])
cylinder(h = 90.8, r = 6.0375, center=true);
//Rounded near edge
translate([63.5, 15.6875, 125])
rotate([0,90,0])
cylinder(h = 90.8, r = 6.0375, center=true);
}
//Opening for grip
union()
{
//Cylinders for hole
translate([63.5, 31, 170])
rotate([0,90,0])
cylinder(h = 91, r = sinkHoleDiameter/2 + (sinkPadding * 2), center=true);
translate([63.5, 31, 138.7])
cube([91, sinkHoleDiameter + (sinkPadding * 2), 60], center=true);
}
}
}
difference() {
union() {
rotate([0, -45, 0])
union() {
mainBody();
grip();
for(i = [1,2]) {
translate([-wallLength * 2 - 0.1, -wallLength*i/3 + wallWidth, 0])
cube([wallLength*2, 1.2, largeWallHeight]);
}
for(i = [-1, 1]) {
translate([-wallLength*2 + 63.5 - (90.8/2) - 0.1, 30 + 16*i, 0])
cube([wallLength*2, 1.2, largeWallHeight]);
translate([0, -50-50*i, -80.1]) cube([80, 1.2, 80]);
}
}
translate([-140, -74, 0]) cube([1.2, 121, 100]);
}
translate([-400, -400, -400]) cube([800, 800, 400]);
translate([-980, -200, -1]) cube([800, 400, 400]);
translate([90, -200, -1]) cube([800, 400, 400]);
}