“OpenSCAD 条件及循环控制”的版本间差异

本页内容
无编辑摘要
Neo讨论 | 贡献
无编辑摘要
 
(未显示同一用户的2个中间版本)
第1行: 第1行:
和大多数编程一样一样OpenSCAD也支持if else for while等,基于这些我们可以创建国家复杂的模型。
[[Category:OpenSCAD中文教程|8]]
 
和大多数编程一样一样OpenSCAD也支持if else for while等,基于这些我们可以创建更加复杂的模型。


== 三元表达式 ==
== 三元表达式 ==
第49行: 第51行:


== 循环语句 ==
== 循环语句 ==
=== 制作一个带隔板的盒子 ===
接下来我们通过一个实例使用循环语句,这个例子复杂,最后的效果图如下。
接下来我们通过一个实例使用循环语句,这个例子复杂,最后的效果图如下。
[[文件:盒子模型.png]]
[[文件:盒子模型.png]]


=== 盒子隔板 ===
<sample title="" desc="">
<sample title="" desc="">
// 单位都是 mm
// 单位都是 mm
第84行: 第89行:
[[文件:隔板.png]]
[[文件:隔板.png]]


 
=== 循环替代隔板设置 ===
<sample title="" desc="使用for循环可以轻松改变隔板的个数">
<sample title="" desc="使用for循环可以轻松改变隔板的个数">
// 单位都是 mm
// 单位都是 mm
第120行: 第125行:
[[文件:多个隔板.png]]
[[文件:多个隔板.png]]


=== 完整盒子 ===
完整的代码里面可以通过参数快速设置盒子大小,隔板的个数,壳子的厚度,可以很容易快速的制作出你想要的模型。
<sample title="" desc="完整盒子模型
<sample title="" desc="完整盒子模型
">
">
第132行: 第139行:
shellWidth = 1.2;
shellWidth = 1.2;


//  
// 2*3 6个小盒子
hSplitCubeNum = 3;
hSplitCubeNum = 2;
 
vSplitCubeNum = 3;
vSplitCubeNum = 3;


第175行: 第181行:
}
}
</sample>
</sample>
=== 3D打印效果 ===
=== 3D打印效果 ===
如果你有3D打印机,可以试着打印下该模型。下面是我打印的效果图。
如果你有3D打印机,可以试着打印下该模型。下面是我打印的效果图。
[[文件:盒子模型实物.jpg]]
[[文件:盒子模型实物.jpg]]

2022年7月30日 (六) 09:55的最新版本


和大多数编程一样一样OpenSCAD也支持if else for while等,基于这些我们可以创建更加复杂的模型。

三元表达式

示例

$fa = 1;
$fs = 0.4;
module simple_wheel(wheel_radius=10, wheel_width=6) {
    rotate([90,0,0])
        cylinder(h=wheel_width,r=wheel_radius,center=true);
}
$is_large = true;
$wheel_radius = $is_large ? 20 : 10;
simple_wheel(wheel_radius = $wheel_radius);

条件表达式

示例

$fa = 1;
$fs = 0.4;
module simple_wheel(wheel_radius=10, wheel_width=6) {
    rotate([90,0,0])
        cylinder(h=wheel_width,r=wheel_radius,center=true);
}

$is_large = true;
$wheel_width = $is_large ? 20 : 10;
simple_wheel(wheel_width = $wheel_width);


$is_large = false;

if($is_large == true){
    $wheel_width2 = 20;
} else{
        echo("---2---");

    $wheel_width2 = 5 ;
}


translate([20,20,20]){
    simple_wheel(wheel_width = $wheel_width2);
}

需要注意的是变量名称需要改变,因为OpenSCAD是全局的变量,再编译后一个变量改变会导致前一个变量也改变。


循环语句

制作一个带隔板的盒子

接下来我们通过一个实例使用循环语句,这个例子复杂,最后的效果图如下。

盒子模型.png

盒子隔板

示例

// 单位都是 mm
// 宽度
width = 90;
// 深度
deep = 112;
// 高度
height = 34;
// 壳宽度
shellWidth = 1.2;

// 
hSplitCubeNum = 2;

vSplitCubeNum = 3;


// 横向隔离
module hSplitCube(pos){
    translate([pos,0, 0]){
                cube([shellWidth,deep,height]);
     }
}

hSplitCube(0);

hSplitCube(10);

hSplitCube(20);

隔板.png

循环替代隔板设置

示例

使用for循环可以轻松改变隔板的个数

// 单位都是 mm
// 宽度
width = 90;
// 深度
deep = 112;
// 高度
height = 34;
// 壳宽度
shellWidth = 1.2;

// 
hSplitCubeNum = 20;

vSplitCubeNum = 3;




// 横向隔离
module hSplitCube(pos){
    translate([pos,0, 0]){
                cube([shellWidth,deep,height]);
     }
}



 for(i=[1:1:hSplitCubeNum-1]){
        echo(i);
            #hSplitCube(width/hSplitCubeNum*i - shellWidth);
    }

多个隔板.png

完整盒子

完整的代码里面可以通过参数快速设置盒子大小,隔板的个数,壳子的厚度,可以很容易快速的制作出你想要的模型。

示例

完整盒子模型

// 单位都是 mm
// 宽度
width = 90;
// 深度
deep = 112;
// 高度
height = 34;
// 壳宽度
shellWidth = 1.2;

// 2*3 6个小盒子
hSplitCubeNum = 2;
vSplitCubeNum = 3;




// 横向隔离
module hSplitCube(pos){
    translate([pos,0, 0]){
                cube([shellWidth,deep,height]);
     }
}

// 竖向隔离
module vSplitCube(pos){
    translate([0,pos, 0]){
                cube([width,shellWidth,height]);
     }
}


color("#ccc"){
    
    difference(){
    cube([width,deep,height]);
    translate([shellWidth,shellWidth, shellWidth]){
    cube([width -  shellWidth*2, deep-shellWidth*2, height-shellWidth]);}
    }
    
    for(i=[1:1:hSplitCubeNum-1]){
        echo(i);
            #hSplitCube(width/hSplitCubeNum*i - shellWidth);
    }
    
        for(i=[1:1:vSplitCubeNum-1]){
        echo(i);
                #vSplitCube(deep/vSplitCubeNum*i - shellWidth);

    }
}

3D打印效果

如果你有3D打印机,可以试着打印下该模型。下面是我打印的效果图。 盒子模型实物.jpg

此页面最后编辑于2022年7月30日 (星期六) 09:55。