OpenSCAD基本组件:门闩
效果图:把原作者的代码整理成了模块。//code from Internet (unknown URL), modified by Tesla.Angela (www.m5home.com/bbs)
$fn=100;
//The printing accuracy of your 3D printer.
gap=0.4;
//The status of the gate bolt.
LOCK=01;
module MakeGateBoltEnd
(
thickness,base_length,base_width,tube_diameter,holes=true
)
{
difference()
{
union()
{
cube();
translate()
{
cube();
}
}
if(holes)
{
translate([base_length/2,
(base_width-tube_diameter)/4,0-gap/2])
{
cylinder(thickness+gap,1,1);
}
translate([base_length/2,
base_width-(base_width-tube_diameter)/4,0-gap/2])
{
cylinder(thickness+gap,1,1);
}
}
}
}
module MakeGateBoltTopOpen
(
thickness,base_length,base_width,tube_diameter,holes=true,
front_extension_length=0,back_extension_length=0
)
{
difference()
{
union()
{
cube();
translate([0,base_width/2-(tube_diameter+thickness*2)/2,
thickness])
{
cube();
}
translate([0,
base_width/2+(tube_diameter+thickness*2)/2-thickness,
thickness])
{
cube();
}
if(front_extension_length)
{
translate()
{
cube();
}
}
if(back_extension_length)
{
translate([-back_extension_length,0,0])
{
cube();
}
}
}
if(holes)
{
//first hole
translate([base_length/2,
(base_width-tube_diameter-thickness*2)/4,0-gap/2])
{
cylinder(thickness+gap,1,1);
}
//second hole
translate([base_length/2,
base_width-(base_width-tube_diameter-thickness*2)/4,
0-gap/2])
{
cylinder(thickness+gap,1,1);
}
}
}
}
module MakeGateBoltBody
(
thickness,base_length,base_width,tube_diameter,holes
)
{
difference()
{
union()
{
cube();
translate([0,base_width/2-(tube_diameter+thickness*2)/2,
thickness])
{
cube([base_length,tube_diameter+thickness*2,
tube_diameter+thickness]);
}
}
translate()
{
rotate()
{
cylinder(base_length+gap,tube_diameter/2,tube_diameter/2);
}
}
if(holes==2)
{
//first hole
translate([base_length/2,
(base_width-tube_diameter-thickness*2)/4,
0-gap/2])
{
cylinder(thickness+gap,1,1);
}
//second hole
translate([base_length/2,
base_width-(base_width-tube_diameter-thickness*2)/4,
0-gap/2])
{
cylinder(thickness+gap,1,1);
}
}
else if(holes==4)
{
//first hole
translate([4,(base_width-tube_diameter-thickness*2)/4,
0-gap/2])
{
cylinder(thickness+gap,1,1);
}
//second hole
translate([base_length-4,
(base_width-tube_diameter-thickness*2)/4,
0-gap/2])
{
cylinder(thickness+gap,1,1);
}
//third hole
translate([4,base_width-(base_width-tube_diameter-thickness*2)/4,
0-gap/2])
{
cylinder(thickness+gap,1,1);
}
//fourth hole
translate([base_length-4,
base_width-(base_width-tube_diameter-thickness*2)/4,
0-gap/2])
{
cylinder(thickness+gap,1,1);
}
}
}
}
module MakeGateBoltStick(tube_diameter,stick_length, handle_length)
{
intersection()
{
rotate()
{
cylinder(stick_length,tube_diameter/2,tube_diameter/2);
}
translate()
{
rotate()
{
cylinder(handle_length,tube_diameter/2,tube_diameter/2);
}
}
}
translate()
{
rotate()
{
cylinder(stick_length-tube_diameter/2,
tube_diameter/2,tube_diameter/2);
}
}
translate()
{
rotate()
{
cylinder(handle_length-tube_diameter/2,
tube_diameter/2,tube_diameter/2);
}
}
}
//test
translate([-40,0,0])
{
MakeGateBoltEnd(1,10,20,10,true);
}
translate([-20,0,0])
{
MakeGateBoltTopOpen(1,10,20,8+gap,true,10,10);
}
translate()
{
MakeGateBoltBody(1,30,20,8+gap,4);
}
translate()
{
MakeGateBoltBody(1,10,20,8+gap,2);
}
translate()
{
MakeGateBoltStick(8,60,30);
}
页:
[1]