首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编辑此SCAD文件中的孔大小

如何编辑此SCAD文件中的孔大小
EN

Stack Overflow用户
提问于 2021-05-07 03:44:29
回答 1查看 38关注 0票数 0

我是3D建模的新手(今天刚开始),我发现了Iron Momo (链接:https://www.thingiverse.com/thing:211020 )的这段令人惊叹的代码。我可以在OpenSCAD (https://openscad.org/downloads.html)中编辑它

我唯一的问题是,我需要每行中的孔有不同的大小,一行16毫米,另一行13毫米。使用下面的代码可以做到这一点吗?

感谢您能提前提供的任何帮助!

代码语言:javascript
复制
//Customizable test tube rack
//by Iron Momo

// preview[view:north, tilt:top]

/* [Basic] */

//Number of tubes
nb_tubes = 5; //[1:20]
//Number of rows
nb_rows = 1; //[1:10]

//Tubes diameter (mm)
hole_diameter = 16;

//Material thickness (mm)
thickness = 5; //[3,4,5,10]

//Total height (mm)
height1 = 80;
//Middle height (mm)
height2 = 20;


output_type = "STL"; //[DXF,STL]

/* [Hidden] */
inter=10;
width1 = nb_tubes*hole_diameter + (nb_tubes+1)*inter;
width2 = nb_tubes*hole_diameter + (nb_tubes+1)*inter+2*thickness;
depth1= nb_rows*hole_diameter+nb_rows*inter;
depth2= nb_rows*hole_diameter+nb_rows*inter+2*thickness;

if(output_type=="STL")
{linear_extrude(height = thickness, center = false) rack_creation();
}

if(output_type=="DXF")
{rack_creation();}

module rack_creation()
{
bottom();
translate([0,depth2+5,0]) middle();
translate([0,2*depth2+10,0]) top();
translate([0,-height2-15,0])side1();
translate([0,-2*height2-30,0])side1();
translate([-5,-2*height2-30,0])rotate([0,0,90])side2();
translate([-5,height1-2*height2,0])rotate([0,0,90])side2();

}



module bottom()
{
difference()
{
    square([width2,depth2]);
    for (i = [1:nb_tubes])
        {
            translate([thickness+i*inter+(i-1)*hole_diameter,0,0]) square([hole_diameter,thickness]);

            translate([thickness+i*inter+(i-1)*hole_diameter,depth1+thickness,0]) square([hole_diameter,thickness]);
        }

    translate([0,depth2/5,0]) square([thickness,depth2/5]);
    translate([0,3*depth2/5,0]) square([thickness,depth2/5]);

    translate([width1+thickness,depth2/5,0]) square([thickness,depth2/5]);
    translate([width1+thickness,3*depth2/5,0]) square([thickness,depth2/5]);
}
}


module top()
{
difference()
{
    square([width2,depth2]);
    for (i=[0:nb_rows-1])
        {
            for (j = [1:nb_tubes])
                {
                    translate([thickness+j*inter+(j-1)*hole_diameter+hole_diameter/2,thickness+inter/2+hole_diameter/2+i*(hole_diameter+inter),0]) circle(hole_diameter/2);
                }
        }

    translate([0,depth2/5,0]) square([thickness,depth2/5]);
    translate([0,3*(depth2/5),0]) square([thickness,depth2/5]);

    translate([width1+thickness,depth2/5,0]) square([thickness,depth2/5]);
    translate([width1+thickness,3*(depth2/5),0]) square([thickness,depth2/5]);
}
}

module middle()
{
difference()
{
top();
for (i = [1:nb_tubes])
    {
        translate([thickness+i*inter+(i-1)*hole_diameter,0,0]) square([hole_diameter,thickness]);

        translate([thickness+i*inter+(i-1)*hole_diameter,depth1+thickness,0]) square([hole_diameter,thickness]);
    }
}
}


module side1()
{
difference()
{
    translate([0,thickness,0]) square([width2,height2]);

    translate([0,thickness+height2/3,0]) square([thickness,height2/3]);
    translate([width1+thickness,thickness+height2/3,0]) square([thickness,height2/3]);
}
for (i = [1:nb_tubes])
    {
        translate([thickness+i*inter+(i-1)*hole_diameter,0,0]) square([hole_diameter,thickness]);

        translate([thickness+i*inter+(i-1)*hole_diameter,height2+thickness,0]) square([hole_diameter,thickness]);
    }
}

module side2()
{
difference() 
{
    //Forme de base
    translate([thickness,0,0]) square([height1,depth2]);

    //Trous middle
    translate([height2+thickness,0,0]) square([thickness,depth2/5]);
    translate([height2+thickness,4*depth2/5,0]) square([thickness,depth2/5]);
    translate([height2+thickness,2*depth2/5,0]) square([thickness,depth2/5]);

    //Trous side1
    translate([thickness,0,0]) square([height2/3,thickness]);
    translate([thickness,depth1+thickness,0]) square([height2/3,thickness]);
    translate([thickness+2*height2/3,0,0]) square([height2/3,thickness]);
    translate([thickness+2*height2/3,depth1+thickness,0]) square([height2/3,thickness]);


}

//Ajout bottom
translate([0,depth2/5,0]) square([thickness,depth2/5]);
translate([0,3*(depth2/5),0]) square([thickness,depth2/5]);


//Ajout top
translate([height1+thickness,depth2/5,0]) square([thickness,depth2/5]);
translate([height1+thickness,3*(depth2/5),0]) square([thickness,depth2/5]);



}
EN

回答 1

Stack Overflow用户

发布于 2021-05-09 18:43:53

带孔的元素由相同的模块创建,模块top()。在本例中,孔的大小是在模块中设置的

代码语言:javascript
复制
circle(hole_diameter/2);

因此top()的每个实例都有相同的孔直径。要解决此问题,可以使用参数调用模块,请参见https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/User-Defined_Functions_and_Modules#Modules

代码语言:javascript
复制
module top(hd)
{
difference()
{
    square([width2,depth2]);
    for (i=[0:nb_rows-1])
        {
            for (j = [1:nb_tubes])
                {
                translate([thickness+j*inter+(j-1)*hole_diameter+hole_diameter/2,thickness+inter/2+hole_diameter/2+i*(hole_diameter+inter),0]) circle(hd/2);
                }
        }

    translate([0,depth2/5,0]) square([thickness,depth2/5]);
    translate([0,3*(depth2/5),0]) square([thickness,depth2/5]);

    translate([width1+thickness,depth2/5,0]) square([thickness,depth2/5]);
    translate([width1+thickness,3*(depth2/5),0]) square([thickness,depth2/5]);
}
}

module middle(hd)
{
difference()
{
top(hd);
for (i = [1:nb_tubes])
    {
        translate([thickness+i*inter+(i-1)*hole_diameter,0,0]) square([hole_diameter,thickness]);

        translate([thickness+i*inter+(i-1)*hole_diameter,depth1+thickness,0])       square([hole_diameter,thickness]);
    }
}
}

然后设置另一个变量:

代码语言:javascript
复制
//Tubes diameter (mm)
hole_diameter = 16;    // of the middle element
hole_diameter_1 = 13;  // of the top element

并在调用rack_creation()中的模块top()和modules ()时使用它们:

代码语言:javascript
复制
module rack_creation()
{
bottom();
translate([0,depth2+5,0]) middle(hole_diameter);
translate([0,2*depth2+10,0]) top(hole_diameter_1);
…
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67425009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档