56 lines
2.0 KiB
OpenSCAD
56 lines
2.0 KiB
OpenSCAD
// =====================================================
|
|
// Keycap Body Scaling Script - FIXED VERSION
|
|
// =====================================================
|
|
// This script scales down the keycap body while preserving
|
|
// the Cherry MX stem at its original 4mm x 4mm dimensions
|
|
//
|
|
// FIX: Centers the model first so cylinder operations work correctly
|
|
// =====================================================
|
|
|
|
// ----- ADJUSTABLE PARAMETERS -----
|
|
|
|
body_scale_xy = 0.98; // 98% of original (2% smaller)
|
|
body_scale_z = 1.00; // Keep height at 100%
|
|
|
|
stem_diameter = 4.8; // Diameter of circular stem preservation region (4.8mm to preserve 4mm x 4mm cross)
|
|
stem_height = 10.0; // Height of stem region to preserve (tall enough to capture entire stem)
|
|
stem_z_offset = -1.0; // Z offset to position cylinder on the stem
|
|
$fn = 128; // Circle smoothness
|
|
|
|
stl_filename = "Body5(1).stl";
|
|
|
|
// =====================================================
|
|
// MAIN MODEL - CENTERED APPROACH
|
|
// =====================================================
|
|
|
|
// Center the imported model at origin
|
|
// The stem cross should be centered at X=209, Y=223.5 in the original STL
|
|
module centered_import() {
|
|
translate([-209, -223.5, 0]) // Center X and Y on the stem
|
|
import(stl_filename);
|
|
}
|
|
|
|
union() {
|
|
// Part 1: Scaled body WITHOUT the circular stem region
|
|
difference() {
|
|
scale([body_scale_xy, body_scale_xy, body_scale_z]) {
|
|
centered_import();
|
|
}
|
|
|
|
// Cut out a cylinder where the stem is
|
|
translate([0, 0, stem_z_offset]) {
|
|
cylinder(h = stem_height, d = stem_diameter + 0.5, center = true);
|
|
}
|
|
}
|
|
|
|
// Part 2: Original UNSCALED stem region (circular)
|
|
intersection() {
|
|
centered_import(); // NOT scaled - preserves original 4mm x 4mm cross
|
|
|
|
// Cylinder defines the 4.8mm circular stem region to keep at 100% scale
|
|
translate([0, 0, stem_z_offset]) {
|
|
cylinder(h = stem_height, d = stem_diameter, center = true);
|
|
}
|
|
}
|
|
}
|