lego name plate
名入れ版レゴブロック
# レゴ互換ネームブロック (2x4)
#
# lego.poly の変種。上面のポッチをなくして平らにし、そこに名前を入れる。
# 裏のチューブは lego.poly と同じなので、普通のブロックの上に嵌められる
# (この上には何も積めない。一番上に載せる「名札」)。
# 寸法はすべて LEGO の実寸規格。ピッチ8mm、外壁1.5mm、
# 外寸は「ピッチ×個数 − 0.2」で、この0.2が隣に並べたときの隙間になる。
@param desc:"入れる名前"
name = "NAME"
@param 8..18 step:1 desc:"文字サイズ (mm)。大文字の高さはこの約0.65倍、1文字の幅は約0.62倍"
text_size = 8
@param desc:"彫り込みにする (オフで浮き彫り)"
engrave = false
@param 0.4..1.0 step:0.1 desc:"文字の高さ / 彫りの深さ (mm)。彫りは天井の肉厚 1.5mm 未満に"
relief = 0.6
@param 2..8 step:1 desc:"ポッチの数 (X方向)。名前が長ければ増やす"
studs_x = 4
@param 2..8 step:1 desc:"ポッチの数 (Y方向)"
studs_y = 2
@param 1..3 step:1 desc:"高さ (プレート単位。3 = 標準ブロック)"
plates = 3
pitch = 8.0 # ポッチ間隔
plate_h = 3.2 # プレート1枚の高さ。ブロックはこの3枚分
clearance = 0.2 # 隣のブロックとの隙間
stud_r = 2.4 # 下のブロックのポッチ半径
# 外壁の厚み: 下のブロックのポッチが外壁の内面にちょうど接する厚み (4 − 0.1 − 2.4 = 1.5)
wall = pitch / 2 - clearance / 2 - stud_r
tube_or = 3.255 # 裏のチューブ外半径
tube_ir = 2.4 # 同 内半径 (= ポッチ半径。ここで下のブロックのポッチを咥える)
$bw = pitch * studs_x - clearance
$bd = pitch * studs_y - clearance
$bh = plate_h * plates
# 本体。底面を開けて中空にする。shell の肉厚がそのまま壁と天井になる
$body = box $bw $bd $bh
| floor
| faces <Z | shell wall
# 裏のチューブ。lego.poly と同じく天井の肉厚の半分まで埋め込んで融合させる
$tube_stock = cylinder tube_or ($bh - wall / 2)
| floor
| grid (studs_x - 1) (studs_y - 1) pitch
$tube_bore = cylinder tube_ir ($bh - wall)
| floor
| grid (studs_x - 1) (studs_y - 1) pitch
# 上面にポッチのない本体
$tile = $body | union $tube_stock | diff $tube_bore
# 名前は上面の中心に置く (面上の text は面の中心が原点)。
# 浮き彫りは上面から立ち上げて本体と融合、彫り込みは上面から切り込む
$embossed = $tile | faces >Z | text name text_size | extrude relief
$engraved = $tile | faces >Z | text name text_size | cut relief
if engrave then $engraved else $embossed