Cyber-Lane | Furniture design with OpenSCAD

Portrait of Justin Nel

Furniture design with OpenSCAD

In my last blog post I started to show off something I threw together in OpenSCAD in a few minutes, and I have been playing around with the application a bit more since then. So I had a rough idea in my head of some furniture I wanted to build to improve my bedroom, and since I haven’t touched a CAD application in quite a while, doing it in code just makes sense to me.

Below you can see my updated code where I have basically made use of variables, modules, and color. Personally, I found it very easy and straight forward to follow, however if anybody reading this is struggling to understand it and is genuinely interested, I would be more than happy to create another blog post in the near future explaining how it all works (essentially a tutorial).

// Bed Variables
BedWidth = 156.7;
FooterHeight = 30;
BedBoardThickness = 5;
ThickerBedBoard = BedBoardThickness + 0.2;
InnerSideBeamHeight = 12.5;
InnerSideBeamThickness = 4.5;
UpperSideBeamWidth = 7.5;
SideBeamLength = 201.2;
HeadBoardHeight = 78;
// Shelf Variables
CabinetDepth = 35;
ThinBoard = 3;
ThickBoard = 5;
ShelfSpacing = 20;
TvAreaHeight = 60;
ShelfTotalHeight = 80;
ShelfWidth = (BedWidth-(ThinBoard*2)-ThickBoard)/2;
SupportHeight = FooterHeight-BedBoardThickness-InnerSideBeamHeight;

module bed_frame() {
        union() {
                translate([0,0,0]) {
                        cube([BedWidth,ThickerBedBoard,FooterHeight]);
                }
                translate([BedWidth-UpperSideBeamWidth,ThickerBedBoard,FooterHeight-BedBoardThickness]) {
                        cube([UpperSideBeamWidth,SideBeamLength,BedBoardThickness]);
                }
                translate([0,ThickerBedBoard,FooterHeight-BedBoardThickness]) {
                        cube([UpperSideBeamWidth,SideBeamLength,BedBoardThickness]);
                }
                translate([UpperSideBeamWidth-InnerSideBeamThickness,ThickerBedBoard,(FooterHeight-BedBoardThickness)/2]) {
                        cube([InnerSideBeamThickness,SideBeamLength,InnerSideBeamHeight]);
                }
                translate([BedWidth-UpperSideBeamWidth,ThickerBedBoard,(FooterHeight-BedBoardThickness)/2]) {
                        cube([InnerSideBeamThickness,SideBeamLength,InnerSideBeamHeight]);
                }
                translate([0,SideBeamLength+BedBoardThickness,0]) {
                        cube([BedWidth,BedBoardThickness,HeadBoardHeight]);
                }
        }
}

module tv_stand_shelf() {
        cube([ShelfWidth,CabinetDepth-(ThinBoard*2),ThinBoard]);
}

module tv_stand_mid_shelf() {
        cube([BedWidth-(ThickBoard*2),CabinetDepth,ThickBoard]);
}

module tv_stand_long_shelf() {
        cube([BedWidth,CabinetDepth,ThickBoard]);
}

module tv_side_panel() {
        cube([ThickBoard,CabinetDepth,ShelfTotalHeight+TvAreaHeight+1]);
}

module tv_stand() {
        union() {
                // Top Board
                translate([0,0,TvAreaHeight+ShelfTotalHeight+(ThinBoard*2)]) {
                        tv_stand_long_shelf();
                }
                // TV Base Board
                translate([ThickBoard,0,ShelfTotalHeight+ThinBoard]) {
                        tv_stand_mid_shelf();
                }
                // Bottom Board
                translate([0,0,0]) {
                        tv_stand_long_shelf();
                }
                // TV Backing
                translate([0,0,ShelfTotalHeight+(ThinBoard*2)]) {
                        cube([BedWidth,ThinBoard,TvAreaHeight]);
                }
                // Foot Board
                translate([0,CabinetDepth-ThinBoard,ThinBoard]) {
                        cube([BedWidth,ThinBoard,ShelfTotalHeight]);
                }
                // Left Panel
                translate([0,0,ThickBoard]) {
                        tv_side_panel();
                }
                // Right Panel
                translate([BedWidth-ThickBoard,0,ThickBoard]) {
                        tv_side_panel();
                }
                // Mid Divider
                translate([(BedWidth-ThickBoard)/2,0,ThickBoard]) {
                        cube([ThickBoard,CabinetDepth-ThinBoard,ShelfTotalHeight]);
                }
                // Left Shelves
                translate([ThinBoard,ThinBoard,ShelfSpacing]) {
                        tv_stand_shelf();
                }
                translate([ThinBoard,ThinBoard,(ShelfSpacing*2)+(ThinBoard)]) {
                        tv_stand_shelf();
                }
                translate([ThinBoard,ThinBoard,(ShelfSpacing*3)+(ThinBoard*2)]) {
                        tv_stand_shelf();
                }
                // Right Shelves
                translate([ShelfWidth+ThickBoard+ThinBoard,ThinBoard,ShelfSpacing]) {
                        tv_stand_shelf();
                }
                translate([ShelfWidth+ThickBoard+ThinBoard,ThinBoard,(ShelfSpacing*2)+(ThinBoard)]) {
                        tv_stand_shelf();
                }
                translate([ShelfWidth+ThickBoard+ThinBoard,ThinBoard,(ShelfSpacing*3)+(ThinBoard*2)]) {
                        tv_stand_shelf();
                }
        }
}

module tv_stand_support() {
        union() {
                translate([ThickBoard,CabinetDepth+ThickerBedBoard,0]) {
                        cube([BedWidth,ThickBoard,SupportHeight]);
                }
                translate([0,0,0]) {
                        cube([ThickBoard,CabinetDepth+ThickerBedBoard+ThickBoard,ThickBoard]);
                }
                translate([BedWidth+ThickBoard,0,0]) {
                        cube([ThickBoard,CabinetDepth+ThickerBedBoard+ThickBoard,ThickBoard]);
                }
        }
}

translate([5,35,0]) {
        color("Brown", 0.6) {
                bed_frame();
        }
}
translate([5,0,0]) {
        color("Green", 0.4) {
                tv_stand();
        }
}
translate([0,0,0]) {
        color("Blue", 0.4) {
                tv_stand_support();
        }
}

Once again, here is what the code has generated for me.

001


Author: Justin Nel

I sell on Tindie
I sell on Etsy
facebook github google plus instagram linkedin twitter
Google