My self-made 3D-printable designs, mainly in OpenSCAD
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.

revolver-mount.scad 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. include <rounded.scad>;
  2. handle_width = 32;
  3. handle_depth = 31;
  4. handle_height = 20;
  5. handle_wall = 3;
  6. handle_off = 5;
  7. // distance between table and bottom of barell
  8. mount_off_bottom = 82;
  9. // distance between center of handle and center of barell mount
  10. mount_off_handle = 141;
  11. mount_post_dia = 15;
  12. mount_post_off = 5;
  13. mount_post_height_remove = 10;
  14. mount_grip_width = 10;
  15. mount_grip_depth = 9;
  16. mount_grip_height = 6;
  17. mount_grip_wall = 2;
  18. ammo_dia = 10.5;
  19. ammo_height = 10;
  20. ammo_dist = 5;
  21. ammo_box_wall = 2;
  22. ammo_count_width = 7;
  23. ammo_count_depth = 3;
  24. ammo_box_width = ammo_count_width * (ammo_dia + ammo_dist);
  25. ammo_box_depth = ammo_count_depth * (ammo_dia + ammo_dist);
  26. base_depth = 50;
  27. base_height = 2;
  28. base_fillet = (base_height / 2) - 0.01;
  29. handle_fillet = (handle_wall / 2) - 0.01;
  30. ammo_box_fillet = (ammo_box_wall / 2) - 0.01;
  31. handle_center = handle_off + handle_wall + (handle_width / 2);
  32. base_width = handle_center + mount_off_handle + (mount_post_dia / 2) + mount_post_off;
  33. $fn = 30;
  34. module ammo() {
  35. difference() {
  36. rounded_cube(ammo_box_width,
  37. ammo_box_depth,
  38. ammo_box_wall + ammo_height,
  39. rx=ammo_box_fillet, ry=ammo_box_fillet,
  40. rz=ammo_box_fillet,
  41. noback=false, nobottom=true, notop=true);
  42. translate([(ammo_dia + ammo_dist) / 2,
  43. (ammo_dia + ammo_dist) / 2,
  44. ammo_box_wall])
  45. for (y = [0 : ammo_count_depth - 1]) {
  46. for (x = [0 : ammo_count_width - 1]) {
  47. translate([x * (ammo_dia + ammo_dist),
  48. y * (ammo_dia + ammo_dist),
  49. 0])
  50. cylinder(d = ammo_dia, h = ammo_height + 1);
  51. }
  52. }
  53. }
  54. }
  55. module mount() {
  56. // base plate
  57. color("blue")
  58. rounded_cube(base_width, base_depth, base_height,
  59. rx=base_fillet, ry=base_fillet, rz=base_fillet,
  60. noback=false, nobottom=true, notop=true);
  61. // handle holder
  62. color("green")
  63. translate([handle_off,
  64. (base_depth - handle_depth) / 2 - handle_wall,
  65. base_height])
  66. difference() {
  67. rounded_cube(handle_width + (2 * handle_wall),
  68. handle_depth + (2 * handle_wall),
  69. handle_height,
  70. rx=handle_fillet, ry=handle_fillet,
  71. rz=handle_fillet,
  72. noback=false, nobottom=true, notop=true);
  73. translate([handle_wall, handle_wall, 0])
  74. rounded_cube(handle_width, handle_depth,
  75. handle_height + 1,
  76. rx=handle_fillet, ry=handle_fillet,
  77. rz=handle_fillet,
  78. noback=false, nobottom=true, notop=true);
  79. }
  80. // front holder
  81. color("yellow")
  82. translate([handle_center + mount_off_handle,
  83. base_depth / 2,
  84. base_height])
  85. difference() {
  86. hull() {
  87. cylinder(d = mount_post_dia,
  88. h = mount_off_bottom
  89. - mount_post_height_remove);
  90. translate([-mount_grip_width / 2,
  91. -mount_grip_depth / 2 - mount_grip_wall,
  92. mount_off_bottom])
  93. cube([mount_grip_width,
  94. mount_grip_depth + (2 * mount_grip_wall),
  95. mount_grip_height]);
  96. }
  97. translate([-mount_grip_width / 2 - 1,
  98. -mount_grip_depth / 2,
  99. mount_off_bottom])
  100. cube([mount_grip_width + 2,
  101. mount_grip_depth,
  102. mount_grip_height + 1]);
  103. }
  104. color("red")
  105. translate([2 * handle_center, (base_depth - ammo_box_depth) / 2, base_height - ammo_box_wall])
  106. ammo();
  107. }
  108. mount();
  109. //ammo();