cable_holder.scad 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. include <../config/cable_holder.scad>
  2. include <../config/thread.scad>
  3. include <../config/wall.scad>
  4. include <thread.scad>
  5. module cable_holder_object() {
  6. module single_cable_shape() {
  7. module base() {
  8. difference() {
  9. outside = cable_holder_thickness * 2
  10. + cable_holder_cable_diameter
  11. - cable_holder_rounding * 2;
  12. inside = cable_holder_cable_diameter
  13. + cable_holder_rounding * 2;
  14. position = cable_holder_thickness
  15. + cable_holder_cable_diameter / 2
  16. - cable_holder_thickness / 2;
  17. circle(r = outside / 2);
  18. circle(r = inside / 2);
  19. translate([0, position]) {
  20. square(cable_holder_hole, center = true);
  21. }
  22. }
  23. }
  24. minkowski() {
  25. base();
  26. circle(r = cable_holder_rounding);
  27. }
  28. }
  29. module single_cable_object() {
  30. height = cable_holder_base_thickness;
  31. module base() {
  32. linear_extrude(height = height, center = true) {
  33. single_cable_shape();
  34. }
  35. }
  36. module blocker() {
  37. radius = cable_holder_blocker_diameter / 2;
  38. height = cable_holder_cable_diameter
  39. + cable_holder_thickness * 2;
  40. move = cable_holder_cable_diameter / 2
  41. + cable_holder_thickness
  42. - radius * 1.5;
  43. translate([0, move, 0]) {
  44. rotate([90, 0, 90]) {
  45. cylinder(r = radius, h = height, center = true);
  46. translate([radius, 0, 0]) {
  47. rotate([0, 0, 45]) {
  48. size = [
  49. radius * 2,
  50. radius * 2,
  51. height
  52. ];
  53. cube(size, center = true);
  54. }
  55. }
  56. }
  57. }
  58. }
  59. render() {
  60. difference() {
  61. base();
  62. blocker();
  63. }
  64. }
  65. }
  66. module wall_mount_object() {
  67. module base_shape() {
  68. size = thread_height + cable_holder_thickness;
  69. move = cable_holder_width / 2 - size / 2;
  70. module close() {
  71. circle(r = size / 2);
  72. translate([0, -size / 4]) {
  73. square([size, size / 2], center = true);
  74. }
  75. }
  76. hull() {
  77. translate([-move, 0]) {
  78. close();
  79. }
  80. translate([move, 0]) {
  81. close();
  82. }
  83. }
  84. }
  85. module base_object() {
  86. height = cable_holder_base_thickness;
  87. linear_extrude(height = height, center = true) {
  88. base_shape();
  89. }
  90. }
  91. module thread(move_x) {
  92. move_y = thread_height / 2
  93. + cable_holder_thickness / 2
  94. - thread_height / 2;
  95. translate([move_x, -move_y, 0]) {
  96. rotate([270, 0, 0]) {
  97. thread_object();
  98. }
  99. }
  100. }
  101. module threads() {
  102. base_width = cable_holder_width
  103. - thread_top_diameter;
  104. width = base_width
  105. - base_width % wall_holes_space;
  106. move_x = width / 2;
  107. for (count = [-move_x : wall_holes_space : move_x]) {
  108. thread(count);
  109. }
  110. }
  111. render() {
  112. difference() {
  113. base_object();
  114. threads();
  115. }
  116. }
  117. }
  118. module final_object() {
  119. center_y = cable_holder_cable_diameter / 2
  120. + cable_holder_thickness
  121. + thread_height / 2
  122. + cable_holder_thickness / 2;
  123. module cable_object(move_x) {
  124. move_y = cable_holder_cable_diameter / 2
  125. + cable_holder_thickness / 2
  126. + thread_height
  127. + cable_holder_thickness
  128. - center_y;
  129. translate([move_x, move_y, 0]) {
  130. single_cable_object();
  131. }
  132. }
  133. module cables_object() {
  134. base_size = cable_holder_thickness * 2
  135. + cable_holder_cable_diameter;
  136. size = base_size
  137. + cable_holder_thickness;
  138. base_width = cable_holder_width
  139. - thread_height / 2
  140. - cable_holder_thickness / 2
  141. - cable_holder_thickness;
  142. width = base_width
  143. - base_width % size;
  144. move = width / 2;
  145. for (count = [-move : size : move]) {
  146. cable_object(count);
  147. }
  148. }
  149. move_wall_mount_y = thread_height / 2
  150. + cable_holder_thickness / 2
  151. - center_y;
  152. cables_object();
  153. translate([0, move_wall_mount_y, 0]) {
  154. wall_mount_object();
  155. }
  156. }
  157. color("#07F879") {
  158. render() {
  159. final_object();
  160. }
  161. }
  162. }
  163. module cable_holder_blocker_object() {
  164. module base_object() {
  165. radius = cable_holder_blocker_diameter / 2.1;
  166. height = cable_holder_cable_diameter
  167. + cable_holder_thickness * 2;
  168. cylinder(r = radius, h = height, center = true);
  169. }
  170. module final_object() {
  171. rotate([0, 90, 0]) {
  172. base_object();
  173. }
  174. }
  175. color("#F80786") {
  176. render() {
  177. final_object();
  178. }
  179. }
  180. }