Pip-Boy inspired phone holder built around the PINE64 PinePhone
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

85 linhas
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. }