top.scad 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. include <ATX.scad>
  2. include <pattern.scad>
  3. include <angle.scad>
  4. include <functions.scad>
  5. include <../config/global.scad>
  6. include <../config/top.scad>
  7. function top_size() = [
  8. top_motherboard_size.x + top_padding * 2,
  9. top_motherboard_size.y + top_padding * 2
  10. ];
  11. module top_shape() {
  12. padding = top_padding;
  13. rounding = top_rounding;
  14. motherboard_size = top_motherboard_size;
  15. motherboard_holes_positions = top_motherboard_holes;
  16. motherboard_hole = top_motherboard_holes_diameters;
  17. module corner(move = [0, 0]) {
  18. translate(move) {
  19. circle(r = rounding);
  20. }
  21. }
  22. module base_shape() {
  23. width = top_size().x;
  24. height = top_size().y;
  25. hull() {
  26. for (count = square_vector(width, height, rounding)) {
  27. corner(count);
  28. }
  29. }
  30. }
  31. module motherboard_holes() {
  32. translate([0, padding]) {
  33. for (count = motherboard_holes_positions) {
  34. translate(count) {
  35. circle(d = motherboard_hole);
  36. }
  37. }
  38. }
  39. }
  40. module angles_cuts() {
  41. module front_cutoff(move_x = 0) {
  42. move_y
  43. = motherboard_size.y / 2
  44. + plywood_thickness;
  45. translate([move_x, -move_y]) {
  46. angle_cutoff(top = true);
  47. }
  48. }
  49. module side_cutoff(left = true, move_y = 0) {
  50. move_x
  51. = motherboard_size.x / 2
  52. + plywood_thickness;
  53. translate([move_x * (left ? 1 : -1), move_y]) {
  54. rotate(90) {
  55. angle_cutoff(top = true);
  56. }
  57. }
  58. }
  59. front_cutoff(move_x = 0);
  60. side_cutoff(left = true, move_y = 0);
  61. side_cutoff(left = false, move_y = 0);
  62. }
  63. render() {
  64. difference() {
  65. base_shape();
  66. motherboard_holes();
  67. angles_cuts();
  68. if (top_pattern) {
  69. pattern(motherboard_size.x, motherboard_size.y);
  70. }
  71. }
  72. }
  73. }
  74. module top_object() {
  75. color("#CCBBAA") {
  76. linear_extrude(center = true, height = plywood_thickness) {
  77. top_shape();
  78. }
  79. }
  80. }