Fat Pigeon Coaster Engraving
by neat-sketcher-c445 ·
a 7cm coaster, happy to print my first object
Interactive Preview & Customizer
3D preview with browser-based OpenSCAD rendering on parameter changes.
Loading preview...
Diameter of the coaster (mm)
step 1
Total height of the coaster (mm)
step 0.5
Depth of the pigeon and text engraving (mm)
step 0.1
Quality of curves
Size of the text
step 1
Spacing between slip-resistant bumps
step 0.1
Diameter of each bump
step 0.1
X-offset for pigeon position (3mm to the right)
step 0.1
WASM compiler loads on first parameter change.
Prompt Assets
Prompt image
Prompt
i want a coaster, 7cm diamater,6mm height, engrave 2mm。
there is a fat pigeon in the middle. text"2026" below the pigeon.
OpenSCAD Code
/* [Global] */
// Diameter of the coaster (mm)
coaster_diameter = 70; // [50:1:120]
// Total height of the coaster (mm)
coaster_height = 6; // [2:0.5:15]
// Depth of the pigeon and text engraving (mm)
engrave_depth = 2.0; // [0.1:0.1:5]
// Quality of curves
quality = 64; // [32, 64, 128]
/* [Details] */
// Size of the text
text_height = 8; // [5:1:15]
// Spacing between slip-resistant bumps
bump_gap = 2.5; // [1:0.1:5]
// Diameter of each bump
bump_diameter = 0.8; // [0.2:0.1:2]
// X-offset for pigeon position (3mm to the right)
pigeon_x_offset = 3.0; // [-10:0.1:10]
/* [Hidden] */
$fn = quality;
epsilon = 0.05;
module pigeon_2d() {
// Fat body
translate([-2, 2]) circle(d=28);
// Head
translate([12, 10]) circle(d=14);
// Tail
translate([-20, 4]) rotate(20) square([12, 8], center=true);
// Beak
translate([18, 10]) polygon([[0,2], [4,0], [0,-2]]);
// Wing highlight
translate([-2, 2]) scale([1.2, 0.7]) circle(d=18);
}
union() {
difference() {
// Main Coaster Body
cylinder(d = coaster_diameter, h = coaster_height);
// Engraved Pigeon - Offset by 3mm to the right
translate([pigeon_x_offset, 0, coaster_height - engrave_depth])
linear_extrude(engrave_depth + epsilon)
pigeon_2d();
// Engraved Year
translate([0, -18, coaster_height - engrave_depth])
linear_extrude(engrave_depth + epsilon)
text("2026", size = text_height, halign = "center", valign = "center", font = "Liberation Sans:style=Bold");
}
// Slip-resistant bottom bumps
for (x = [-coaster_diameter/2 : bump_gap : coaster_diameter/2]) {
for (y = [-coaster_diameter/2 : bump_gap : coaster_diameter/2]) {
// Only place bumps within the circle radius with a small margin
if (sqrt(x*x + y*y) < (coaster_diameter/2 - 1.5)) {
translate([x, y, 0])
cylinder(d = bump_diameter, h = 0.5);
}
}
}
}