Add: Flat 3d print version
This commit is contained in:
parent
beb4a155a9
commit
d5f11f7ec0
8 changed files with 149 additions and 4 deletions
|
@ -1,16 +1,21 @@
|
|||
# goban
|
||||
goban
|
||||
#####
|
||||
|
||||
Parametric goban and stones for blind players
|
||||
|
||||
- One version for 3D printing + CNC
|
||||
- One version for laser-cutting
|
||||
- One flat version for 3D printing only
|
||||
|
||||
## Laser-cutting version
|
||||
Laser-cutting version
|
||||
---------------------
|
||||
|
||||
- Engrave then cut one base.
|
||||
- Engrave verso of upper sheet.
|
||||
- Engrave then cut recto of upper sheet.
|
||||
- Stick upper sheet on base.
|
||||
|
||||
Hint : create three goban, each in an other color.
|
||||
.. hint::
|
||||
|
||||
Create three goban, each in an other color.
|
||||
Reorder your stones to have good colors for each set.
|
40
flat3dprint/black_stones.scad
Normal file
40
flat3dprint/black_stones.scad
Normal file
|
@ -0,0 +1,40 @@
|
|||
include <params.scad>
|
||||
use <white_stones.scad>
|
||||
|
||||
module bstone() {
|
||||
difference() {
|
||||
wstone();
|
||||
for($r=[$mark_thickness/2:2*$mark_thickness:$stone_radius]) {
|
||||
translate([0, 0, -1]) {
|
||||
difference() {
|
||||
cylinder(r=$r+$mark_thickness/2, h=$stone_height/3+1, $fn=200);
|
||||
translate([0, 0, -1]) {
|
||||
cylinder(r=$r-$mark_thickness/2, h=$stone_height/3+2, $fn=200);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([0, 0, $stone_height*2/3]) {
|
||||
difference() {
|
||||
cylinder(r=$r+$mark_thickness/2, h=$stone_height/3+1, $fn=200);
|
||||
translate([0, 0, -1]) {
|
||||
cylinder(r=$r-$mark_thickness/2, h=$stone_height/3+2, $fn=200);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$median = floor($goban_size/2);
|
||||
|
||||
for($x=[$median:$goban_size-1]) {
|
||||
for($y=[0:$goban_size-1]) {
|
||||
if($x>$median || ($x==$median && $y>=$median)) {
|
||||
translate([
|
||||
$x*2*($stone_radius+$stone_clearance),
|
||||
$y*2*($stone_radius+$stone_clearance), 0]) {
|
||||
bstone();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
BIN
flat3dprint/export/9x9_black_stones.stl
Normal file
BIN
flat3dprint/export/9x9_black_stones.stl
Normal file
Binary file not shown.
BIN
flat3dprint/export/9x9_goban.stl
Normal file
BIN
flat3dprint/export/9x9_goban.stl
Normal file
Binary file not shown.
BIN
flat3dprint/export/9x9_white_stones.stl
Normal file
BIN
flat3dprint/export/9x9_white_stones.stl
Normal file
Binary file not shown.
61
flat3dprint/goban.scad
Normal file
61
flat3dprint/goban.scad
Normal file
|
@ -0,0 +1,61 @@
|
|||
include <params.scad>
|
||||
|
||||
module goban() {
|
||||
$goban_width = $cell_width*($goban_size-1) +
|
||||
$goban_size*$line_width +
|
||||
$goban_padding*2;
|
||||
|
||||
$goban_length = $cell_length*($goban_size-1) +
|
||||
$goban_size*$line_width +
|
||||
$goban_padding*2;
|
||||
|
||||
difference() {
|
||||
cube([$goban_width, $goban_length, $goban_height]);
|
||||
for(n=[0:$goban_size-1]) {
|
||||
translate([
|
||||
$goban_padding,
|
||||
$goban_padding + n*($cell_length+$line_width),
|
||||
$goban_height - $line_depth])
|
||||
cube([
|
||||
$goban_size*($line_width+$cell_width)-$cell_length,
|
||||
$line_width,
|
||||
$line_depth+1
|
||||
]);
|
||||
translate([
|
||||
$goban_padding + n*($cell_width+$line_width),
|
||||
$goban_padding,
|
||||
$goban_height - $line_depth])
|
||||
cube([
|
||||
$line_width,
|
||||
$goban_size*($line_width+$cell_length)-$cell_length,
|
||||
$line_depth+1
|
||||
]);
|
||||
for(y=[0:$goban_size-1]) {
|
||||
translate([
|
||||
$goban_padding + n*($cell_width+$line_width),
|
||||
$goban_padding + y*($cell_length+$line_width),
|
||||
-1
|
||||
]) union() {
|
||||
translate([0, 0, 1 + $goban_height - $stone_height])
|
||||
cylinder(
|
||||
h=$stone_height+1,
|
||||
r=$stone_radius+$stone_clearance,
|
||||
$fn=200);
|
||||
if(search(n+1, $hoshi_pos) && search(y+1, $hoshi_pos)) {
|
||||
cylinder(
|
||||
h=$goban_height+1,
|
||||
r=$hoshi_radius,
|
||||
$fn=200);
|
||||
} else {
|
||||
cylinder(
|
||||
h=$goban_height+1,
|
||||
r=$goban_hole_radius,
|
||||
$fn=200);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
goban();
|
15
flat3dprint/params.scad
Normal file
15
flat3dprint/params.scad
Normal file
|
@ -0,0 +1,15 @@
|
|||
$stone_height = 2;
|
||||
$stone_radius = 6.25;
|
||||
$stone_clearance = 0.25;
|
||||
$mark_thickness = 1.5;
|
||||
$hoshi_radius = 2;
|
||||
$goban_hole_radius = 1;
|
||||
$goban_height = 3;
|
||||
$line_depth = 1;
|
||||
$cell_width = 13;
|
||||
$cell_length = 13;
|
||||
$goban_padding = 9;
|
||||
$line_width = 1;
|
||||
$goban_size = 9;
|
||||
$hoshi_pos = [3, 7];
|
||||
// [4, 10, 16] for 19x19, [4, 7, 10] for 13x13, [3, 7] for 9x9
|
24
flat3dprint/white_stones.scad
Normal file
24
flat3dprint/white_stones.scad
Normal file
|
@ -0,0 +1,24 @@
|
|||
include <params.scad>
|
||||
|
||||
module wstone() {
|
||||
difference() {
|
||||
cylinder(h=$stone_height, r=$stone_radius, $fn=200);
|
||||
translate([1.5*$stone_radius, 0, -1]) {
|
||||
cylinder(h=$stone_height+2, r=$stone_radius, $fn=200);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$median = floor($goban_size/2);
|
||||
|
||||
for($x=[0:$median]) {
|
||||
for($y=[0:$goban_size-1]) {
|
||||
if($x<$median || ($x==$median && $y<$median)) {
|
||||
translate([
|
||||
$x*2*($stone_radius+$stone_clearance),
|
||||
$y*2*($stone_radius+$stone_clearance), 0]) {
|
||||
wstone();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue