cleaned up and modernized gridbeam.scad, stubbed a few new functions

This commit is contained in:
Timothy Schmidt 2013-05-24 09:29:51 -07:00
parent 37c35adcc8
commit 0ec924d515

166
gridbeam.scad Normal file → Executable file
View file

@ -1,105 +1,187 @@
/* /*********************************
* OpenSCAD GridBeam Library (www.openscad.org) * OpenSCAD GridBeam Library *
* Copyright (C) 2009 Timothy Schmidt * (c) Timothy Schmidt 2013 *
* * http://www.github.com/gridbeam *
* License: LGPL 2.1 or later * License: LGPL 2.1 or later *
*********************************/
/* Todo:
- implement "dxf" mode
*/ */
// zBeam(segments) - create a vertical gridbeam strut 'segments' long // zBeam(segments) - create a vertical gridbeam strut 'segments' long
// xBeam(segments) - create a horizontal gridbeam strut along the X axis // xBeam(segments) - create a horizontal gridbeam strut along the X axis
// yBeam(segments) - create a horizontal gridbeam strut along the Y axis // yBeam(segments) - create a horizontal gridbeam strut along the Y axis
// zBolt(segments) - create a bolt 'segments' in length
// xBolt(segments)
// yBolt(segments)
// topShelf(width, depth, corners) - create a shelf suitable for use in gridbeam structures width and depth in 'segments', corners == 1 notches corners // topShelf(width, depth, corners) - create a shelf suitable for use in gridbeam structures width and depth in 'segments', corners == 1 notches corners
// bottomShelf(width, depth, corners) - like topShelf, but aligns shelf to underside of beams // bottomShelf(width, depth, corners) - like topShelf, but aligns shelf to underside of beams
// backBoard(width, height, corners) - create a backing board suitable for use in gridbeam structures width and height in 'segments', corners == 1 notches corners // backBoard(width, height, corners) - create a backing board suitable for use in gridbeam structures width and height in 'segments', corners == 1 notches corners
// frontBoard(width, height, corners) - like backBoard, but aligns board to front side of beams // frontBoard(width, height, corners) - like backBoard, but aligns board to front side of beams
// translateBeam([x, y, z]) - translate gridbeam struts or shelves in X, Y, or Z axes in units 'segments' // translateBeam([x, y, z]) - translate gridbeam struts or shelves in X, Y, or Z axes in units 'segments'
include <units.scad> // To render the DXF file from the command line:
// openscad -x connector.dxf -D'mode="dxf"' connector.scad
mode = "model";
//mode = "dxf";
$beam_width = inch * 1.5; include <MCAD/units.scad>
$beam_hole_radius = inch * 5/16;
$beam_is_hollow = 1; beam_width = inch * 1.5;
$beam_wall_thickness = inch * 1/8; beam_hole_radius = inch * 5/16;
$beam_shelf_thickness = inch * 1/4; beam_is_hollow = 1;
beam_wall_thickness = inch * 1/8;
beam_shelf_thickness = inch * 1/4;
module zBeam(segments) { module zBeam(segments) {
if (mode == "model") {
difference() { difference() {
cube([$beam_width, $beam_width, $beam_width * segments]); cube([beam_width, beam_width, beam_width * segments]);
for(i = [0 : segments - 1]) { for(i = [0 : segments - 1]) {
translate([$beam_width / 2, $beam_width + 1, $beam_width * i + $beam_width / 2]) translate([beam_width / 2, beam_width + 1, beam_width * i + beam_width / 2])
rotate([90,0,0]) rotate([90,0,0])
cylinder(r=$beam_hole_radius, h=$beam_width + 2); cylinder(r=beam_hole_radius, h=beam_width + 2);
translate([-1, $beam_width / 2, $beam_width * i + $beam_width / 2]) translate([-1, beam_width / 2, beam_width * i + beam_width / 2])
rotate([0,90,0]) rotate([0,90,0])
cylinder(r=$beam_hole_radius, h=$beam_width + 2); cylinder(r=beam_hole_radius, h=beam_width + 2);
} }
if ($beam_is_hollow == 1) { if (beam_is_hollow == 1) {
translate([$beam_wall_thickness, $beam_wall_thickness, -1]) translate([beam_wall_thickness, beam_wall_thickness, -1])
cube([$beam_width - $beam_wall_thickness * 2, $beam_width - $beam_wall_thickness * 2, $beam_width * segments + 2]); cube([beam_width - beam_wall_thickness * 2, beam_width - beam_wall_thickness * 2, beam_width * segments + 2]);
}
} }
} }
}
if (mode == "dxf") {
}
}
module xBeam(segments) { module xBeam(segments) {
translate([0,0,$beam_width]) if (mode == "model") {
translate([0,0,beam_width])
rotate([0,90,0]) rotate([0,90,0])
zBeam(segments); zBeam(segments);
} }
if (mode == "dxf") {
}
}
module yBeam(segments) { module yBeam(segments) {
translate([0,0,$beam_width]) if (mode == "model") {
translate([0,0,beam_width])
rotate([-90,0,0]) rotate([-90,0,0])
zBeam(segments); zBeam(segments);
} }
if (mode == "dxf") {
}
}
module zBolt(segments) {
if (mode == "model") {
}
if (mode == "dxf") {
}
}
module xBolt(segments) {
if (mode == "model") {
}
if (mode == "dxf") {
}
}
module yBolt(segments) {
if (mode == "model") {
}
if (mode == "dxf") {
}
}
module translateBeam(v) { module translateBeam(v) {
for (i = [0 : $children - 1]) { for (i = [0 : $children - 1]) {
translate(v * $beam_width) child(i); translate(v * beam_width) child(i);
} }
} }
module topShelf(width, depth, corners) { module topShelf(width, depth, corners) {
if (mode == "model") {
difference() { difference() {
cube([width * $beam_width, depth * $beam_width, $beam_shelf_thickness]); cube([width * beam_width, depth * beam_width, beam_shelf_thickness]);
if (corners == 1) { if (corners == 1) {
translate([-1, -1, -1]) translate([-1, -1, -1])
cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); cube([beam_width + 2, beam_width + 2, beam_shelf_thickness + 2]);
translate([-1, (depth - 1) * $beam_width, -1]) translate([-1, (depth - 1) * beam_width, -1])
cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); cube([beam_width + 2, beam_width + 2, beam_shelf_thickness + 2]);
translate([(width - 1) * $beam_width, -1, -1]) translate([(width - 1) * beam_width, -1, -1])
cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); cube([beam_width + 2, beam_width + 2, beam_shelf_thickness + 2]);
translate([(width - 1) * $beam_width, (depth - 1) * $beam_width, -1]) translate([(width - 1) * beam_width, (depth - 1) * beam_width, -1])
cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); cube([beam_width + 2, beam_width + 2, beam_shelf_thickness + 2]);
} }
} }
} }
if (mode == "dxf") {
}
}
module bottomShelf(width, depth, corners) { module bottomShelf(width, depth, corners) {
translate([0,0,-$beam_shelf_thickness]) if (mode == "model") {
translate([0,0,-beam_shelf_thickness])
topShelf(width, depth, corners); topShelf(width, depth, corners);
} }
if (mode == "dxf") {
}
}
module backBoard(width, height, corners) { module backBoard(width, height, corners) {
translate([$beam_width, 0, 0]) if (mode == "model") {
translate([beam_width, 0, 0])
difference() { difference() {
cube([$beam_shelf_thickness, width * $beam_width, height * $beam_width]); cube([beam_shelf_thickness, width * beam_width, height * beam_width]);
if (corners == 1) { if (corners == 1) {
translate([-1, -1, -1]) translate([-1, -1, -1])
cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); cube([beam_shelf_thickness + 2, beam_width + 2, beam_width + 2]);
translate([-1, -1, (height - 1) * $beam_width]) translate([-1, -1, (height - 1) * beam_width])
cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); cube([beam_shelf_thickness + 2, beam_width + 2, beam_width + 2]);
translate([-1, (width - 1) * $beam_width, -1]) translate([-1, (width - 1) * beam_width, -1])
cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); cube([beam_shelf_thickness + 2, beam_width + 2, beam_width + 2]);
translate([-1, (width - 1) * $beam_width, (height - 1) * $beam_width]) translate([-1, (width - 1) * beam_width, (height - 1) * beam_width])
cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); cube([beam_shelf_thickness + 2, beam_width + 2, beam_width + 2]);
} }
} }
} }
if (mode == "dxf") {
}
}
module frontBoard(width, height, corners) { module frontBoard(width, height, corners) {
translate([-$beam_width - $beam_shelf_thickness, 0, 0]) if (mode == "model") {
translate([-beam_width - beam_shelf_thickness, 0, 0])
backBoard(width, height, corners); backBoard(width, height, corners);
} }
if (mode == "dxf") {
}
}