diff --git a/gridbeam.scad b/gridbeam.scad old mode 100644 new mode 100755 index 8818611..19b056a --- a/gridbeam.scad +++ b/gridbeam.scad @@ -1,105 +1,187 @@ -/* - * OpenSCAD GridBeam Library (www.openscad.org) - * Copyright (C) 2009 Timothy Schmidt - * - * License: LGPL 2.1 or later +/********************************* +* OpenSCAD GridBeam Library * +* (c) Timothy Schmidt 2013 * +* http://www.github.com/gridbeam * +* License: LGPL 2.1 or later * +*********************************/ + +/* Todo: + - implement "dxf" mode */ // zBeam(segments) - create a vertical gridbeam strut 'segments' long // xBeam(segments) - create a horizontal gridbeam strut along the X 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 // 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 // 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' -include +// 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; -$beam_hole_radius = inch * 5/16; -$beam_is_hollow = 1; -$beam_wall_thickness = inch * 1/8; -$beam_shelf_thickness = inch * 1/4; +include + +beam_width = inch * 1.5; +beam_hole_radius = inch * 5/16; +beam_is_hollow = 1; +beam_wall_thickness = inch * 1/8; +beam_shelf_thickness = inch * 1/4; module zBeam(segments) { +if (mode == "model") { difference() { - cube([$beam_width, $beam_width, $beam_width * segments]); + cube([beam_width, beam_width, beam_width * segments]); 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]) - 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]) - cylinder(r=$beam_hole_radius, h=$beam_width + 2); + cylinder(r=beam_hole_radius, h=beam_width + 2); } - if ($beam_is_hollow == 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]); - } + if (beam_is_hollow == 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]); } } +} + +if (mode == "dxf") { + +} +} module xBeam(segments) { - translate([0,0,$beam_width]) +if (mode == "model") { + translate([0,0,beam_width]) rotate([0,90,0]) zBeam(segments); } +if (mode == "dxf") { + +} +} + module yBeam(segments) { - translate([0,0,$beam_width]) +if (mode == "model") { + translate([0,0,beam_width]) rotate([-90,0,0]) 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) { for (i = [0 : $children - 1]) { - translate(v * $beam_width) child(i); + translate(v * beam_width) child(i); } } module topShelf(width, depth, corners) { +if (mode == "model") { difference() { - cube([width * $beam_width, depth * $beam_width, $beam_shelf_thickness]); + cube([width * beam_width, depth * beam_width, beam_shelf_thickness]); if (corners == 1) { translate([-1, -1, -1]) - cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); - translate([-1, (depth - 1) * $beam_width, -1]) - cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); - translate([(width - 1) * $beam_width, -1, -1]) - cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); - 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]); + translate([-1, (depth - 1) * beam_width, -1]) + cube([beam_width + 2, beam_width + 2, beam_shelf_thickness + 2]); + translate([(width - 1) * beam_width, -1, -1]) + cube([beam_width + 2, beam_width + 2, beam_shelf_thickness + 2]); + translate([(width - 1) * beam_width, (depth - 1) * beam_width, -1]) + cube([beam_width + 2, beam_width + 2, beam_shelf_thickness + 2]); } } } +if (mode == "dxf") { + +} +} + module bottomShelf(width, depth, corners) { - translate([0,0,-$beam_shelf_thickness]) +if (mode == "model") { + translate([0,0,-beam_shelf_thickness]) topShelf(width, depth, corners); } +if (mode == "dxf") { + +} +} + module backBoard(width, height, corners) { - translate([$beam_width, 0, 0]) +if (mode == "model") { + translate([beam_width, 0, 0]) difference() { - cube([$beam_shelf_thickness, width * $beam_width, height * $beam_width]); + cube([beam_shelf_thickness, width * beam_width, height * beam_width]); if (corners == 1) { translate([-1, -1, -1]) - cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); - translate([-1, -1, (height - 1) * $beam_width]) - cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); - translate([-1, (width - 1) * $beam_width, -1]) - cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); - 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]); + translate([-1, -1, (height - 1) * beam_width]) + cube([beam_shelf_thickness + 2, beam_width + 2, beam_width + 2]); + translate([-1, (width - 1) * beam_width, -1]) + cube([beam_shelf_thickness + 2, beam_width + 2, beam_width + 2]); + translate([-1, (width - 1) * beam_width, (height - 1) * beam_width]) + cube([beam_shelf_thickness + 2, beam_width + 2, beam_width + 2]); } } } +if (mode == "dxf") { + +} +} + 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); -} \ No newline at end of file +} + +if (mode == "dxf") { + +} +}