|
|
@@ -5,20 +5,32 @@ include <thread.scad>
|
|
|
|
|
|
module cable_holder_object() {
|
|
|
module single_cable_shape() {
|
|
|
- difference() {
|
|
|
- outside = cable_holder_thickness * 2
|
|
|
- + cable_holder_cable_diameter;
|
|
|
+ module base() {
|
|
|
+ difference() {
|
|
|
+ outside = cable_holder_thickness * 2
|
|
|
+ + cable_holder_cable_diameter
|
|
|
+ - cable_holder_rounding * 2;
|
|
|
|
|
|
- position = outside / 2
|
|
|
- - cable_holder_thickness / 2;
|
|
|
+ inside = cable_holder_cable_diameter
|
|
|
+ + cable_holder_rounding * 2;
|
|
|
|
|
|
- circle(r = outside / 2);
|
|
|
- circle(r = cable_holder_cable_diameter / 2);
|
|
|
+ position = cable_holder_thickness
|
|
|
+ + cable_holder_cable_diameter / 2
|
|
|
+ - cable_holder_thickness / 2;
|
|
|
|
|
|
- translate([0, position]) {
|
|
|
- square(cable_holder_hole, center = true);
|
|
|
+ circle(r = outside / 2);
|
|
|
+ circle(r = inside / 2);
|
|
|
+
|
|
|
+ translate([0, position]) {
|
|
|
+ square(cable_holder_hole, center = true);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ minkowski() {
|
|
|
+ base();
|
|
|
+ circle(r = cable_holder_rounding);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
module single_cable_object() {
|
|
|
@@ -32,19 +44,18 @@ module cable_holder_object() {
|
|
|
|
|
|
module blocker() {
|
|
|
radius = cable_holder_blocker_diameter / 2;
|
|
|
- top = cable_holder_base_thickness;
|
|
|
|
|
|
height = cable_holder_cable_diameter
|
|
|
+ cable_holder_thickness * 2;
|
|
|
|
|
|
move = cable_holder_cable_diameter / 2
|
|
|
- - radius;
|
|
|
-
|
|
|
- move_top = top / 2 - radius;
|
|
|
+ + cable_holder_thickness
|
|
|
+ - radius * 1.5;
|
|
|
|
|
|
- translate([0, move, move_top]) {
|
|
|
- rotate([0, 270, 0]) {
|
|
|
+ translate([0, move, 0]) {
|
|
|
+ rotate([90, 0, 90]) {
|
|
|
cylinder(r = radius, h = height, center = true);
|
|
|
+
|
|
|
translate([radius, 0, 0]) {
|
|
|
rotate([0, 0, 45]) {
|
|
|
size = [
|
|
|
@@ -68,5 +79,148 @@ module cable_holder_object() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- single_cable_object();
|
|
|
+ module wall_mount_object() {
|
|
|
+ module base_shape() {
|
|
|
+ size = thread_height + cable_holder_thickness;
|
|
|
+ move = cable_holder_width / 2 - size / 2;
|
|
|
+
|
|
|
+ module close() {
|
|
|
+ circle(r = size / 2);
|
|
|
+ translate([0, -size / 4]) {
|
|
|
+ square([size, size / 2], center = true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ hull() {
|
|
|
+ translate([-move, 0]) {
|
|
|
+ close();
|
|
|
+ }
|
|
|
+
|
|
|
+ translate([move, 0]) {
|
|
|
+ close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module base_object() {
|
|
|
+ height = cable_holder_base_thickness;
|
|
|
+
|
|
|
+ linear_extrude(height = height, center = true) {
|
|
|
+ base_shape();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module thread(move_x) {
|
|
|
+ move_y = thread_height / 2
|
|
|
+ + cable_holder_thickness / 2
|
|
|
+ - thread_height / 2;
|
|
|
+
|
|
|
+ translate([move_x, -move_y, 0]) {
|
|
|
+ rotate([270, 0, 0]) {
|
|
|
+ thread_object();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module threads() {
|
|
|
+ base_width = cable_holder_width
|
|
|
+ - thread_top_diameter;
|
|
|
+
|
|
|
+ width = base_width
|
|
|
+ - base_width % wall_holes_space;
|
|
|
+
|
|
|
+ move_x = width / 2;
|
|
|
+
|
|
|
+ for (count = [-move_x : wall_holes_space : move_x]) {
|
|
|
+ thread(count);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ render() {
|
|
|
+ difference() {
|
|
|
+ base_object();
|
|
|
+ threads();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module final_object() {
|
|
|
+ center_y = cable_holder_cable_diameter / 2
|
|
|
+ + cable_holder_thickness
|
|
|
+ + thread_height / 2
|
|
|
+ + cable_holder_thickness / 2;
|
|
|
+
|
|
|
+ module cable_object(move_x) {
|
|
|
+ move_y = cable_holder_cable_diameter / 2
|
|
|
+ + cable_holder_thickness / 2
|
|
|
+ + thread_height
|
|
|
+ + cable_holder_thickness
|
|
|
+ - center_y;
|
|
|
+
|
|
|
+ translate([move_x, move_y, 0]) {
|
|
|
+ single_cable_object();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ module cables_object() {
|
|
|
+ base_size = cable_holder_thickness * 2
|
|
|
+ + cable_holder_cable_diameter;
|
|
|
+
|
|
|
+ size = base_size
|
|
|
+ + cable_holder_thickness;
|
|
|
+
|
|
|
+ base_width = cable_holder_width
|
|
|
+ - thread_height / 2
|
|
|
+ - cable_holder_thickness / 2
|
|
|
+ - cable_holder_thickness;
|
|
|
+
|
|
|
+ width = base_width
|
|
|
+ - base_width % size;
|
|
|
+
|
|
|
+ move = width / 2;
|
|
|
+
|
|
|
+ for (count = [-move : size : move]) {
|
|
|
+ cable_object(count);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ move_wall_mount_y = thread_height / 2
|
|
|
+ + cable_holder_thickness / 2
|
|
|
+ - center_y;
|
|
|
+
|
|
|
+ cables_object();
|
|
|
+
|
|
|
+ translate([0, move_wall_mount_y, 0]) {
|
|
|
+ wall_mount_object();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ color("#07F879") {
|
|
|
+ render() {
|
|
|
+ final_object();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module cable_holder_blocker_object() {
|
|
|
+ module base_object() {
|
|
|
+ radius = cable_holder_blocker_diameter / 2.1;
|
|
|
+
|
|
|
+ height = cable_holder_cable_diameter
|
|
|
+ + cable_holder_thickness * 2;
|
|
|
+
|
|
|
+ cylinder(r = radius, h = height, center = true);
|
|
|
+ }
|
|
|
+
|
|
|
+ module final_object() {
|
|
|
+ rotate([0, 90, 0]) {
|
|
|
+ base_object();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ color("#F80786") {
|
|
|
+ render() {
|
|
|
+ final_object();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|