From 850333ea1b9c7c30202d496275126eb7fd465a2e Mon Sep 17 00:00:00 2001 From: wardwouts Date: Sat, 21 Mar 2026 10:46:44 +0100 Subject: [PATCH] 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"