| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- include <../config/global.scad>
- include <../config/angle.scad>
- function angle_top_holes_space()
- = angle_holes_space;
- function angle_bottom_holes_space()
- = angle_holes_space + angle_margin * 2;
- function angle_width()
- = max(angle_top_holes_space(), angle_bottom_holes_space())
- + angle_margin * 2
- + angle_thickness * 2;
- function angle_outside_depth()
- = angle_depth
- + angle_thickness;
- module angle_cutoff(top = false, only_holes = false) {
- module holes() {
- move
- = top
- ? angle_top_holes_space() / 2
- : angle_bottom_holes_space() / 2;
- translate([-move, 0]) {
- circle(d = angle_hole_diameter);
- }
-
- translate([move, 0]) {
- circle(d = angle_hole_diameter);
- }
- }
- module supports() {
- move
- = angle_width() / 2
- - angle_thickness / 2;
- translate([-move, 0]) {
- square([angle_thickness, angle_depth], center = true);
- }
- translate([move, 0]) {
- square([angle_thickness, angle_depth], center = true);
- }
- }
- holes();
- if (!only_holes) {
- supports();
- }
- }
- module angle_object() {
- module cross_section(hulled = false) {
- module corner(move_x = 0, move_y = 0) {
- translate([move_x, move_y]) {
- circle(d = angle_thickness);
- }
- }
- module base() {
- move = angle_depth / 2;
- hull() {
- corner(-move, move);
- corner(move, move);
- }
- hull() {
- corner(-move, move);
- corner(-move, -move);
- }
- }
- if (hulled) {
- hull() {
- base();
- }
- } else {
- base ();
- }
- }
- module base_object() {
- module center() {
- height
- = angle_width()
- - angle_thickness * 2;
-
- linear_extrude(height = height, center = true) {
- cross_section(hulled = false);
- }
- }
- module support() {
- height = angle_thickness;
- linear_extrude(height = height, center = true) {
- cross_section(hulled = true);
- }
- }
- module full() {
- center();
- move
- = angle_width() / 2
- - angle_thickness / 2;
- translate([0, 0, move]) {
- support();
- }
- translate([0, 0, -move]) {
- support();
- }
- }
- rotate([270, 0, 90]) {
- full();
- }
- }
- module holes() {
- height = angle_outside_depth();
- move = angle_thickness / 2;
- translate([0, move, 0]) {
- linear_extrude(height = height, center = true) {
- angle_cutoff(top = true, only_holes = true);
- }
- }
- translate([0, 0, move]) {
- rotate([90, 0, 0]) {
- linear_extrude(height = height, center = true) {
- angle_cutoff(top = false, only_holes = true);
- }
- }
- }
- }
- color("#AABBCC") {
- render() {
- correction_y
- = angle_outside_depth() / 2
- - angle_depth / 2;
- correction_z
- = angle_outside_depth() / 2
- - angle_depth / 2;
- translate([0, correction_y, correction_z]) {
- difference() {
- base_object();
- holes();
- }
- }
- }
- }
- }
|