| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // Smooth curves
- $fs = 0.4;
- // Measurements relative to the bottom center of the handle
- bottom_width = 34;
- bottom_depth = 22;
- bottom_height = 16;
- top_width = 39;
- top_depth = 28;
- top_height = 55;
- // Calculated values based on those measurements
- handle_rise = top_height - bottom_height;
- handle_depth_slope = handle_rise / (top_depth - bottom_depth);
- handle_width_slope = handle_rise / (top_width - bottom_width);
- handle_depth_angle = atan(handle_depth_slope);
- handle_width_angle = atan(handle_width_slope);
- // Design parameters. These are mostly free.
- side_height = top_height - bottom_height;
- side_depth = bottom_depth;
- side_width = 5;
- front_height = side_height;
- front_depth = side_width;
- front_width = bottom_width;
- // Center
- //color([1,0,0]) { cube([10,10,10], center = true); }
- // Left & Right
- lr_x = (bottom_width / 2 ) + side_width;
- lr_y = side_depth / 2;
- translate([-lr_x, lr_y, 0]) {
- rotate([180, handle_width_angle - 180, 0]) {
- cube([side_height, side_depth, side_width]);
- }
- }
- translate([lr_x, -lr_y, 0]) {
- rotate([0, -handle_width_angle, 0]) {
- cube([side_height, side_depth, side_width]);
- }
- }
- // Front & Back
- fb_x = front_width / 2;
- fb_y = (bottom_depth / 2) + front_depth;
- translate([fb_x, -fb_y, 0]) {
- rotate([handle_depth_angle - 180, 180, 0]) {
- cube([front_width, front_height, front_depth]);
- }
- }
- translate([-fb_x, fb_y, 0]) {
- rotate([handle_depth_angle, 0, 0]) {
- cube([front_width, front_height, front_depth]);
- }
- }
|