2018-12-29 21:03:08 -05:00
|
|
|
# This script can create any regular rectangular Lego(TM) Brick
|
|
|
|
import cadquery as cq
|
|
|
|
|
|
|
|
#####
|
|
|
|
# Inputs
|
|
|
|
######
|
2020-01-20 20:52:12 +01:00
|
|
|
lbumps = 1 # number of bumps long
|
|
|
|
wbumps = 1 # number of bumps wide
|
2018-12-29 21:03:08 -05:00
|
|
|
thin = True # True for thin, False for thick
|
|
|
|
|
|
|
|
#
|
|
|
|
# Lego Brick Constants-- these make a lego brick a lego :)
|
|
|
|
#
|
|
|
|
pitch = 8.0
|
|
|
|
clearance = 0.1
|
|
|
|
bumpDiam = 4.8
|
|
|
|
bumpHeight = 1.8
|
|
|
|
if thin:
|
|
|
|
height = 3.2
|
|
|
|
else:
|
|
|
|
height = 9.6
|
|
|
|
|
|
|
|
t = (pitch - (2 * clearance) - bumpDiam) / 2.0
|
|
|
|
postDiam = pitch - t # works out to 6.5
|
2020-01-20 20:52:12 +01:00
|
|
|
total_length = lbumps * pitch - 2.0 * clearance
|
|
|
|
total_width = wbumps * pitch - 2.0 * clearance
|
2018-12-29 21:03:08 -05:00
|
|
|
|
|
|
|
# make the base
|
|
|
|
s = cq.Workplane("XY").box(total_length, total_width, height)
|
|
|
|
|
|
|
|
# shell inwards not outwards
|
|
|
|
s = s.faces("<Z").shell(-1.0 * t)
|
|
|
|
|
|
|
|
# make the bumps on the top
|
2020-01-20 20:52:12 +01:00
|
|
|
s = (
|
|
|
|
s.faces(">Z")
|
|
|
|
.workplane()
|
|
|
|
.rarray(pitch, pitch, lbumps, wbumps, True)
|
|
|
|
.circle(bumpDiam / 2.0)
|
|
|
|
.extrude(bumpHeight)
|
|
|
|
)
|
2018-12-29 21:03:08 -05:00
|
|
|
|
|
|
|
# add posts on the bottom. posts are different diameter depending on geometry
|
|
|
|
# solid studs for 1 bump, tubes for multiple, none for 1x1
|
|
|
|
tmp = s.faces("<Z").workplane(invert=True)
|
|
|
|
|
|
|
|
if lbumps > 1 and wbumps > 1:
|
2020-01-20 20:52:12 +01:00
|
|
|
tmp = (
|
|
|
|
tmp.rarray(pitch, pitch, lbumps - 1, wbumps - 1, center=True)
|
|
|
|
.circle(postDiam / 2.0)
|
|
|
|
.circle(bumpDiam / 2.0)
|
|
|
|
.extrude(height - t)
|
|
|
|
)
|
2018-12-29 21:03:08 -05:00
|
|
|
elif lbumps > 1:
|
2020-01-20 20:52:12 +01:00
|
|
|
tmp = (
|
|
|
|
tmp.rarray(pitch, pitch, lbumps - 1, 1, center=True)
|
|
|
|
.circle(t)
|
|
|
|
.extrude(height - t)
|
|
|
|
)
|
2018-12-29 21:03:08 -05:00
|
|
|
elif wbumps > 1:
|
2020-01-20 20:52:12 +01:00
|
|
|
tmp = (
|
|
|
|
tmp.rarray(pitch, pitch, 1, wbumps - 1, center=True)
|
|
|
|
.circle(t)
|
|
|
|
.extrude(height - t)
|
|
|
|
)
|
2018-12-29 21:03:08 -05:00
|
|
|
else:
|
|
|
|
tmp = s
|
|
|
|
|
|
|
|
# Render the solid
|
|
|
|
show_object(tmp)
|