“OpenSCAD 调整模型大小和更多组合对象的方法”的版本间差异

本页内容
Neo讨论 | 贡献
第57行: 第57行:


尝试在空白模型上创建一个半径为 10 个单位的球体。使用 scale 命令仅沿 Y 轴将球体缩放 0.4 倍。
尝试在空白模型上创建一个半径为 10 个单位的球体。使用 scale 命令仅沿 Y 轴将球体缩放 0.4 倍。
<sample>
<sample title="narrowed_spherical_wheel_using_scale.scad">
scale([1,0.4,1])
scale([1,0.4,1])
     sphere(r=10);
     sphere(r=10);
第63行: 第63行:
[[文件:Narrowed spherical wheel.jpg]]
[[文件:Narrowed spherical wheel.jpg]]
缩放对象的另一种方法是使用调整大小转换。缩放和调整大小之间的区别在于,使用缩放命令时,您必须沿每个轴指定所需的缩放因子,但在使用调整大小命令时,您必须指定沿每个轴的对象所需的结果尺寸。在前面的示例中,您从一个半径为 10 个单位(沿每个轴的总尺寸为 20 个单位)的球体开始,并沿 Y 轴将其缩放 0.4 倍。因此,沿 Y 轴的缩放球体的最终尺寸为 8 个单位。沿 X 和 Z 轴的尺寸保持不变(20 个单位),因为沿这些轴的比例因子等于 1。您可以使用以下调整大小命令获得相同的结果。
缩放对象的另一种方法是使用调整大小转换。缩放和调整大小之间的区别在于,使用缩放命令时,您必须沿每个轴指定所需的缩放因子,但在使用调整大小命令时,您必须指定沿每个轴的对象所需的结果尺寸。在前面的示例中,您从一个半径为 10 个单位(沿每个轴的总尺寸为 20 个单位)的球体开始,并沿 Y 轴将其缩放 0.4 倍。因此,沿 Y 轴的缩放球体的最终尺寸为 8 个单位。沿 X 和 Z 轴的尺寸保持不变(20 个单位),因为沿这些轴的比例因子等于 1。您可以使用以下调整大小命令获得相同的结果。
<sample>
<sample title="narrowed_spherical_wheel_using_resize.scad">


resize([20,8,20])
resize([20,8,20])
第74行: 第74行:
尝试沿 Y 轴挤压汽车的球形车轮。使用 resize 命令和 wheel_width 变量来控制轮子的最终宽度。仅沿 Y 轴调整轮子的大小。
尝试沿 Y 轴挤压汽车的球形车轮。使用 resize 命令和 wheel_width 变量来控制轮子的最终宽度。仅沿 Y 轴调整轮子的大小。


<sample>
<sample title="car_with_narrowed_spherical_wheels.scad
 
">
$fa = 1;
$fa = 1;
$fs = 0.4;
$fs = 0.4;
第174行: 第176行:
     cylinder(h=track,r=2,center=true);
     cylinder(h=track,r=2,center=true);
</sample>
</sample>
[[文件:Car with narrowed spherical wheels and body.jpg]]
=== 以其他方式组合对象 ===
到目前为止,当您想在模型中创建一个附加对象时,您只是在脚本中添加了另一个语句。最终的汽车模型是脚本中定义的所有对象的联合。您一直在隐式使用 union 命令,它是可用的布尔运算之一。当使用union布尔运算时,OpenSCAD 将所有对象的联合作为结果模型。在以下脚本中,隐式使用并集。

2022年7月21日 (四) 21:55的版本

球体和调整大小的对象

到目前为止,您一直在使用立方体和圆柱体基元。OpenSCAD 中可用的另一个 3D 基元是球体。您可以使用以下命令创建球体。

sphere.scad

sphere(r=10);

Sphere radius 10.jpg 您应该注意到,球体是以原点为中心创建的。输入参数 r 对应于球体的半径。 您想到的一个想法是用球形轮子代替圆柱形轮子。

试着把你的汽车的轮子做成球形。为此,将适当的圆柱体命令替换为球体命令。是否还需要围绕 X 轴旋转轮子?仍然需要 wheel_width 变量吗?当您修改wheels_turn 变量的值时,您的模型是否有任何明显的变化?

car_with_spherical_wheels.scad

$fa = 1;
$fs = 0.4;
wheel_radius = 8;
base_height = 8;
top_height = 10;
track = 40;
body_roll = 0;
wheels_turn = 20;
rotate([body_roll,0,0]) {
    // Car body base
    cube([60,20,base_height],center=true);
    // Car body top
    translate([5,0,base_height/2+top_height/2 - 0.001])
        cube([30,20,top_height],center=true);
}
// Front left wheel
translate([-20,-track/2,0])
    rotate([0,0,wheels_turn])
    sphere(r=wheel_radius);
// Front right wheel
translate([-20,track/2,0])
    rotate([0,0,wheels_turn])
    sphere(r=wheel_radius);
// Rear left wheel
translate([20,-track/2,0])
    rotate([0,0,0])
    sphere(r=wheel_radius);
// Rear right wheel
translate([20,track/2,0])
    rotate([0,0,0])
    sphere(r=wheel_radius);
// Front axle
translate([-20,0,0])
    rotate([90,0,0])
    cylinder(h=track,r=2,center=true);
// Rear axle
translate([20,0,0])
    rotate([90,0,0])
    cylinder(h=track,r=2,center=true);

Car with spherical wheels.jpg 使用球体创建轮子的想法很好。您现在可以挤压球体,使它们具有更像轮子的形状。一种方法是使用 scale 命令。

尝试在空白模型上创建一个半径为 10 个单位的球体。使用 scale 命令仅沿 Y 轴将球体缩放 0.4 倍。

narrowed_spherical_wheel_using_scale.scad

scale([1,0.4,1])
    sphere(r=10);

Narrowed spherical wheel.jpg 缩放对象的另一种方法是使用调整大小转换。缩放和调整大小之间的区别在于,使用缩放命令时,您必须沿每个轴指定所需的缩放因子,但在使用调整大小命令时,您必须指定沿每个轴的对象所需的结果尺寸。在前面的示例中,您从一个半径为 10 个单位(沿每个轴的总尺寸为 20 个单位)的球体开始,并沿 Y 轴将其缩放 0.4 倍。因此,沿 Y 轴的缩放球体的最终尺寸为 8 个单位。沿 X 和 Z 轴的尺寸保持不变(20 个单位),因为沿这些轴的比例因子等于 1。您可以使用以下调整大小命令获得相同的结果。

narrowed_spherical_wheel_using_resize.scad

resize([20,8,20])
    sphere(r=10);

Narrowed spherical wheel.jpg

当您缩放/调整对象的大小并且您关心其结果尺寸时,使用调整大小命令会更方便。相反,当您更关心结果尺寸与起始尺寸的比率时,使用缩放命令会更方便。

尝试沿 Y 轴挤压汽车的球形车轮。使用 resize 命令和 wheel_width 变量来控制轮子的最终宽度。仅沿 Y 轴调整轮子的大小。


car_with_narrowed_spherical_wheels.scad

$fa = 1;
$fs = 0.4;
wheel_radius = 8;
base_height = 8;
top_height = 10;
track = 30;
wheel_width = 4;
body_roll = 0;
wheels_turn = -20;
rotate([body_roll,0,0]) {
    // Car body base
    cube([60,20,base_height],center=true);
    // Car body top
    translate([5,0,base_height/2+top_height/2 - 0.001])
        cube([30,20,top_height],center=true);
}
// Front left wheel
translate([-20,-track/2,0])
    rotate([0,0,wheels_turn])
    resize([2*wheel_radius,wheel_width,2*wheel_radius])
    sphere(r=wheel_radius);
// Front right wheel
translate([-20,track/2,0])
    rotate([0,0,wheels_turn])
    resize([2*wheel_radius,wheel_width,2*wheel_radius])
    sphere(r=wheel_radius);
// Rear left wheel
translate([20,-track/2,0])
    rotate([0,0,0])
    resize([2*wheel_radius,wheel_width,2*wheel_radius])
    sphere(r=wheel_radius);
// Rear right wheel
translate([20,track/2,0])
    rotate([0,0,0])
    resize([2*wheel_radius,wheel_width,2*wheel_radius])
    sphere(r=wheel_radius);
// Front axle
translate([-20,0,0])
    rotate([90,0,0])
    cylinder(h=track,r=2,center=true);
// Rear axle
translate([20,0,0])
    rotate([90,0,0])
    cylinder(h=track,r=2,center=true);

Car with narrowed spherical wheels.jpg

新的车轮设计看起来很酷。您现在可以创建一个更适合这种新风格的身体。

尝试使用球体和调整大小/缩放命令代替立方体命令来创建与车轮样式相匹配的主体。

car_with_narrowed_spherical_wheels.scad

$fa = 1;
$fs = 0.4;
wheel_radius = 8;
base_height = 8;
top_height = 10;
track = 28;
wheel_width = 4;
body_roll = 0;
wheels_turn = -20;
rotate([body_roll,0,0]) {
    // Car body base
    resize([90,20,12])
        sphere(r=10);
    // Car body top
    translate([10,0,5])
        resize([50,15,15])
        sphere(r=10);
}
// Front left wheel
translate([-20,-track/2,0])
    rotate([0,0,wheels_turn])
    resize([2*wheel_radius,wheel_width,2*wheel_radius])
    sphere(r=wheel_radius);
// Front right wheel
translate([-20,track/2,0])
    rotate([0,0,wheels_turn])
    resize([2*wheel_radius,wheel_width,2*wheel_radius])
    sphere(r=wheel_radius);
// Rear left wheel
translate([20,-track/2,0])
    rotate([0,0,0])
    resize([2*wheel_radius,wheel_width,2*wheel_radius])
    sphere(r=wheel_radius);
// Rear right wheel
translate([20,track/2,0])
    rotate([0,0,0])
    resize([2*wheel_radius,wheel_width,2*wheel_radius])
    sphere(r=wheel_radius);
// Front axle
translate([-20,0,0])rotate([90,0,0])
    cylinder(h=track,r=2,center=true);
// Rear axle
translate([20,0,0])
    rotate([90,0,0])
    cylinder(h=track,r=2,center=true);

Car with narrowed spherical wheels and body.jpg

以其他方式组合对象

到目前为止,当您想在模型中创建一个附加对象时,您只是在脚本中添加了另一个语句。最终的汽车模型是脚本中定义的所有对象的联合。您一直在隐式使用 union 命令,它是可用的布尔运算之一。当使用union布尔运算时,OpenSCAD 将所有对象的联合作为结果模型。在以下脚本中,隐式使用并集。

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