Holodisk model from the Fallout and Fallout 2 games.
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 

83 satır
2.1 KiB

  1. // dependency: https://github.com/revarbat/BOSL
  2. use <BOSL/transforms.scad>
  3. // outside config
  4. width=60;
  5. height=15;
  6. depth=100;
  7. tape_height=5;
  8. tape_z=4;
  9. // local config
  10. frame=5;
  11. head_frame=2;
  12. head_size=[14, 10, tape_height+head_frame*2];
  13. head_pos=[width/2, -frame+2, tape_z-head_frame];
  14. laser_size=[10, 2, tape_height];
  15. laser_pos=[head_pos.x, head_pos.y + 10 + head_size.y, tape_z];
  16. laser_tower_size=[laser_size.x+2, laser_size.y+1, 15];
  17. module reader() {
  18. module laser(corner=0.1) {
  19. up(laser_size.z/2)
  20. up(corner)
  21. color("Red")
  22. minkowski() {
  23. s=[laser_size.x, laser_size.y, laser_size.z-corner*2];
  24. cube(s, center=true);
  25. sphere(corner);
  26. }
  27. }
  28. module laser_tower(corner=2) {
  29. color("DarkSlateBlue")
  30. back(laser_tower_size.y-laser_size.y)
  31. difference() {
  32. minkowski() {
  33. s=[laser_tower_size.x, laser_tower_size.y, laser_tower_size.z-corner*2];
  34. up(laser_size.z/2)
  35. cube(s, center=true);
  36. sphere(corner);
  37. }
  38. fwd(laser_tower_size.y) scale(1.05) laser();
  39. }
  40. }
  41. module head_space() {
  42. stube=[head_size.x-head_frame*2, head_size.y+head_frame*3, head_size.z-head_frame*2];
  43. up(head_size.z/4 + head_frame)
  44. cube(stube, center=true);
  45. }
  46. module head(corner=0.5) {
  47. up(corner)
  48. back(head_size.y/2)
  49. color("DarkSlateBlue")
  50. minkowski() {
  51. s=[head_size[0], head_size[1] + frame, head_size[2]-corner*2];
  52. difference() {
  53. up(head_size.z/2) cube(s, center=true);
  54. head_space();
  55. }
  56. sphere(corner);
  57. }
  58. }
  59. translate(head_pos) head();
  60. translate(laser_pos) {
  61. laser();
  62. laser_tower();
  63. }
  64. color("DarkSlateBlue") {
  65. difference() {
  66. fwd(frame) cube([width, frame, height]);
  67. translate(head_pos) head_space();
  68. }
  69. fwd(frame) down(frame) cube([width, depth + frame, frame]);
  70. }
  71. }
  72. reader();