| 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();
 
-                 }
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |