Pip-Boy inspired phone holder built around the PINE64 PinePhone
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.3 KiB

  1. links_count=3;
  2. //validation=1;
  3. VALIDATE_INTERSECTION=1;
  4. use <BOSL/transforms.scad>
  5. use <BOSL/shapes.scad>
  6. include <BOSL/constants.scad>
  7. function get_link_segment_size() = [10, 20, 5];
  8. function get_link_pin_diameter() = 2;
  9. module link() {
  10. segment_size=get_link_segment_size();
  11. module pin() {
  12. h=segment_size.y;
  13. d=get_link_pin_diameter();
  14. back(h/2) xrot(90) cylinder(h=h, d=d, $fn=$preview ? 10 : 30);
  15. }
  16. module pin_socket_area() {
  17. h=segment_size.y-3;
  18. d=segment_size.z;
  19. back(h/2) xrot(90) cylinder(h=h, d=d, $fn=$preview ? 10 : 30);
  20. }
  21. module pin_socket() {
  22. difference() {
  23. pin_socket_area();
  24. scale(1.1) pin();
  25. }
  26. }
  27. module joiner() {
  28. gap=2;
  29. module arm() {
  30. arm_size=[segment_size.x*0.9, 2, segment_size.z];
  31. fwd(segment_size.y/2) right(segment_size.x/4) cuboid(arm_size, fillet=1, edges=EDGES_FRONT + EDGES_Y_ALL);
  32. }
  33. module armFront() {
  34. arm();
  35. }
  36. module armBack() {
  37. scale([1, -1, 1]) arm();
  38. }
  39. module armJoiner() {
  40. joiner_size=[4, segment_size.y, segment_size.z];
  41. right(segment_size.x/2) cuboid(joiner_size, fillet=1, edges=EDGES_Z_ALL + EDGES_BOTTOM);
  42. }
  43. module socketJoiner() {
  44. joiner_size=[segment_size.x-4,
  45. segment_size.y-4,
  46. segment_size.z];
  47. difference() {
  48. right(segment_size.x/2 + 2.5) cuboid(joiner_size, fillet=1, edges=EDGES_Z_ALL + EDGES_BOTTOM);
  49. right(segment_size.x) scale([1, 2, 1]) pin_socket_area();
  50. }
  51. }
  52. socketJoiner();
  53. armFront();
  54. armBack();
  55. armJoiner();
  56. }
  57. pin();
  58. right(segment_size.x) pin_socket();
  59. joiner();
  60. }
  61. segment_size=get_link_segment_size();
  62. if (!is_undef(validation)) {
  63. if (validation==VALIDATE_INTERSECTION) {
  64. intersection() {
  65. right(0*segment_size.x) link();
  66. right(1*segment_size.x) link();
  67. }
  68. intersection() {
  69. right(1*segment_size.x) link();
  70. right(2*segment_size.x) link();
  71. }
  72. }
  73. } else {
  74. for (i = [0:links_count-1]) {
  75. right(i*segment_size.x) link();
  76. }
  77. }