From 3786b1ee9eaf6f1c7a4c4bd3e47d1e6aee3b7137 Mon Sep 17 00:00:00 2001 From: wardwouts Date: Sun, 16 Jun 2024 11:06:39 +0200 Subject: [PATCH 1/2] update with actual dimensions --- Stenen_kastje_Ruben/assembly.png | Bin 17200 -> 8698 bytes Stenen_kastje_Ruben/assembly.scad | 27 ++++++++++++-------- Stenen_kastje_Ruben/back_plane.scad | 7 +++-- Stenen_kastje_Ruben/dimensions.scad | 4 +-- Stenen_kastje_Ruben/functions.scad | 17 ++++++++++++ Stenen_kastje_Ruben/horizontal_outside.scad | 5 ++-- Stenen_kastje_Ruben/horizontal_slat.scad | 4 +-- Stenen_kastje_Ruben/parts | 10 ++++---- Stenen_kastje_Ruben/vertical_outside.scad | 8 +++--- Stenen_kastje_Ruben/vertical_slat.scad | 7 +++-- 10 files changed, 54 insertions(+), 35 deletions(-) create mode 100644 Stenen_kastje_Ruben/functions.scad diff --git a/Stenen_kastje_Ruben/assembly.png b/Stenen_kastje_Ruben/assembly.png index 1a643a8b9ceffd47bc1fda3a5c59f2eb94079835..0b490edc5f1a4bd7d193d1ba881331d20beefd31 100644 GIT binary patch literal 8698 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 literal 17200 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 E7qeFmF8}}l diff --git a/Stenen_kastje_Ruben/assembly.scad b/Stenen_kastje_Ruben/assembly.scad index 6de14c1..5c2d094 100644 --- a/Stenen_kastje_Ruben/assembly.scad +++ b/Stenen_kastje_Ruben/assembly.scad @@ -6,24 +6,29 @@ use use use -for (i=[1:nr_cells_vertical-1]){ - translate([0, 0, cell_height*i]) - horizontal_slat(); +translate([0, -outer_incut, 0]){ + for (i=[1:nr_cells_vertical-1]){ + translate([0, 0, cell_height*i]) + horizontal_slat(); + } } -for (i=[1:nr_cells_horizontal-1]){ - translate([0, cell_width*i, 0]) - vertical_slat(); +translate([0, 0, -outer_incut]){ + for (i=[1:nr_cells_horizontal-1]){ + translate([0, cell_width*i, 0]) + vertical_slat(); + } } -translate([0, -(outer_thickness-outer_incut), 0]) +translate([0, -(outer_thickness), 0]) vertical_outside(); -translate([0, cell_width*nr_cells_horizontal-outer_incut, 0]) +translate([0, cell_width*nr_cells_horizontal, 0]) vertical_outside(); -horizontal_outside(); -translate([0, 0, cell_height*nr_cells_vertical + outer_thickness - 2*outer_incut]) +translate([0, 0, -outer_thickness]) + horizontal_outside(); +translate([0, 0, cell_height*nr_cells_vertical]) horizontal_outside(); -translate([-back_thickness, -(outer_thickness - outer_incut), -(outer_thickness)]) +translate([-back_thickness, -(outer_thickness), -(outer_thickness)]) back_plane_fancy(); diff --git a/Stenen_kastje_Ruben/back_plane.scad b/Stenen_kastje_Ruben/back_plane.scad index 7f2e12c..8352efb 100644 --- a/Stenen_kastje_Ruben/back_plane.scad +++ b/Stenen_kastje_Ruben/back_plane.scad @@ -1,17 +1,16 @@ include +include module back_plane(){ color("lightblue") - cube(size=[back_thickness, 2*outer_thickness - 2*outer_incut + cell_width * nr_cells_horizontal, 2*outer_thickness - 2*outer_incut + cell_height * nr_cells_vertical], center=false); - echo("#### Back: thickness = ", back_thickness, " height = ", 2*outer_thickness - 2*outer_incut + cell_height * nr_cells_vertical, "width = ", 2*outer_thickness - 2*outer_incut + cell_width * nr_cells_horizontal); + cuben("Back", size=[back_thickness, 2*outer_thickness + cell_width * nr_cells_horizontal, 2*outer_thickness + cell_height * nr_cells_vertical]); } back_plane(); module back_plane_fancy(){ color("lightblue") - cube(size=[back_thickness, 2*outer_thickness - 2*outer_incut + cell_width * nr_cells_horizontal, 2*outer_thickness - 2*outer_incut + cell_height * nr_cells_vertical + back_fancy_height], center=false); - echo("#### Fancy back: thickness = ", back_thickness, " height = ", 2*outer_thickness - 2*outer_incut + cell_height * nr_cells_vertical + back_fancy_height, "width = ", 2*outer_thickness - 2*outer_incut + cell_width * nr_cells_horizontal); + cuben("Fancy back", size=[back_thickness, 2*outer_thickness + cell_width * nr_cells_horizontal, 2*outer_thickness + cell_height * nr_cells_vertical + back_fancy_height]); } back_plane_fancy(); diff --git a/Stenen_kastje_Ruben/dimensions.scad b/Stenen_kastje_Ruben/dimensions.scad index c49e2f7..bcafb6c 100644 --- a/Stenen_kastje_Ruben/dimensions.scad +++ b/Stenen_kastje_Ruben/dimensions.scad @@ -13,6 +13,6 @@ slat_depth = 40; back_thickness = 4; back_fancy_height = 50; -outer_thickness = 6; -outer_incut = 2; +outer_thickness = 12; +outer_incut = 5; outer_depth = slat_depth; diff --git a/Stenen_kastje_Ruben/functions.scad b/Stenen_kastje_Ruben/functions.scad new file mode 100644 index 0000000..2089daf --- /dev/null +++ b/Stenen_kastje_Ruben/functions.scad @@ -0,0 +1,17 @@ +// input : list of numbers +// output : sorted list of numbers +function quicksort(arr) = !(len(arr)>0) ? [] : let( + pivot = arr[floor(len(arr)/2)], + lesser = [ for (y = arr) if (y < pivot) y ], + equal = [ for (y = arr) if (y == pivot) y ], + greater = [ for (y = arr) if (y > pivot) y ] +) concat( + quicksort(lesser), equal, quicksort(greater) +); + +module cuben(name, size){ + cube(size=size, center=false); + // sizes should be ordered biggest to smallest + size_sorted=quicksort(size); + echo(str("#### ", name, ": " , size_sorted[2], "x", size_sorted[1], "x", size_sorted[0])); +}; diff --git a/Stenen_kastje_Ruben/horizontal_outside.scad b/Stenen_kastje_Ruben/horizontal_outside.scad index dff0092..55098ae 100644 --- a/Stenen_kastje_Ruben/horizontal_outside.scad +++ b/Stenen_kastje_Ruben/horizontal_outside.scad @@ -1,11 +1,10 @@ include +include module horizontal_outside(){ color("yellow") - translate([0, 0, -outer_thickness]) - cube(size=[outer_depth, cell_width * nr_cells_horizontal, outer_thickness], center=false); + cuben(" Horizontal outside", size=[outer_depth, cell_width * nr_cells_horizontal, outer_thickness]); - echo("#### Horizontal outside: length = ", cell_width * nr_cells_horizontal , " depth = ", outer_depth, "thickness = ", outer_thickness); } horizontal_outside(); diff --git a/Stenen_kastje_Ruben/horizontal_slat.scad b/Stenen_kastje_Ruben/horizontal_slat.scad index 8ffb145..97e1f2a 100644 --- a/Stenen_kastje_Ruben/horizontal_slat.scad +++ b/Stenen_kastje_Ruben/horizontal_slat.scad @@ -1,11 +1,11 @@ include +include module horizontal_slat(){ color("pink") translate([0, 0, -slat_thickness/2]) - cube(size=[slat_depth, cell_width * nr_cells_horizontal, slat_thickness], center=false); + cuben("Horizontal slat", size=[slat_depth, 2*outer_incut + cell_width * nr_cells_horizontal, slat_thickness]); - echo("#### Horizontal slat: length = ", cell_width * nr_cells_horizontal , " depth = ", slat_depth, "thickness = ", slat_thickness); } horizontal_slat(); diff --git a/Stenen_kastje_Ruben/parts b/Stenen_kastje_Ruben/parts index 36d1743..b0922f2 100644 --- a/Stenen_kastje_Ruben/parts +++ b/Stenen_kastje_Ruben/parts @@ -1,6 +1,6 @@ 0 x -1 x ECHO: "#### Fancy back: thickness = ", 4, " height = ", 308, "width = ", 308 -2 x ECHO: "#### Horizontal outside: length = ", 300, " depth = ", 40, "thickness = ", 6 -4 x ECHO: "#### Horizontal slat: length = ", 300, " depth = ", 40, "thickness = ", 4 -2 x ECHO: "#### Vertical outside: length = ", 262, " depth = ", 40, "thickness = ", 6 -5 x ECHO: "#### Vertical slat: length = ", 250, " depth = ", 40, "thickness = ", 4 +2 x ECHO: "#### Horizontal outside: 300x40x12" +1 x ECHO: "#### Fancy back: 324x324x4" +4 x ECHO: "#### Horizontal slat: 310x40x4" +2 x ECHO: "#### Vertical outside: 274x40x12" +5 x ECHO: "#### Vertical slat: 260x40x4" diff --git a/Stenen_kastje_Ruben/vertical_outside.scad b/Stenen_kastje_Ruben/vertical_outside.scad index 9fdeffe..5d83dd1 100644 --- a/Stenen_kastje_Ruben/vertical_outside.scad +++ b/Stenen_kastje_Ruben/vertical_outside.scad @@ -1,11 +1,11 @@ include +include module vertical_outside(){ color("green") - translate([0, 0, -outer_thickness]) - cube(size=[outer_depth, outer_thickness, (cell_height * nr_cells_vertical) + (2*outer_thickness) - 2*outer_incut], center=false); - - echo("#### Vertical outside: length = ", (cell_height * nr_cells_vertical) + (2*outer_thickness) , " depth = ", outer_depth, "thickness = ", outer_thickness); + translate([0, 0, -outer_thickness]) { + cuben("Vertical outside", size=[outer_depth, outer_thickness, (cell_height * nr_cells_vertical) + (2*outer_thickness) ]); + } } vertical_outside(); diff --git a/Stenen_kastje_Ruben/vertical_slat.scad b/Stenen_kastje_Ruben/vertical_slat.scad index 8b164f5..9a630f9 100644 --- a/Stenen_kastje_Ruben/vertical_slat.scad +++ b/Stenen_kastje_Ruben/vertical_slat.scad @@ -1,11 +1,10 @@ include +include module vertical_slat(){ color("red") - translate([0, 0, -slat_thickness/2]) - cube(size=[slat_depth, slat_thickness, cell_height * nr_cells_vertical], center=false); - - echo("#### Vertical slat: length = ", cell_height * nr_cells_vertical , " depth = ", slat_depth, "thickness = ", slat_thickness); + translate([0, -slat_thickness/2, 0 ]) + cuben("Vertical slat", size=[slat_depth, slat_thickness, 2*outer_incut + cell_height * nr_cells_vertical]); } vertical_slat(); From 850333ea1b9c7c30202d496275126eb7fd465a2e Mon Sep 17 00:00:00 2001 From: wardwouts Date: Sat, 21 Mar 2026 10:46:44 +0100 Subject: [PATCH 2/2] Bed David --- Bed_David/NOTES.md | 9 + Bed_David/TextGenerator.scad | 139 +++++ Bed_David/assembly.png | Bin 0 -> 8698 bytes Bed_David/assembly.scad | 150 ++++++ Bed_David/dimensions.scad | 19 + Bed_David/dimlines.scad | 784 ++++++++++++++++++++++++++++ Bed_David/functions.scad | 17 + Bed_David/horizontals.scad | 43 ++ Bed_David/partlist.sh | 3 + Bed_David/parts | 6 + Bed_David/posts.scad | 40 ++ Stenen_kastje_Ruben/dimensions.scad | 2 +- Stenen_kastje_Ruben/parts | 8 +- 13 files changed, 1215 insertions(+), 5 deletions(-) create mode 100644 Bed_David/NOTES.md create mode 100644 Bed_David/TextGenerator.scad create mode 100644 Bed_David/assembly.png create mode 100644 Bed_David/assembly.scad create mode 100644 Bed_David/dimensions.scad create mode 100644 Bed_David/dimlines.scad create mode 100644 Bed_David/functions.scad create mode 100644 Bed_David/horizontals.scad create mode 100755 Bed_David/partlist.sh create mode 100644 Bed_David/parts create mode 100644 Bed_David/posts.scad diff --git a/Bed_David/NOTES.md b/Bed_David/NOTES.md new file mode 100644 index 0000000..0039314 --- /dev/null +++ b/Bed_David/NOTES.md @@ -0,0 +1,9 @@ +2340-88 +Bed breedte - staanders: +2252 + +Latten zijn 69 breed. Gat er tussen van ~60. Daarmee heb ik 18 latten nodig. +(69*18)+(60*17) +2262 + +Lat ~900 lang. (iets minder). Dan passen er 3 uit een lat van 2700 lang. => 6 van nodig. diff --git a/Bed_David/TextGenerator.scad b/Bed_David/TextGenerator.scad new file mode 100644 index 0000000..51d19dd --- /dev/null +++ b/Bed_David/TextGenerator.scad @@ -0,0 +1,139 @@ +//Draw text +scale([4,4,4]) drawtext("Hello World!"); + +//Draw character set +//scale([2,2,2]) drawtext(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}"); + +module drawtext(text) { + //Characters + chars = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}"; + + //Chracter table defining 5x7 characters + //Adapted from: http://www.geocities.com/dinceraydin/djlcdsim/chartable.js + char_table = [ [ 0, 0, 0, 0, 0, 0, 0], + [ 4, 0, 4, 4, 4, 4, 4], + [ 0, 0, 0, 0,10,10,10], + [10,10,31,10,31,10,10], + [ 4,30, 5,14,20,15, 4], + [ 3,19, 8, 4, 2,25,24], + [13,18,21, 8,20,18,12], + [ 0, 0, 0, 0, 8, 4,12], + [ 2, 4, 8, 8, 8, 4, 2], + [ 8, 4, 2, 2, 2, 4, 8], + [ 0, 4,21,14,21, 4, 0], + [ 0, 4, 4,31, 4, 4, 0], + [ 8, 4,12, 0, 0, 0, 0], + [ 0, 0, 0,31, 0, 0, 0], + [12,12, 0, 0, 0, 0, 0], + [ 0,16, 8, 4, 2, 1, 0], + [14,17,25,21,19,17,14], + [14, 4, 4, 4, 4,12, 4], + [31, 8, 4, 2, 1,17,14], + [14,17, 1, 2, 4, 2,31], + [ 2, 2,31,18,10, 6, 2], + [14,17, 1, 1,30,16,31], + [14,17,17,30,16, 8, 6], + [ 8, 8, 8, 4, 2, 1,31], + [14,17,17,14,17,17,14], + [12, 2, 1,15,17,17,14], + [ 0,12,12, 0,12,12, 0], + [ 8, 4,12, 0,12,12, 0], + [ 2, 4, 8,16, 8, 4, 2], + [ 0, 0,31, 0,31, 0, 0], + [16, 8, 4, 2, 4, 8,16], + [ 4, 0, 4, 2, 1,17,14], + [14,21,21,13, 1,17,14], + [17,17,31,17,17,17,14], + [30,17,17,30,17,17,30], + [14,17,16,16,16,17,14], + [30,17,17,17,17,17,30], + [31,16,16,30,16,16,31], + [16,16,16,30,16,16,31], + [15,17,17,23,16,17,14], + [17,17,17,31,17,17,17], + [14, 4, 4, 4, 4, 4,14], + [12,18, 2, 2, 2, 2, 7], + [17,18,20,24,20,18,17], + [31,16,16,16,16,16,16], + [17,17,17,21,21,27,17], + [17,17,19,21,25,17,17], + [14,17,17,17,17,17,14], + [16,16,16,30,17,17,30], + [13,18,21,17,17,17,14], + [17,18,20,30,17,17,30], + [30, 1, 1,14,16,16,15], + [ 4, 4, 4, 4, 4, 4,31], + [14,17,17,17,17,17,17], + [ 4,10,17,17,17,17,17], + [10,21,21,21,17,17,17], + [17,17,10, 4,10,17,17], + [ 4, 4, 4,10,17,17,17], + [31,16, 8, 4, 2, 1,31], + [14, 8, 8, 8, 8, 8,14], + [ 0, 1, 2, 4, 8,16, 0], + [14, 2, 2, 2, 2, 2,14], + [ 0, 0, 0, 0,17,10, 4], + [31, 0, 0, 0, 0, 0, 0], + [ 0, 0, 0, 0, 2, 4, 8], + [15,17,15, 1,14, 0, 0], + [30,17,17,25,22,16,16], + [14,17,16,16,14, 0, 0], + [15,17,17,19,13, 1, 1], + [14,16,31,17,14, 0, 0], + [ 8, 8, 8,28, 8, 9, 6], + [14, 1,15,17,15, 0, 0], + [17,17,17,25,22,16,16], + [14, 4, 4, 4,12, 0, 4], + [12,18, 2, 2, 2, 6, 2], + [18,20,24,20,18,16,16], + [14, 4, 4, 4, 4, 4,12], + [17,17,21,21,26, 0, 0], + [17,17,17,25,22, 0, 0], + [14,17,17,17,14, 0, 0], + [16,16,30,17,30, 0, 0], + [ 1, 1,15,19,13, 0, 0], + [16,16,16,25,22, 0, 0], + [30, 1,14,16,15, 0, 0], + [ 6, 9, 8, 8,28, 8, 8], + [13,19,17,17,17, 0, 0], + [ 4,10,17,17,17, 0, 0], + [10,21,21,17,17, 0, 0], + [17,10, 4,10,17, 0, 0], + [14, 1,15,17,17, 0, 0], + [31, 8, 4, 2,31, 0, 0], + [ 2, 4, 4, 8, 4, 4, 2], + [ 4, 4, 4, 4, 4, 4, 4], + [ 8, 4, 4, 2, 4, 4, 8] ]; + + //Binary decode table + dec_table = [ "00000", "00001", "00010", "00011", "00100", "00101", + "00110", "00111", "01000", "01001", "01010", "01011", + "01100", "01101", "01110", "01111", "10000", "10001", + "10010", "10011", "10100", "10101", "10110", "10111", + "11000", "11001", "11010", "11011", "11100", "11101", + "11110", "11111" ]; + + //Process string one character at a time + for(itext = [0:len(text)-1]) { + //Convert character to index + ichar = search(text[itext],chars,1)[0]; + + //Decode character - rows + for(irow = [0:6]) { + //Select value to draw from table + val = dec_table[char_table[ichar][irow]]; + + //Decode character - cols + for(icol = [0:4]) { + // Retrieve bit to draw + bit = search(val[icol],"01",1)[0]; + + if(bit) { + //Output cube + translate([icol + (6*itext), irow, 0]) + cube([1.0001,1.0001,1]); + } + } + } + } +} diff --git a/Bed_David/assembly.png b/Bed_David/assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..0b490edc5f1a4bd7d193d1ba881331d20beefd31 GIT binary patch literal 8698 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 literal 0 HcmV?d00001 diff --git a/Bed_David/assembly.scad b/Bed_David/assembly.scad new file mode 100644 index 0000000..f1cf774 --- /dev/null +++ b/Bed_David/assembly.scad @@ -0,0 +1,150 @@ +include +include + +use +use + +// The posts +post_foot_wall(); + +translate([beam_width + matress_width, 0, 0]) + post_foot_room(); + +translate([0, bed_length - beam_depth, 0]) + post_head_wall(); + +translate([beam_width + matress_width, bed_length-beam_depth, 0]) + post_head_room(); + +translate([beam_width + matress_width, beam_depth + step_width, 0]) + post_stairs(); + +translate([beam_width + matress_width, bed_length - step_width - beam_depth*2, 0]) + post_head_standoff(); + +// The horizontals +// Foot end +translate([beam_width, 0, bed_height-beam_width]) + horizontal_headfootend(); +color("black"){ + translate([beam_width, 0, bed_height+1*beam_width]) + rotate([90,0,0]) + dimensions(length=matress_width); +} +translate([beam_width, 0, 0]) + horizontal_headfootend(); +color("black"){ + translate([-beam_width, 0, 1*beam_width]) + rotate([90,-90,0]) + dimensions(length=((bed_height-bed_box_height)/5)-beam_width); +} + +translate([beam_width, 0, bed_height-bed_box_height]) + horizontal_headfootend(); +color("black"){ + translate([-beam_width, 0, 1*beam_width+(bed_height-bed_box_height)]) + rotate([90,-90,0]) + dimensions(length=bed_box_height-2*beam_width); +} + +translate([beam_width, 0, (bed_height-bed_box_height)/5]) + horizontal_headfootend(); +color("black"){ + translate([-beam_width, 0, 1*beam_width+(bed_height-bed_box_height)/5]) + rotate([90,-90,0]) + dimensions(length=((bed_height-bed_box_height)/5)-beam_width); +} + +translate([beam_width, 0, ((bed_height-bed_box_height)/5)*2]) + horizontal_headfootend(); +color("black"){ + translate([-beam_width, 0, 1*beam_width+((bed_height-bed_box_height)/5)*2]) + rotate([90,-90,0]) + dimensions(length=((bed_height-bed_box_height)/5)-beam_width); +} +translate([beam_width, 0, ((bed_height-bed_box_height)/5)*3]) + horizontal_headfootend(); +color("black"){ + translate([-beam_width, 0, 1*beam_width+((bed_height-bed_box_height)/5)*3]) + rotate([90,-90,0]) + dimensions(length=((bed_height-bed_box_height)/5)-beam_width); +} +translate([beam_width, 0, ((bed_height-bed_box_height)/5)*4]) + horizontal_headfootend(); +color("black"){ + translate([-beam_width, 0, 1*beam_width+((bed_height-bed_box_height)/5)*4]) + rotate([90,-90,0]) + dimensions(length=((bed_height-bed_box_height)/5)-beam_width); +} + +echo(str("#### Step distance: ", (bed_height-bed_box_height)/5)); + +// Head end +translate([beam_width, bed_length-beam_depth, bed_height-beam_width]) + horizontal_headfootend(); +translate([beam_width, bed_length-beam_depth, bed_height-bed_box_height]) + horizontal_headfootend(); +translate([beam_width, bed_length-beam_depth, 0]) + horizontal_headfootend(); + +// Long horizontals +translate([0, beam_depth, bed_height-beam_depth]) + horizontal_long(); +translate([0, beam_depth, bed_height-bed_box_height]) + horizontal_long(); +translate([0, beam_depth, 0]) + horizontal_long(); + +// Medium long horizontals +translate([matress_width+beam_width,beam_depth*2 + step_width, bed_height-beam_depth]) + horizontal_medium_long_top(); +translate([matress_width+beam_width,beam_depth*2 + step_width, bed_height-bed_box_height]) + horizontal_medium_long(); + +// Steps +translate([matress_width+beam_width,beam_depth, bed_height-bed_box_height]) + step(); + +translate([matress_width+beam_width,beam_depth, 0]) + step(); +translate([matress_width+beam_width,beam_depth, (bed_height-bed_box_height)/5]) + step(); +translate([matress_width+beam_width,beam_depth, ((bed_height-bed_box_height)/5)*2]) + step(); +translate([matress_width+beam_width,beam_depth, ((bed_height-bed_box_height)/5)*3]) + step(); +translate([matress_width+beam_width,beam_depth, ((bed_height-bed_box_height)/5)*4]) + step(); + +// Reinforcement verticals +translate([0, ((bed_length - beam_depth)/ 2), bed_height-bed_box_height+beam_depth]) + reinforce_vert(); +color("black"){ + translate([0, beam_width, bed_height+beam_width]) + rotate([90,0,90]) + dimensions(length=((bed_length-beam_width*3)/2)); + translate([0, beam_width+(bed_length-beam_width)/2, bed_height+beam_width]) + rotate([90,0,90]) + dimensions(length=((bed_length-beam_width*3)/2)); +} +translate([matress_width + beam_width, (bed_length - beam_depth)/2, bed_height-bed_box_height+beam_depth]) + reinforce_vert(); +color("black"){ + translate([matress_width+beam_width*2, beam_width*2+step_width, bed_height+beam_width]) + rotate([90,0,90]) + dimensions(length=(bed_length-beam_width)/2-(beam_width*2+step_width)); + translate([matress_width+beam_width*2, beam_width+(bed_length-beam_width)/2, bed_height+beam_width]) + rotate([90,0,90]) + dimensions(length=(bed_length-beam_width)/2-(beam_width*2+step_width)); +} + +// Head end extra post +translate([matress_width+beam_width, bed_length - beam_depth - step_width, 0]) + step(); +translate([matress_width+beam_width, bed_length - beam_depth - step_width, bed_height-bed_box_height]) + step(); +color("black"){ + translate([matress_width+beam_width*2, bed_length-beam_depth-step_width, bed_height+beam_width]) + rotate([90,0,90]) + dimensions(length=step_width); +} diff --git a/Bed_David/dimensions.scad b/Bed_David/dimensions.scad new file mode 100644 index 0000000..7d43f44 --- /dev/null +++ b/Bed_David/dimensions.scad @@ -0,0 +1,19 @@ +// details in arcs +FN=40; + +DIM_LINE_WIDTH = 5; + +beam_width = 44; +beam_depth = 44; + +matress_width = 900; +matress_length = 2000; + +step_width = 360; + +// bij plint gemeten! +bed_length = 2340; +bed_height = 1800; +bed_box_height = 300; + +board_thickness = 3.6; diff --git a/Bed_David/dimlines.scad b/Bed_David/dimlines.scad new file mode 100644 index 0000000..ee3031c --- /dev/null +++ b/Bed_David/dimlines.scad @@ -0,0 +1,784 @@ +/* This is a first pass at dimension lines for OpenSCAD. The text generated for + * this comes from http://www.thingiverse.com/thing:59817, and I gratefully + * acknowledge user PGreenland for creating this dotmatrix style font. + * + * Download his file first, TextGenerator.scad, before attempting to run this + * program. + * + * What this program does: + * + * This program can draw lines with arrows and has a primitive dimensioning + * element for putting text within arrows. In addition, should the area being + * dimensioned be too narrow, there is a provision for putting the text on + * either side of the arrows. + * + * The dimension lines are drawn on the xy plane and are meant to be seen in a + * top view. + * + * ======================================================= + * Be sure to view this from above -- ctrl-4 + * ======================================================= + * + * Available: + * + * Assorted constants to ease the use of dimensioning line. Because there is + * no introspection regarding the dimensions of your creations, you will want + * to adjust the parameters to fit the context of your creation. You can adjust + * the size of the text, lines, etc to match the rest of your objects. + * + * the following functions or modules are available. + * + * line(length, width, height=DIM_HEIGHT, left_arrow=false, right_arrow=false) + * Can draw a line with the options of including an arrow at either end + * + * circle_center(radius, size, line_width) + * Draws the cross in the center of a circle. There are defaults for the + * cross size and line width + * + * dimensions(length, line_width, loc=DIM_CENTER) + * draws text within lines, such as <--- 3.5 ---> + * with the use of the variable loc you can alter the placement of the text + * loc=DIM_CENTER <--- 3.5 ---> this is the default + * loc=DIM_LEFT 3.5 <----> + * loc=DIM_RIGHT <----> 3.5 + * loc=DIM_OUTSIDE ---> 3.5 <--- + * + * leader_line(angle, radius, angle_length, horz_line_length, + * direction=DIM_RIGHT, line_width, text) + * + * for use in pointing to the edge of a circle and showing text + * + * usage of the leader line: + * translate to the center of the circle + * Typically leader lines have a bend in them. The angle variable is used + * to specify the angle from which the line will point to the center of the + * circle. The radius specifies the location of the arrow. The + * angle_length is distance that the leader line takes until meeting the + * horizontal line. Once the angled line meets the horizontal line, that + * line will either extend to the right or left. direction and therefore + * be either DIM_RIGHT or DIM_LEFT. line_width typically would be whatever + * constant you have selected for all your dimensioned lines. Finally, the + * text will be the value that you wish to show, such as R 0.500. + * + * + * Created by Don Smiley + */ + +use + +// these variables are used within the modules +DIM_CENTER = 0; +DIM_LEFT = 1; +DIM_RIGHT = 2; +DIM_OUTSIDE = 3; +DIM_HORZ = 0; +DIM_VERT = 1; +DIM_UPPER_LEFT = 0; +DIM_UPPER_RIGHT = 1; +DIM_LOWER_LEFT = 2; +DIM_LOWER_RIGHT = 3; + +/* Constants related to the annotation lines + * + * Because the dimension of the part to be documented can vary widely, you + * probably are going to need to adjust the parameters to fit the context of + * your part. + * + * For example, the following parameters were used for a part 3.5 units long. + * In addition, DIM_HEIGHT is a height meant to be slightly above your tallest + * part. + */ + +DIM_LINE_WIDTH = .025; // width of dimension lines +DIM_SPACE = .1; // a spacing value to make it easier to adjust line spacing etc +DIM_HEIGHT = .01; // height of lines + +// refers to the size of the cross within a circle +DIM_HOLE_CENTER = DIM_LINE_WIDTH * 6; + +// an approximation that sets the font size relative to the line widths +DIM_FONTSCALE = DIM_LINE_WIDTH * .7; + + + +OFFSET = .05; // added to the hole length to extend past the surface of the cube + +module arrow(arr_points, arr_length, height) { + // arrow points to the left + linear_extrude(height=height, convexity=2) + + polygon( + points = [[0, 0], + [arr_points, arr_points / 2], + [arr_length, 0], + [arr_points, -arr_points / 2]], + paths = [[0, 1, 2, 3]], convexity = 2); +} + +module line(length, width=DIM_LINE_WIDTH, + height=DIM_HEIGHT, + left_arrow=false, + right_arrow=false + ) { + /* This module draws a line that can have an arrow on either end. Because + * the intended use is to be viewed strictly from above, the height of the + * line is set arbitrarily thin. + * + * The factors arr_length and arr_points are used to create a proportionate + * arrow. Your sense of asthetics may lead you to choose different + * numbers. + */ + + arr_points = width * 4; + arr_length = arr_points * .6; + + union() { + if (left_arrow && right_arrow) { + translate([arr_length, -width / 2, 0]) + cube([length - arr_length * 2, width, height], center=false); + } else { + + if (left_arrow) { + translate([arr_length, -width / 2, 0]) + cube([length - arr_length, width, height], center=false); + } else { + if (right_arrow) { + translate([0, -width / 2, 0]) + cube([length - arr_length, width, height], center=false); + } else { + translate([0, -width / 2, 0]) + cube([length, width, height], center=false); + } + + } + } + + if (left_arrow) { + arrow(arr_points, arr_length, height); + } + + if (right_arrow) { + translate([length, 0, 0]) + rotate([0, 0, 180]) + arrow(arr_points, arr_length, height); + + } + } +} + + +module circle_center(radius, size=DIM_HOLE_CENTER, line_width=DIM_LINE_WIDTH) { + + translate([-size / 2, 0, 0]) + line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false, + right_arrow=false); + + translate([radius - size / 2, 0, 0]) + line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false, + right_arrow=false); + + translate([-radius - size / 2, 0, 0]) + line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false, + right_arrow=false); + + translate([0, -size / 2, 0]) + rotate([0, 0, 90]) + line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false, + right_arrow=false); + + translate([0, radius - size / 2, 0]) + rotate([0, 0, 90]) + line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false, + right_arrow=false); + + translate([0, -radius - size / 2, 0]) + rotate([0, 0, 90]) + line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false, + right_arrow=false); + +} + +module dimensions(length, line_width=DIM_LINE_WIDTH, loc=DIM_CENTER) { + + + text = str(length); + space = len(text) * DIM_FONTSCALE * 7; + + if (loc == DIM_CENTER) { + line(length=length / 2 - space / 2, width=line_width, height=DIM_HEIGHT, + left_arrow=true, right_arrow=false); + translate([(length) / 2 - space / 2 * .9, -DIM_FONTSCALE * 3, 0]) + scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE]) + drawtext(text); + + translate([length / 2 + space / 2, 0, 0]) + line(length=length / 2 - space / 2, width=line_width, height=DIM_HEIGHT, + left_arrow=false, right_arrow=true); + } else { + + if (loc == DIM_LEFT) { + line(length=length, width=line_width, height=DIM_HEIGHT, + left_arrow=true, right_arrow=true); + + translate([-space, -DIM_FONTSCALE * 3, 0]) + scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE]) + drawtext(text); + } else { + if (loc == DIM_RIGHT) { + line(length=length, width=line_width, height=DIM_HEIGHT, + left_arrow=true, right_arrow=true); + + translate([length + space, -DIM_FONTSCALE * 3, 0]) + scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE]) + drawtext(text); + } else { + if (loc == DIM_OUTSIDE) { + + rotate([0, 180, 0]) + line(length=length / 2, width=line_width, height=DIM_HEIGHT, + left_arrow=true, right_arrow=false); + + translate([(length) / 2 - space / 2 * .9, + -DIM_FONTSCALE * 3, 0]) + scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE]) + drawtext(text); + + translate([length, 0, 0]) + line(length=length / 2, width=line_width, height=DIM_HEIGHT, + left_arrow=true, right_arrow=false); + } + } + } + } +} + +module leader_line(angle, radius, angle_length, horz_line_length, + direction=DIM_RIGHT, line_width=DIM_LINE_WIDTH, text, do_circle=false) { + /* leader_line + * + * Creates a line that points directly at a center point from the given + * radius. + * Then, a short horzizontal line is generated, followed by text. The + * direction of the horizontal short line defaults to the right, the + * choice made by either DIM_RIGHT or DIM_LEFT + */ + + text_length = len(text) * DIM_FONTSCALE * 6; + space = DIM_FONTSCALE * 6; + + rotate([0, 0, angle]) + translate([radius, 0, 0]) + line(length=angle_length, width=line_width, height=DIM_HEIGHT, + left_arrow=true, right_arrow=false); + + rotate([0, 0, angle]) + translate([radius + angle_length, 0, 0]) + rotate([0, 0, -angle]) + union() { + if (direction == DIM_RIGHT) { + line(length=horz_line_length, width=line_width, height=DIM_HEIGHT, + left_arrow=false, right_arrow=false); + + translate([(horz_line_length + space), -DIM_FONTSCALE * 3, 0]) + scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE]) + drawtext(text); + + if (do_circle) { + translate([(horz_line_length + space + text_length/2), + 0, 0]) + difference() { + cylinder(h=DIM_HEIGHT, r=text_length + space - line_width, + center=true, $fn=100); + cylinder(h=.05, r=text_length + space - line_width * 2, + center=true, $fn=100); + } + } + + } else { + translate([-horz_line_length, 0, 0]) + line(length=horz_line_length, width=line_width, height=DIM_HEIGHT, + left_arrow=false, right_arrow=false); + + translate([-(horz_line_length + space + text_length), + -DIM_FONTSCALE * 3, + 0]) + scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE]) + drawtext(text); + + } + } +} + +module titleblock(lines, descs, details) { + /* titleblock + * + * This module accepts the following arrays with formats: + * + * holds the description of the lines. width is a factor that + * expands the line width beyond DIM_LINE_WIDTH + * + * lines = [[startx, starty, horz/vert, length, width], + * [startx, starty, horz/vert, length, width]] + * + * holds the descriptions of the title blocks. these are meant to sit in + * the upper left corner. size, like width above, is a factor that + * increases/decreases the size of the font + * + * descs = [[startx, starty, horz/vert, text, size], + * [startx, starty, horz/vert, text, size]] + * + * holds the detail associated with the part being documented + * + * details = [[startx, starty, horz/vert, text, size], + * [startx, starty, horz/vert, text, size]] + */ + + DIM_FONTSCALE = DIM_LINE_WIDTH * .7; + + for (line = lines) { + translate([line[0] * DIM_LINE_WIDTH, + line[1] * DIM_LINE_WIDTH, + 0]) + if (line[2] == DIM_VERT) { + rotate([0, 0, -90]) + line(length=line[3] * DIM_LINE_WIDTH, + width=DIM_LINE_WIDTH * line[4], height=DIM_HEIGHT, + left_arrow=false, right_arrow=false); + } else { + line(length=(line[3] + 1) * DIM_LINE_WIDTH, + width=DIM_LINE_WIDTH * line[4], height=DIM_HEIGHT, + left_arrow=false, right_arrow=false); + } + + } + + for (line = descs) { + translate([line[0] * DIM_LINE_WIDTH, line[1] * DIM_LINE_WIDTH, 0]) + if (line[2] == DIM_VERT) { + rotate([0, 0, 90]) + scale([DIM_FONTSCALE * line[4], DIM_FONTSCALE * line[4], + DIM_FONTSCALE * line[4]]) + drawtext(line[3]); + } else { + scale([DIM_FONTSCALE * line[4], DIM_FONTSCALE * line[4], + DIM_FONTSCALE * line[4]]) + drawtext(line[3]); + } + } + + for (line = details) { + translate([line[0] * DIM_LINE_WIDTH, line[1] * DIM_LINE_WIDTH, 0]) + if (line[2] == DIM_VERT) { + rotate([0, 0, 90]) + scale([DIM_FONTSCALE * line[4], DIM_FONTSCALE * line[4], + DIM_FONTSCALE * line[4]]) + drawtext(line[3]); + } else { + scale([DIM_FONTSCALE * line[4], DIM_FONTSCALE * line[4], + DIM_FONTSCALE * line[4]]) + drawtext(line[3]); + } + } + +} + + +module sample_titleblock1() { + /* sample titleblock + * + * Note the use of double thickness lines around the perimeter. Any line + * can be adjusted to be thinner or thicker. + * + * Note also that since lines are centered on their widths, some adjustments + * for half-width spacing is needed to avoid a jagged look on corners. + * You can see that in the horizontal lines in the first section that are + * offset by 1, which is the half-width of the outside line. + */ + title_width = 290; + row_height = 15; + + cols = [-1, 50, 114, 200, 215, 260]; + rows = [0, -row_height, -row_height * 2, -row_height * 3, -row_height * 4]; + + // spacing tweaks to fit into the blocks + desc_x = 2; // column offset for start of small text + desc_y = -5; // row offset for start of small text + det_y = -12; // row offset for start of detail text + desc_size = .75; // relative size of description text + + lines = [ + // horizontal lines + [cols[0], rows[0], DIM_HORZ, title_width, 2], + [cols[0], rows[1], DIM_HORZ, title_width, 1], + [cols[2], rows[2], DIM_HORZ, title_width - cols[2] - 1, 1], + [cols[3], rows[3], DIM_HORZ, title_width - cols[3] - 1, 1], + [cols[0], rows[4] - 1, DIM_HORZ, title_width, 2], + + // vertical lines + [0, 0, DIM_VERT, row_height * 4, 2], + [cols[1], rows[0], DIM_VERT, row_height, 1], + [cols[2], rows[0], DIM_VERT, row_height * 4, 1], + [cols[3], rows[0], DIM_VERT, row_height * 4, 1], + [cols[4], rows[3], DIM_VERT, row_height, 1], + [cols[5], rows[3], DIM_VERT, row_height, 1], + [title_width - 1, 0, DIM_VERT, row_height * 4, 2], + ]; + + descs = [ + [cols[0] + desc_x, rows[0] + desc_y, DIM_HORZ, + "Responsible dep", desc_size], + [cols[1] + desc_x, rows[0] + desc_y, DIM_HORZ, + "Technical reference", desc_size], + [cols[2] + desc_x, rows[0] + desc_y, DIM_HORZ, + "Creator", desc_size], + [cols[3] + desc_x, rows[0] + desc_y, DIM_HORZ, + "Approval person", desc_size], + [cols[2] + desc_x, rows[1] + desc_y, DIM_HORZ, + "Document type", desc_size], + [cols[3] + desc_x, rows[1] + desc_y, DIM_HORZ, + "Document status", desc_size], + [cols[2] + desc_x, rows[2] + desc_y, DIM_HORZ, + "Title", desc_size], + [cols[3] + desc_x, rows[2] + desc_y, DIM_HORZ, + "Identification number", desc_size], + [cols[3] + desc_x, rows[3] + desc_y, DIM_HORZ, + "Rev", desc_size], + [cols[4] + desc_x, rows[3] + desc_y, DIM_HORZ, + "Date of issue", desc_size], + [cols[5] + desc_x, rows[3] + desc_y, DIM_HORZ, + "Sheet", desc_size] + ]; + + details = [ + [cols[0] + desc_x, rows[0] + det_y, DIM_HORZ, + " ", 1], //Responsible dep. + [cols[1] + desc_x, rows[0] + det_y, DIM_HORZ, + " ", 1], //Technical reference + [cols[2] + desc_x, rows[0] + det_y, DIM_HORZ, + "D. Smiley ", 1], //Creator + [cols[3] + desc_x, rows[0] + det_y, DIM_HORZ, + " ", 1], //Approval person + [cols[0] + desc_x + 10, rows[2] + det_y, DIM_HORZ, + "My OpenSCAD Project", 1], + [cols[2] + desc_x, rows[1] + det_y, DIM_HORZ, + " ", 1], //Document type + [cols[3] + desc_x, rows[1] + det_y, DIM_HORZ, + "First issue", 1], //Document status + [cols[2] + desc_x, rows[2] + det_y, DIM_HORZ, + "Sample Part", 1], //Title + [cols[3] + desc_x, rows[2] + det_y, DIM_HORZ, + "123", 1], //Identification number + [cols[3] + desc_x, rows[3] + det_y, DIM_HORZ, + " ", 1], //Rev + [cols[4] + desc_x, rows[3] + det_y, DIM_HORZ, + "2013-3-31", 1], //Date of issue + [cols[5] + desc_x, rows[3] + det_y, DIM_HORZ, + "1/100", 1] //Sheet + ]; + + + titleblock(lines, descs, details); +} + +module sample_revisionblock(revisions) { + + DIM_FONTSCALE = DIM_LINE_WIDTH * .7; + + // revision block headings + row_height = 15; + revision_width = 100; + desc_x = 2; + desc_y = -10; + desc_size = 1; + + cols = [0, 20, 60, revision_width]; + rows = [0, -row_height, -row_height * 2]; + + // draw + lines = [ + // horizontal lines + [cols[0], rows[0], DIM_HORZ, revision_width, 1], + [cols[0], rows[1], DIM_HORZ, revision_width, 1], + [cols[0], rows[2], DIM_HORZ, revision_width, 1], + + // vertical lines + [cols[0], rows[0], DIM_VERT, row_height * 2, 1], + [cols[1], rows[0], DIM_VERT, row_height, 1], + [cols[2], rows[0], DIM_VERT, row_height, 1], + [cols[3], rows[0], DIM_VERT, row_height * 2, 1], + ]; + + descs = [ + [cols[0] + desc_x, rows[0] + desc_y, DIM_HORZ, + "Rev.", desc_size], + [cols[1] + desc_x, rows[0] + desc_y, DIM_HORZ, + "Date", desc_size], + [cols[2] + desc_x, rows[0] + desc_y, DIM_HORZ, + "Initials", desc_size], + [cols[1] + desc_x, rows[1] + desc_y, DIM_HORZ, + "Revisions", desc_size], + ]; + + details = []; + num_revisions = len(revisions); + + translate([-(revision_width + 40) * DIM_LINE_WIDTH, + row_height * 2 * DIM_LINE_WIDTH, 0]) + union() { + titleblock(lines, descs, details); + + // now for the start of actual revisions + // do this piecemeal -- draw the vertical first + + for (col = [0: len(cols)]) { + translate([cols[col] * DIM_LINE_WIDTH, 0, 0]) + rotate([0, 0, 90]) + line(num_revisions * row_height * DIM_LINE_WIDTH); + } + + for (row = [0: len(revisions)]) { + translate([0, row * row_height * DIM_LINE_WIDTH, 0]) + line(revision_width * DIM_LINE_WIDTH); + + for (col = [0:2]) { + translate([(cols[col] + desc_x) * DIM_LINE_WIDTH, + ((row + 1) * row_height + desc_y) * DIM_LINE_WIDTH, 0]) + scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE]) + drawtext(revisions[row][col]); + } + } + + } +} + +module sample_titleblock2() { + + row_height = 20; + + cols = [-.5, 100, 154, 270]; + title_width = cols[3]; + + rows = [0, -row_height, -row_height * 2, -row_height * 3, -row_height * 4, + -row_height * 5, -row_height * 6, -row_height * 7 + ]; + + // spacing tweaks to fit into the blocks + desc_x = 2; // column offset for start of small text + desc_y = -5; // row offset for start of small text + det_x = 15; // col offset for start of detail text + det_y = -15; // row offset for start of detail text + desc_size = .75; // relative size of description text + + + lines = [ + // horizontal lines + [-.5, 0, DIM_HORZ, title_width, 1], + + [cols[2], rows[1], DIM_HORZ, cols[3] - cols[2] - .5, 1], + [cols[0], rows[2], DIM_HORZ, cols[1] - cols[0] - .5, 1], + [cols[0], rows[3], DIM_HORZ, cols[3] - .5, 1], + [cols[0], rows[4], DIM_HORZ, cols[2] - .5, 1], + [cols[0], rows[5], DIM_HORZ, cols[3] - .5, 1], + [cols[0], rows[6], DIM_HORZ, cols[2] - .5, 1], + [cols[0], rows[7], DIM_HORZ, cols[2] - .5, 1], + + [cols[0], rows[7], DIM_HORZ, title_width, 1], + + // vertical lines + [cols[0], rows[0], DIM_VERT, -rows[7], 1], + [cols[1], rows[0], DIM_VERT, -rows[7], 1], + [cols[2], rows[0], DIM_VERT, -rows[7], 1], + [cols[3], rows[0], DIM_VERT, -rows[7], 1], + ]; + + part_desc = ["Material", "Finish", "Weight", "Part No."]; + doc_desc = ["Drawing Number", + "Created by", + "Reviewed by", + "Date of issue" + ]; + + // aspects of the part + part_details = [ + "My Sample Part", // title + "Stainless Steel", // material + " ", // finish + "2.5", // weight + "123", // part no + ]; + + // aspects documenting the creation of the part + doc_details = [ + "33-2", // Drawing No. + "D. Smiley", // Created by + " ", // Reviewd by + "2013-3-31", // Date + ]; + + // the organization making the part + org_details = [ + "My logo", + "Canny Machines", + "Org Address, phone" + ]; + + descs = [ + + // part description + [cols[0] + desc_x, rows[2] + desc_y, DIM_HORZ, part_desc[0], desc_size], + [cols[0] + desc_x, rows[3] + desc_y, DIM_HORZ, part_desc[1], desc_size], + [cols[0] + desc_x, rows[4] + desc_y, DIM_HORZ, part_desc[2], desc_size], + [cols[0] + desc_x, rows[5] + desc_y, DIM_HORZ, part_desc[3], desc_size], + + // documentation description + [cols[1] + desc_x, rows[3] + desc_y, DIM_HORZ, doc_desc[0], desc_size], + [cols[1] + desc_x, rows[4] + desc_y, DIM_HORZ, doc_desc[1], desc_size], + [cols[1] + desc_x, rows[5] + desc_y, DIM_HORZ, doc_desc[2], desc_size], + [cols[1] + desc_x, rows[6] + desc_y, DIM_HORZ, doc_desc[3], desc_size], + ]; + + details = [ + [cols[0] + desc_x, rows[0] + det_y, DIM_HORZ, part_details[0], 1.5], + [cols[0] + desc_x, rows[2] + det_y, DIM_HORZ, part_details[1], 1], + [cols[0] + desc_x, rows[3] + det_y, DIM_HORZ, part_details[2], 1], + [cols[0] + desc_x, rows[4] + det_y, DIM_HORZ, part_details[3], 1], + [cols[0] + desc_x, rows[5] + det_y, DIM_HORZ, part_details[4], 1], + + [cols[1] + desc_x * 2, rows[3] + det_y, DIM_HORZ, doc_details[0], 1], + [cols[1] + desc_x * 2, rows[4] + det_y, DIM_HORZ, doc_details[1], 1], + [cols[1] + desc_x * 2, rows[5] + det_y, DIM_HORZ, doc_details[2], 1], + [cols[1] + desc_x * 2, rows[6] + det_y, DIM_HORZ, doc_details[3], 1], + + // Organization Details + [cols[1] + desc_x, rows[1] + det_y, DIM_HORZ, org_details[0], 1.5], + [cols[2] + desc_x, rows[0] + det_y, DIM_HORZ, org_details[1], 1.5], + [cols[2] + desc_x, rows[1] + det_y, DIM_HORZ, org_details[2], 1], + + ]; + + titleblock(lines, descs, details); + + revisions = [ + ["1a", "2013-4-1", "ds"], + ["1b", "2013-4-2", "ds"], + ["2a", "2013-4-3", "ds"], + ["3a", "2013-4-5", "ds"], + ["4a", "2013-4-15", "ds"], + ]; + + rotate([0, 0, 90]) + sample_revisionblock(revisions); + + +} + +module sample_lines(){ + // sample lines + union() { + line(length=2, width=DIM_LINE_WIDTH, height=DIM_HEIGHT, + left_arrow=false, right_arrow=false); + translate([0, -0.25, 0]) + line(length=2, width=DIM_LINE_WIDTH, height=DIM_HEIGHT, left_arrow=true, + right_arrow=false); + translate([0, -0.5, 0]) + line(length=2, width=DIM_LINE_WIDTH, height=DIM_HEIGHT, + left_arrow=false, right_arrow=true); + translate([0, -0.75, 0]) + line(length=2, width=DIM_LINE_WIDTH, height=DIM_HEIGHT, left_arrow=true, + right_arrow=true); + } +} + +module sample_dimensions() { + + /* shows all possibilities + DIM_CENTER = 0; + DIM_LEFT = 1; + DIM_RIGHT = 2; + DIM_OUTSIDE = 3; + */ + + length = 2.5; + + // The following two lines are vertical lines that bracket the dimensions + // left arrow + translate([0, -1.75, 0]) + rotate([0, 0, 90]) + line(length=length, width=DIM_LINE_WIDTH, height=DIM_HEIGHT, + left_arrow=false, right_arrow=false); + + // right arrow + translate([length, -1.75, 0]) + rotate([0, 0, 90]) + line(length=length, width=DIM_LINE_WIDTH, height=DIM_HEIGHT, + left_arrow=false, right_arrow=false); + + // The following runs through all the dimension types + for (i = [0:4]) { + translate([0, -.5 * i, 0]) + dimensions(length=length, line_width=DIM_LINE_WIDTH, loc=i); + } +} + +module sample_leaderlines() { + + radius = .25; + for (i = [0:6]) { + leader_line(angle=i * 15, radius=.25, angle_length=(i * .25), + horz_line_length=.5, direction=DIM_RIGHT, + line_width=DIM_LINE_WIDTH, + text=str("leader line angle: ", i * 15 + 90), + do_circle=false + ); + } + + for (i = [1:7]) { + leader_line(angle=i * 20 + 90, radius=.25, + angle_length=.75, + horz_line_length=.5, direction=DIM_LEFT, + line_width=DIM_LINE_WIDTH, + text=str("leader line angle: ", i * 20 + 90)); + } + for (i = [1:4]) { + leader_line(angle=-i * 20, radius=.25, angle_length=1.5, + horz_line_length=.25, direction=DIM_RIGHT, + line_width=DIM_LINE_WIDTH, + text=str(i), + do_circle=true + ); + } + } + +module sample_circlecenter() { + + radius = .25; + difference() { + cube([1, 1, 1], center=true); + cylinder(h=1.1, r=radius, center=true, $fn=100); + } + color("Black") + translate([0, 0, .51]) + circle_center(radius=radius, size=DIM_HOLE_CENTER, + line_width=DIM_LINE_WIDTH); + +} + +// uncomment these to sample +// sample_lines(); +// +// translate([-5.5, 0, 0]) +// sample_dimensions(); +// +// translate([4, 0, 0]) +// sample_circlecenter(); +// +// translate([-2, 3, 0]) +// sample_leaderlines(); +// +// translate([3, 4, 0]) +// sample_titleblock1(); +// +// translate([0, -2, 0]) +// sample_titleblock2(); + + diff --git a/Bed_David/functions.scad b/Bed_David/functions.scad new file mode 100644 index 0000000..2089daf --- /dev/null +++ b/Bed_David/functions.scad @@ -0,0 +1,17 @@ +// input : list of numbers +// output : sorted list of numbers +function quicksort(arr) = !(len(arr)>0) ? [] : let( + pivot = arr[floor(len(arr)/2)], + lesser = [ for (y = arr) if (y < pivot) y ], + equal = [ for (y = arr) if (y == pivot) y ], + greater = [ for (y = arr) if (y > pivot) y ] +) concat( + quicksort(lesser), equal, quicksort(greater) +); + +module cuben(name, size){ + cube(size=size, center=false); + // sizes should be ordered biggest to smallest + size_sorted=quicksort(size); + echo(str("#### ", name, ": " , size_sorted[2], "x", size_sorted[1], "x", size_sorted[0])); +}; diff --git a/Bed_David/horizontals.scad b/Bed_David/horizontals.scad new file mode 100644 index 0000000..ca11f57 --- /dev/null +++ b/Bed_David/horizontals.scad @@ -0,0 +1,43 @@ +include +include + +module horizontal_headfootend() { + color("red") + translate([0, 0, beam_width]) + rotate([0, 90, 0]) + cuben("Horizontal headfootend", size=[beam_width, beam_depth, matress_width]); +} + +module horizontal_long() { + color("red") + translate([0,0, beam_depth]) + rotate([-90, 0, 0]) + cuben("Horizontal long", size=[beam_width, beam_depth, bed_length - beam_depth*2]); +} + +module horizontal_medium_long_top() { + color("red") + translate([0,0, beam_depth]) + rotate([-90, 0, 0]) + cuben("Horizontal medium long", size=[beam_width, beam_depth, bed_length - beam_depth*3 - step_width]); +} + +module horizontal_medium_long() { + color("red") + translate([0,0, beam_depth]) + rotate([-90, 0, 0]) + cuben("Horizontal medium long", size=[beam_width, beam_depth, bed_length - beam_depth*4 - step_width*2]); +} + +module step(){ + color("red") + translate([0,0, beam_depth]) + rotate([-90, 0, 0]) + cuben("Horizontal step", size=[beam_width, beam_depth, step_width]); +} + +module reinforce_vert(){ + color("orange") + translate([0, 0, 0]) + cuben("Reinforcement vertical", size=[beam_width, beam_depth, bed_box_height - beam_depth*2]); +} diff --git a/Bed_David/partlist.sh b/Bed_David/partlist.sh new file mode 100755 index 0000000..f0a619e --- /dev/null +++ b/Bed_David/partlist.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +openscad -o blup.dxf assembly.scad 2>&1|grep '####'|sort|awk 'BEGIN{count=0;prevline=""}{if(prevline == $0){count += 1} else {print(count, "x ", prevline);count=1;prevline=$0; }}END{print(count, "x ", prevline)}' diff --git a/Bed_David/parts b/Bed_David/parts new file mode 100644 index 0000000..962d9e0 --- /dev/null +++ b/Bed_David/parts @@ -0,0 +1,6 @@ +0 x +2 x ECHO: "#### Horizontal outside: 300x44x12" +1 x ECHO: "#### Fancy back: 324x324x4" +4 x ECHO: "#### Horizontal slat: 310x44x4" +2 x ECHO: "#### Vertical outside: 274x44x12" +5 x ECHO: "#### Vertical slat: 260x44x4" diff --git a/Bed_David/posts.scad b/Bed_David/posts.scad new file mode 100644 index 0000000..8709b81 --- /dev/null +++ b/Bed_David/posts.scad @@ -0,0 +1,40 @@ +include +include + +module post_head_wall() { + color("green") + translate([0,0,0]) + cuben("Post headend wallside", size=[beam_width, beam_depth, bed_height]); +} + +module post_head_room() { + color("green") + translate([0,0,0]) + cuben("Post headend roomside", size=[beam_width, beam_depth, bed_height]); +} + + +module post_foot_wall() { + color("green") + translate([0,0,0]) + cuben("Post footend wallside", size=[beam_width, beam_depth, bed_height]); +} + +module post_foot_room() { + color("green") + translate([0,0,0]) + cuben("Post footend roomside", size=[beam_width, beam_depth, bed_height]); +} + +module post_stairs() { + color("green") + translate([0,0,0]) + cuben("Post stairs", size=[beam_width, beam_depth, bed_height]); +} + +module post_head_standoff() { + color("green") + translate([0,0,0]) + cuben("Post headend standoff", size=[beam_width, beam_depth, bed_height-beam_width]); +} + diff --git a/Stenen_kastje_Ruben/dimensions.scad b/Stenen_kastje_Ruben/dimensions.scad index bcafb6c..3f7d462 100644 --- a/Stenen_kastje_Ruben/dimensions.scad +++ b/Stenen_kastje_Ruben/dimensions.scad @@ -8,7 +8,7 @@ nr_cells_horizontal = 6; nr_cells_vertical = 5; slat_thickness = 4; -slat_depth = 40; +slat_depth = 44; back_thickness = 4; back_fancy_height = 50; diff --git a/Stenen_kastje_Ruben/parts b/Stenen_kastje_Ruben/parts index b0922f2..962d9e0 100644 --- a/Stenen_kastje_Ruben/parts +++ b/Stenen_kastje_Ruben/parts @@ -1,6 +1,6 @@ 0 x -2 x ECHO: "#### Horizontal outside: 300x40x12" +2 x ECHO: "#### Horizontal outside: 300x44x12" 1 x ECHO: "#### Fancy back: 324x324x4" -4 x ECHO: "#### Horizontal slat: 310x40x4" -2 x ECHO: "#### Vertical outside: 274x40x12" -5 x ECHO: "#### Vertical slat: 260x40x4" +4 x ECHO: "#### Horizontal slat: 310x44x4" +2 x ECHO: "#### Vertical outside: 274x44x12" +5 x ECHO: "#### Vertical slat: 260x44x4"