Tesla.Angela 发表于 2024-1-16 05:59:26

OpenSCAD基本组件:铰链

效果图:
把原作者使用全局变量的代码删掉了,全部改为了使用参数传递进模块里(以便在一个工程里创建多个不同的铰链)。//code from Internet (learn.cadhub.xyz), modified by Tesla.Angela (www.m5home.com/bbs)

$fn=100;

module hingeBaseProfile
(
        baseWidth=20,
        hingeLength=28,
        baseThickness=3,
        pivotRadius=5,
        pinRadius=2,
        pinTaper=0.25,
        mountingHoleRadius=1.5,
        mountingHoleCount=3,
        mountingHoleEdgeOffset=4,
        clearance=0.3,
        tiny=0.005
)
{
        translate()
        {
                square();
        }
}

module plateHoles
(
        baseWidth=20,
        hingeLength=28,
        baseThickness=3,
        pivotRadius=5,
        pinRadius=2,
        pinTaper=0.25,
        mountingHoleRadius=1.5,
        mountingHoleCount=3,
        mountingHoleEdgeOffset=4,
        clearance=0.3,
        tiny=0.005
)
{
        mountingHoleMoveIncrement=(hingeLength-2*mountingHoleEdgeOffset)/
                                                          (mountingHoleCount-1);
        for(i=)
        {
                translate([baseWidth/2+pivotRadius,
                                        -baseThickness,
                                        i*mountingHoleMoveIncrement+mountingHoleEdgeOffset])
                {
                        rotate([-90,0,0])
                        {
                                cylinder(r=mountingHoleRadius,h=baseThickness*4);
                        }
                }
        }
}

module hingeBodyHalf
(
        baseWidth=20,
        hingeLength=28,
        baseThickness=3,
        pivotRadius=5,
        pinRadius=2,
        pinTaper=0.25,
        mountingHoleRadius=1.5,
        mountingHoleCount=3,
        mountingHoleEdgeOffset=4,
        clearance=0.3,
        tiny=0.005
)
{
        hingeHalfExtrudeLength=hingeLength/2-clearance/2;
        difference()
        {
                union()
                {
                        linear_extrude(hingeHalfExtrudeLength)
                        {
                                offset(1)offset(-2)offset(1)
                                {
                                        translate()
                                        {
                                                circle(pivotRadius);
                                        }
                                        square();
                                        hingeBaseProfile(baseWidth,hingeLength,baseThickness,
                                                                        pivotRadius,pinRadius,pinTaper,
                                                                        mountingHoleRadius,mountingHoleCount,
                                                                        mountingHoleEdgeOffset,clearance,
                                                                        tiny);
                                }
                        }
                        linear_extrude(hingeLength)
                        {
                                offset(1)offset(-1)hingeBaseProfile();
                        }
                }
                plateHoles(baseWidth,hingeLength,baseThickness,pivotRadius,
                                        pinRadius,pinTaper,mountingHoleRadius,
                                        mountingHoleCount,mountingHoleEdgeOffset,clearance,
                                        tiny);
        }
}

module pin
(
        rotateY,
        radiusOffset,
        baseWidth=20,
        hingeLength=28,
        baseThickness=3,
        pivotRadius=5,
        pinRadius=2,
        pinTaper=0.25,
        mountingHoleRadius=1.5,
        mountingHoleCount=3,
        mountingHoleEdgeOffset=4,
        clearance=0.3,
        tiny=0.005
)
{
        hingeHalfExtrudeLength=hingeLength/2-clearance/2;
        translate()
        {
                rotate()
                {
                        cylinder(h=hingeLength/2+clearance/2,
                                        r1=pinRadius+radiusOffset,
                                        r2=pinRadius+pinTaper+radiusOffset);
                }
        }
}

module hingeHalfFemale
(
        baseWidth=20,
        hingeLength=28,
        baseThickness=3,
        pivotRadius=5,
        pinRadius=2,
        pinTaper=0.25,
        mountingHoleRadius=1.5,
        mountingHoleCount=3,
        mountingHoleEdgeOffset=4,
        clearance=0.3,
        tiny=0.005
)
{
        difference()
        {
                hingeBodyHalf(baseWidth,hingeLength,baseThickness,pivotRadius,
                                                pinRadius,pinTaper,mountingHoleRadius,
                                                mountingHoleCount,mountingHoleEdgeOffset,clearance,
                                                tiny);
                pin(180,clearance,baseWidth,hingeLength,baseThickness,pivotRadius,
                        pinRadius,pinTaper,mountingHoleRadius,mountingHoleCount,
                        mountingHoleEdgeOffset,clearance,tiny);
        }
}

module hingeHalfMale
(
        baseWidth=20,
        hingeLength=28,
        baseThickness=3,
        pivotRadius=5,
        pinRadius=2,
        pinTaper=0.25,
        mountingHoleRadius=1.5,
        mountingHoleCount=3,
        mountingHoleEdgeOffset=4,
        clearance=0.3,
        tiny=0.005
)
{
        translate()
        {
                rotate()
                {
                        hingeBodyHalf(baseWidth,hingeLength,baseThickness,pivotRadius,
                                                        pinRadius,pinTaper,mountingHoleRadius,
                                                        mountingHoleCount,mountingHoleEdgeOffset,
                                                        clearance,tiny);
                        pin(0,0,baseWidth,hingeLength,baseThickness,pivotRadius,
                                pinRadius,pinTaper,mountingHoleRadius,
                                mountingHoleCount,mountingHoleEdgeOffset,
                                clearance,tiny);
                }
        }
}

//test
translate([-30,0,0])
{
        rotate()
        {
                hingeHalfFemale(10,20,3,5,2,0.25,1.5,2);
                #hingeHalfMale(10,20,3,5,2,0.25,1.5,2);
        }
}
translate()
{
        rotate()
        {
                hingeHalfFemale(20,40);
                #hingeHalfMale(20,40);
        }
}
页: [1]
查看完整版本: OpenSCAD基本组件:铰链