BB3.scad 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // Process control
  2. FAST = 1;
  3. DEBUG = 0;
  4. // Circle smoothness =~ build smoothness
  5. $fs = 0.1 * (FAST * 10);
  6. $fa = 1;
  7. // Main tube paramteters
  8. stageA = -18;
  9. stageRadius = 26.25;
  10. stageOffsetX = 51.5;
  11. stageOffsetY = 31.0;
  12. stageOffsetZ = 10.5;
  13. stageOffsetA = 86.5;
  14. stageZFuzz = 1.0;
  15. stageAZ = 4.0;
  16. // Side tube parameters
  17. sideHeight = 3.75;
  18. sideLength = 57.0;
  19. sideRadius = 11.0;
  20. sideSpread = 14.5 - sideRadius;
  21. // There is probably a way to calculate this, but guess-and-check is fine for now
  22. sideOverlap = (1 - 0.170);
  23. // Tertiary offsets
  24. stage3OffsetX = 45;
  25. stage3OffsetY = -45;
  26. // Base parmaeters
  27. baseEdge = 5;
  28. baseHeight = 50;
  29. baseX = 137 + baseEdge;
  30. baseY = 131 + (baseEdge / 2);
  31. module sideBox(stageOffset) {
  32. polyhedron(
  33. points = [
  34. [stageRadius * sideOverlap, -sideSpread, 0], //FBR 0
  35. [stageRadius * sideOverlap, (sideRadius * 2) + sideSpread, 0], //NBR 1
  36. [stageRadius * sideOverlap, -sideSpread, (baseHeight - stageOffset)], //FTR 2
  37. [stageRadius * sideOverlap, (sideRadius * 2) + sideSpread, (baseHeight - stageOffset) ], //NTR 3
  38. [sideLength - sideRadius, 0, sideHeight], //FBL 4
  39. [sideLength - sideRadius, sideRadius * 2, sideHeight], //NBL 5
  40. [sideLength - sideRadius, 0, (baseHeight - stageOffset)], //FTL 6
  41. [sideLength - sideRadius, sideRadius * 2, (baseHeight - stageOffset)] //NTL 7
  42. ],
  43. faces=[
  44. [0,1,3,2], //L
  45. [7,5,4,6], //R
  46. [2,3,7,6], //T
  47. [4,5,1,0], //B
  48. [0,2,6,4], //F
  49. [3,1,5,7], //N
  50. ]);
  51. }
  52. module stageInset(stageOffset) {
  53. translate([0, 0, stageOffset]) {
  54. cylinder(h=(baseHeight - stageOffset + stageZFuzz), r=stageRadius);
  55. translate([sideLength - sideRadius, 0, sideHeight]) {
  56. cylinder(h=(baseHeight - stageOffset) - sideHeight, r=sideRadius);
  57. }
  58. translate([0, -sideRadius, 0]) {
  59. sideBox(stageOffset);
  60. }
  61. }
  62. }
  63. module dualStage() {
  64. color("red")
  65. translate([stage3OffsetX, stage3OffsetY, 0]) {
  66. rotate([2 * stageAZ, 0, -stageA + 180]) {
  67. stageInset(stageOffsetZ * 2);
  68. }
  69. }
  70. color("green")
  71. rotate([stageAZ, 0, stageOffsetA]) {
  72. stageInset(stageOffsetZ);
  73. }
  74. color("blue")
  75. translate([stageOffsetX, stageOffsetY, 0]) {
  76. rotate([0, 0, stageA]) {
  77. stageInset(0);
  78. }
  79. }
  80. }
  81. // Main build
  82. difference() {
  83. // Base
  84. cube([baseX, baseY, baseHeight]);
  85. // Dual-stage inset, aligned to base
  86. translate([stageRadius + baseEdge, 67 + (baseEdge / 2), baseEdge]) {
  87. rotate([0,0,90 - stageOffsetA])
  88. dualStage();
  89. }
  90. // Carve just a little off the edges to help the preview render cleanly
  91. if (DEBUG) {
  92. translate([0, 0, baseHeight - 0.01]) {
  93. color("purple")
  94. cube([baseX, baseY, 0.02]);
  95. }
  96. translate([0, 0, -0.01]) {
  97. color("purple")
  98. cube([baseX, baseY, 0.02]);
  99. }
  100. translate([-0.01, 0, 0]) {
  101. color("purple")
  102. cube([0.02, baseY, baseHeight]);
  103. }
  104. translate([baseX - 0.01, 0, 0]) {
  105. color("purple")
  106. cube([0.02, baseY, baseHeight]);
  107. }
  108. }
  109. // Carve out the base for print speed
  110. if (FAST) {
  111. translate([223 + baseEdge, 10 - baseEdge, 0]) {
  112. color("green")
  113. cylinder(r=120, h=baseHeight);
  114. }
  115. translate([baseX - 11 + baseEdge, baseY - 1 + baseEdge, 0]) {
  116. color("blue")
  117. cylinder(r=30, h=baseHeight);
  118. }
  119. translate([-(58 + baseEdge), baseY - 10, 0]) {
  120. color("red")
  121. cylinder(r=80, h=baseHeight);
  122. }
  123. }
  124. }