Files
homelab-docs/Printing/Key caps/generate_numbered_keycaps.scad

103 lines
3.7 KiB
OpenSCAD

// =====================================================
// Numbered Keycap Generator - Multi-Color Printing
// =====================================================
// This script generates 20 numbered keycap STL files
// with recessed numbers for multi-material printing
//
// Numbers are 14mm tall, recessed 0.6mm deep
// Positioned on triangular top face, centered on apex-to-midpoint line
// Apex oriented as "up" (aligned with Cherry MX cross arm)
// =====================================================
// ----- ADJUSTABLE PARAMETERS -----
number_to_generate = 1; // Change this value (1-20) to generate different numbers
number_height = 14; // Height of numbers in mm
number_depth = 0.6; // Recess depth for color saturation
text_font = "Liberation Sans:style=Bold"; // Font (use bold for visibility)
text_thickness = number_depth; // Same as recess depth
// Triangular face positioning
// The top face is opposite the stem pocket
// One apex aligns with a Cherry MX cross arm
face_z_position = 8.0; // Approximate Z height of top triangular face
face_rotation = 0; // Rotation to align apex with cross arm
text_y_offset = 0; // Offset along apex-to-midpoint centerline
$fn = 128; // Circle smoothness
base_stl_filename = "Body5(1)_scaled_98percent.stl";
// =====================================================
// CENTERED IMPORT MODULE
// =====================================================
module centered_base() {
// Import the scaled keycap base
// Already centered from the previous scaling script
import(base_stl_filename);
}
// =====================================================
// NUMBERED TEXT MODULE
// =====================================================
module recessed_number(num) {
// Create text for the number
rotate([0, 0, face_rotation]) {
translate([0, text_y_offset, face_z_position]) {
rotate([0, 0, 0]) { // Text faces up
linear_extrude(height = text_thickness + 1) { // +1 to ensure clean cut
text(
str(num),
size = number_height,
halign = "center",
valign = "center",
font = text_font
);
}
}
}
}
}
// =====================================================
// MAIN MODEL
// =====================================================
difference() {
// The base keycap
centered_base();
// Subtract the recessed number
recessed_number(number_to_generate);
}
// =====================================================
// USAGE INSTRUCTIONS
// =====================================================
//
// MANUAL GENERATION (one at a time):
// 1. Change number_to_generate value (1-20)
// 2. Render with F6
// 3. Export as STL with desired filename
//
// COMMAND LINE GENERATION (all 20 files):
// Use the companion batch script or run:
// openscad -D number_to_generate=N -o Body5_numN.stl generate_numbered_keycaps.scad
//
// ADJUSTING POSITION:
// - face_z_position: Move numbers up/down on the keycap
// - face_rotation: Rotate around Z axis to align with cross arm
// - text_y_offset: Move along the apex-to-midpoint centerline
//
// MULTI-MATERIAL PRINTING:
// 1. Slice the numbered STL normally
// 2. At layer with recess (approx 0.6mm from top), insert material change
// 3. Printer will pause, swap filament for number color
// 4. Resume printing - number will be filled with new color
// 5. At end of recess depth, change back to original material
//
// =====================================================