找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 752|回复: 0

[代码建模] OpenSCAD基本组件:门闩

[复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2024-1-16 06:09:51 | 显示全部楼层 |阅读模式
效果图:
demo.png
把原作者的代码整理成了模块。
  1. //code from Internet (unknown URL), modified by Tesla.Angela (www.m5home.com/bbs)

  2. $fn=100;

  3. //The printing accuracy of your 3D printer.
  4. gap=0.4;
  5. //The status of the gate bolt.
  6. LOCK=01;

  7. module MakeGateBoltEnd
  8. (
  9.         thickness,base_length,base_width,tube_diameter,holes=true
  10. )
  11. {
  12.         difference()
  13.         {
  14.                 union()
  15.                 {
  16.                         cube([base_length,base_width,thickness]);
  17.                         translate([base_length-thickness,0,0])
  18.                         {
  19.                                 cube([thickness,base_width,tube_diameter+thickness]);
  20.                         }
  21.                 }
  22.                 if(holes)
  23.                 {
  24.                         translate([base_length/2,
  25.                                                 (base_width-tube_diameter)/4,0-gap/2])
  26.                         {
  27.                                 cylinder(thickness+gap,1,1);
  28.                         }
  29.                         translate([base_length/2,
  30.                                                 base_width-(base_width-tube_diameter)/4,0-gap/2])
  31.                         {
  32.                                 cylinder(thickness+gap,1,1);
  33.                         }
  34.                 }
  35.         }
  36. }

  37. module MakeGateBoltTopOpen
  38. (
  39.         thickness,base_length,base_width,tube_diameter,holes=true,
  40.         front_extension_length=0,back_extension_length=0
  41. )
  42. {
  43.         difference()
  44.         {
  45.                 union()
  46.                 {
  47.                         cube([base_length,base_width,thickness]);
  48.                         translate([0,base_width/2-(tube_diameter+thickness*2)/2,
  49.                                                 thickness])
  50.                         {
  51.                                 cube([base_length,thickness,tube_diameter+thickness]);
  52.                         }
  53.                         translate([0,
  54.                                                 base_width/2+(tube_diameter+thickness*2)/2-thickness,
  55.                                                 thickness])
  56.                         {
  57.                                 cube([base_length,thickness,tube_diameter+thickness]);
  58.                         }
  59.                         if(front_extension_length)
  60.                         {
  61.                                 translate([front_extension_length,0,0])
  62.                                 {
  63.                                         cube([front_extension_length,base_width,thickness]);
  64.                                 }
  65.                         }
  66.                         if(back_extension_length)
  67.                         {
  68.                                 translate([-back_extension_length,0,0])
  69.                                 {
  70.                                         cube([back_extension_length,base_width,thickness]);
  71.                                 }
  72.                         }
  73.                 }
  74.                 if(holes)
  75.                 {
  76.                         //first hole
  77.                         translate([base_length/2,
  78.                                                 (base_width-tube_diameter-thickness*2)/4,0-gap/2])
  79.                         {
  80.                                 cylinder(thickness+gap,1,1);
  81.                         }
  82.                         //second hole
  83.                         translate([base_length/2,
  84.                                                 base_width-(base_width-tube_diameter-thickness*2)/4,
  85.                                                 0-gap/2])
  86.                         {
  87.                                 cylinder(thickness+gap,1,1);
  88.                         }
  89.                 }
  90.         }
  91. }

  92. module MakeGateBoltBody
  93. (
  94.         thickness,base_length,base_width,tube_diameter,holes
  95. )
  96. {
  97.         difference()
  98.         {
  99.                 union()
  100.                 {
  101.                         cube([base_length,base_width,thickness]);
  102.                         translate([0,base_width/2-(tube_diameter+thickness*2)/2,
  103.                                                 thickness])
  104.                         {
  105.                                 cube([base_length,tube_diameter+thickness*2,
  106.                                                 tube_diameter+thickness]);
  107.                         }
  108.                 }
  109.                 translate([0-gap/2,base_width/2,thickness+tube_diameter/2])
  110.                 {
  111.                         rotate([0,90,0])
  112.                         {
  113.                                 cylinder(base_length+gap,tube_diameter/2,tube_diameter/2);
  114.                         }
  115.                 }
  116.                 if(holes==2)
  117.                 {
  118.                         //first hole
  119.                         translate([base_length/2,
  120.                                                 (base_width-tube_diameter-thickness*2)/4,
  121.                                                 0-gap/2])
  122.                         {
  123.                                 cylinder(thickness+gap,1,1);
  124.                         }
  125.                         //second hole
  126.                         translate([base_length/2,
  127.                                                 base_width-(base_width-tube_diameter-thickness*2)/4,
  128.                                                 0-gap/2])
  129.                         {
  130.                                 cylinder(thickness+gap,1,1);
  131.                         }
  132.                 }
  133.                 else if(holes==4)
  134.                 {
  135.                         //first hole
  136.                         translate([4,(base_width-tube_diameter-thickness*2)/4,
  137.                                                 0-gap/2])
  138.                         {
  139.                                 cylinder(thickness+gap,1,1);
  140.                         }
  141.                         //second hole
  142.                         translate([base_length-4,
  143.                                                 (base_width-tube_diameter-thickness*2)/4,
  144.                                                 0-gap/2])
  145.                         {
  146.                                 cylinder(thickness+gap,1,1);
  147.                         }
  148.                         //third hole
  149.                         translate([4,base_width-(base_width-tube_diameter-thickness*2)/4,
  150.                                                 0-gap/2])
  151.                         {
  152.                                 cylinder(thickness+gap,1,1);
  153.                         }
  154.                         //fourth hole
  155.                         translate([base_length-4,
  156.                                                 base_width-(base_width-tube_diameter-thickness*2)/4,
  157.                                                 0-gap/2])
  158.                         {
  159.                                 cylinder(thickness+gap,1,1);
  160.                         }
  161.                 }
  162.         }
  163. }

  164. module MakeGateBoltStick(tube_diameter,stick_length, handle_length)
  165. {
  166.         intersection()
  167.         {
  168.                 rotate([0,90,0])
  169.                 {
  170.                         cylinder(stick_length,tube_diameter/2,tube_diameter/2);
  171.                 }
  172.                 translate([tube_diameter/2,tube_diameter/2,0])
  173.                 {
  174.                         rotate([90,0,0])
  175.                         {
  176.                                 cylinder(handle_length,tube_diameter/2,tube_diameter/2);
  177.                         }
  178.                 }
  179.         }
  180.         translate([tube_diameter/2,0,0])
  181.         {
  182.                 rotate([0,90,0])
  183.                 {
  184.                         cylinder(stick_length-tube_diameter/2,
  185.                                         tube_diameter/2,tube_diameter/2);
  186.                 }
  187.         }
  188.         translate([tube_diameter/2,0,0])
  189.         {
  190.                 rotate([90,0,0])
  191.                 {
  192.                         cylinder(handle_length-tube_diameter/2,
  193.                                         tube_diameter/2,tube_diameter/2);
  194.                 }
  195.         }
  196. }

  197. //test
  198. translate([-40,0,0])
  199. {
  200.         MakeGateBoltEnd(1,10,20,10,true);
  201. }
  202. translate([-20,0,0])
  203. {
  204.         MakeGateBoltTopOpen(1,10,20,8+gap,true,10,10);
  205. }
  206. translate([0,0,0])
  207. {
  208.         MakeGateBoltBody(1,30,20,8+gap,4);
  209. }
  210. translate([40,0,0])
  211. {
  212.         MakeGateBoltBody(1,10,20,8+gap,2);
  213. }
  214. translate([LOCK?-9:-29,10,5+gap/2])
  215. {
  216.         MakeGateBoltStick(8,60,30);
  217. }
复制代码
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表