Duplo-compatible blocks for openSCAD
OpenSCAD
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
ext
lib
stls
to-be-integrated
vendor
.gitignore
COPYING
LICENSE
README
VERSIONS
doblo-factory.scad
mailbox.scad
robot.scad
test-balljoint.scad
test-castle.scad
test-connectors.scad
test-curve.scad
test-gapfix.scad
test-hinges.scad
test-import.scad
test-lego.scad
test-legos.scad
test-pins.scad
test-pony.scad
test-seesaw.scad
test-spire.scad
test-words.scad
test.scad

README

 Copyright (c) 2013 Daniel M. Taub
 Copyright (c) 2010 Daniel K. Schneider
 
 This file is part of DobloFactory.
 DOBLO: DUPLO-compatible scenery factory

 DobloFactory is free source: you can redistribute it and/or modify
    modify it under the terms of the CC BY-NC-SA 3.0 License:
    CreativeCommons Attribution-NonCommerical-ShareAlike 3.0
    as published by Creative Commons. 

    You should have received a copy of the CC BY-NC-SA 3.0 License 
    with this source package. 
    If not, see <http://creativecommons.org/licenses/by-nc-sa/3.0/>

NOTE THIS FILE MAY BE OUT OF DATE 
test-foo.scad files are good documentation for library components.

Read down to understand how to use this.
Documentation (similar as here, but more readable)
 http://edutechwiki.unige.ch/en/Doblo_factory

Download:
- http://www.thingiverse.com/thing:2106

BUGS, missing pieces, other things to do:
- cyl_block nibbles can't handle top_r < 2 and rational numbers
- a pilar with both supports for bottom and top (i.e. 2x4 directions)
- replace support by triangle_forward, triangle_right, etc.
- Lego brick heights work in multiples of 3 (Duplos is multiples of 2)
- test STL merging with both Lego models

Authors:
- Daniel K. Schneider, TECFA, University of Geneva, March 2010
- refactored by Daniel M. Taub, CEMI.org, October 2012, January 2013
- based on parametric lego duplo (http://www.thingiverse.com/thing:1778) by Domonoky
- based on OpenSCAD Bitmap Fonts Module (http://www.thingiverse.com/thing:2054) by Tony Buser.

This code is derived from two original works: 
1) Domonoky's parametric lego duplo - http://www.thingiverse.com/thing:1778. 
  I got the idea, and then kept some of the fine parts (nibbles, walls, etc,)
2) Tony Buser's OpenSCAD Bitmap Fonts Module - http://www.thingiverse.com/thing:2054

Legal disclaimer: 
- This is not Duplo(TM), it's called Doblo and it just happens to fit more or less.

Purposes:
 - Creation of 3D duplo-compatible "play" boards for various purposes from Kindergarten to Master level
 - Introduction to 3D environnment (learn about positions) and use of OpenSCAD
 - "End-user 3D programming" environment (e.g. students could add other primitives)

Coordinate system: 
 We use  a column/row/up grid, each x/y cell corresponds to a DUPLO/Lego nibble
 - col = x-axis
 - row = y-axis
 - origin is at x=0 and y=0, default bottom of bricks is z=0
 - each block module starts from left/back ("upper" left corner)

 units for col/row  and width/length:
* 1 DUPLO row (16mm, i.e. half a 2x2 block)
* 1 LEGO  row (8mm)
 units for up and height: 
* DUPLO: 4.8mm, i.e. a 1/4th of a typical duplo 19.2mm 2x2 block
* LEGO : 2.4mm, i.e. a 1/4th of a typical duplo 19.2mm 2x2 block.
  Should be rather 1/3 (3.2mm) but I can't change this easily without breaking stuff (castles)

Software needed:
- http://openscad.org/
- http://en.wikibooks.org/wiki/OpenSCAD_User_Manual
Once you installed openscad, then you may have a glance at the manual. Otherwise, just know this:
 - To compile a .scad file (see the result)
   1. Menu: File->Open
   2. menu: Design->Compile
 - To render for real and to export
   1. menu: Design-> Compile and Render (CGAL) .... this can take many minutes.
   2. menu: Design-> Export as .STL 

Usage:
 (1) Create a new .scad file or start from doblo-factory-examples.scad
 (2) Import this file:
     include doblo-factory-1-2.scad
 (3) Set the SCALE variable !!!
 (4) Then, either write custom modules to create any combinations of
 block forms and imported STL or use the merge_brick standard module
 to pile up 3 objects: a doblo, a block and one imported STL

 See examples in the file doblo-factory-examples.scad

Printing:
 - To print larger structures be aware of warping, e.g. make a fat sticky raft and/or use cooling and/or print with PLA.
 - If you need good DUPLO compatibility, you will have to print with small layers !
 - Large structures can take many hours to print. 

To create your own more complex custom shapes, there are several modules (functions). For example:

(1) The doblo brick. 
Typically, to create a DOBLO base (you also can pile them up (union) but may lead to a waste of plastic. Doblo bricks are just like Duplo bricks, however you can make the nibbles on top optional.

module doblo (col, row, up, width,length,height,nibbles_on_off) 

(2) Merge STL files
Positions an stl file, you may have to find out by trial and error what z offset to use. Tip: embed the STL into a doblo or a block.
module merge_stl (file, col, row, stl_z_offset_mm)

(3) Blocks and base plate
To create a building block for larger structures with x,y,z positioning. A block doesn't have nibbles underneath and may or may not have nibbles on top. 

A base plate will have some grid underneath, because printing large flat blocks is usually very difficult. Using "up" other than 0 doesn't make much sense.

module block (col, row, up, width,length,height,nibbles_on_off) 
module base_plate (col, row, up, width,length,height,nibbles_on_off) 

(4) Nibbles.
To insert nibbles on some spots of a nibble-less block or an imported STL. To used in larger structures.

module nibbles (col, row, up, width, length)

(5) Bottom nibbles
To insert underneath an imported STL. Not very usefull I think, I'd rather stick a doblo block to the feet of an imported object.

module bottom_nibbles (col, row, up, width, length, N_height)

(6) Support triangles
Support triangles are used in larger structures to support a roof. 
Thickness = 1 doblo width, e.g. = PART_WIDTH. Sometimes you may want rational numbers. E.g. 1.5
Height/length proportion is 4.8/4 (i.e. typical Lego proportions). Only use angle arg of 0,90,180,270 !!

WARNING: you may want to have these overlap a bit, e.g. if 2 corners are just touching, the model will be not simple and can't be exported as STL. In other words, make them a bit higher (embedded into the block that you will put on the back and the top of the triangles anyhow. See the stronghold example included.
 __
 \|

module support (col,row,up,height,rotation_angle,thickness)

(7) ramp
Is the opposite of the support triangle, but with a flatter angle. Can be used to achor a high and slim block or also to build a real ramp (then you might place 2-4 next to each other.)
Height/length proportion is 4.8/16 (i.e. typical Lego proportions)

module ramp (col,row,up,height,rotation_angle)

(8) Cylinder
Is like a block, but round, i.e. meant to used for larger structures . Can have nibbles on top.

module cyl_block (col, row, up, bottom_r, top_r, height, nibbles_on_off) 

(9) Glyph
Adds a character, based on http://www.thingiverse.com/thing:2054
Size: fits on a 2-x2 doblo unit
height_mm is height in mm. Typically between 2 and 4

module glyph (col, row, up, height_mm, char)

(10) Text
Adds a text, based on http://www.thingiverse.com/thing:2054
Size: fits on a 2-x2 doblo unit
height_mm is height in mm. Typically between 2 and 4

module text (col, row, up, height_mm, chars, count)