| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- include <../config/strong_angler.scad>
- function strong_angler_size() = [
- (
- strong_angler_target_screws_margin
- * strong_angler_target_screws_count.x
- + strong_angler_target_screws_margin
- ),
- (
- strong_angler_target_screws_margin
- * strong_angler_target_screws_count.y
- + strong_angler_target_screws_margin
- ),
- strong_angler_height
- ];
- module strong_angler_target_cutoff(oversized = false) {
- diameter = strong_angler_target_screw_diameter;
- padding = strong_angler_target_screw_padding;
- margin = strong_angler_target_screws_margin;
- width = strong_angler_size().x;
- height = strong_angler_size().y;
- move_x = width / 2 - margin;
- move_y = height / 2 - margin;
- module hole(vector_x = 0, vector_y = 0) {
- translate([vector_x, vector_y]) {
- if (oversized) {
- circle(d = diameter + padding * 2);
- } else {
- circle(d = diameter);
- }
- }
- }
- for (count_x = [-move_x : margin : move_x]) {
- for (count_y = [-move_y : margin : move_y]) {
- hole(count_x, count_y);
- }
- }
- }
- module strong_angler_wall_cutoff(oversized = false) {
- diameter = strong_angler_wall_screw_diameter;
- padding = strong_angler_wall_screw_padding;
-
- if (oversized) {
- circle(d = diameter + padding * 2);
- } else {
- circle(d = diameter);
- }
- }
- module strong_angler_object() {
- width = strong_angler_size().x;
- depth = strong_angler_size().y;
- height = strong_angler_size().z;
- rounding = strong_angler_rounding;
- thickness = strong_angler_thickness;
-
- module corner(vector = [0, 0, 0]) {
- translate(vector) {
- sphere(r = rounding);
- }
- }
- module base_object() {
- move_x = width / 2 - rounding;
- move_y = depth / 2 - rounding;
- move_z = height / 2 - rounding;
- hull() {
- corner([move_x, move_y, move_z]);
- corner([-move_x, move_y, move_z]);
- corner([move_x, -move_y, move_z]);
- corner([-move_x, -move_y, move_z]);
- corner([move_x, move_y, -move_z]);
- corner([-move_x, move_y, -move_z]);
- }
- }
- module target_cutoff() {
- move_z = height / 2;
- move_top = move_z - thickness / 2;
- thickness_bottom = height - thickness;
- move_bottom = move_top - thickness / 2 - thickness_bottom / 2;
- translate([0, 0, move_top]) {
- linear_extrude(height = thickness, center = true) {
- strong_angler_target_cutoff(oversized = false);
- }
- }
- translate([0, 0, move_bottom]) {
- linear_extrude(height = thickness_bottom, center = true) {
- strong_angler_target_cutoff(oversized = true);
- }
- }
- }
- module wall_cutoff() {
- move_y = depth / 2;
- move_top = move_y - thickness / 2;
- bottom_thickness = depth - thickness;
- move_bottom = move_top - bottom_thickness / 2 - thickness / 2;
- module hole(size = 0, oversized = false) {
- rotate([90, 0, 0]) {
- linear_extrude(height = size, center = true) {
- strong_angler_wall_cutoff(oversized);
- }
- }
- }
- translate([0, move_top, 0]) {
- hole(thickness, false);
- }
- translate([0, move_bottom, 0]) {
- hole(bottom_thickness, true);
- }
- }
- module final_object() {
- difference() {
- base_object();
- target_cutoff();
- wall_cutoff();
- }
- }
- color("#404080") {
- render() {
- final_object();
- }
- }
- }
|