Initial infrastructure documentation - comprehensive homelab reference
This commit is contained in:
102
Printing/Key caps/generate_numbered_keycaps.scad
Normal file
102
Printing/Key caps/generate_numbered_keycaps.scad
Normal file
@@ -0,0 +1,102 @@
|
||||
// =====================================================
|
||||
// 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
|
||||
//
|
||||
// =====================================================
|
||||
Reference in New Issue
Block a user