OpenSCAD用户手册/CSG 建模
外观
布尔操作概述
[编辑]2D示例
[编辑]-
并集 ( 或 )
圆形 + 正方形 -
差集 ( 与非 )
正方形 - 圆形 -
差集 ( 与非 )
圆形 - 正方形 -
交集 ( 与 )
圆形 - (圆形 - 正方形)
union() {square(10);circle(10);} // 正方形 或 圆形
difference() {square(10);circle(10);} // 正方形 与非 圆形
difference() {circle(10);square(10);} // 圆形 与非 正方形
intersection(){square(10);circle(10);} // 正方形 与 圆形
3D示例
[编辑]-
并集 ( 或 )
球体 + 立方体 -
差集 ( 与非 )
立方体 - 球体 -
差集 ( 与非 )
球体 - 立方体 -
交集 ( 与 )
球体 - (球体 - 立方体)
union() {cube(12, center=true); sphere(8);} // 立方体 或 球体
difference() {cube(12, center=true); sphere(8);} // 立方体 与非 球体
difference() {sphere(8); cube(12, center=true);} // 球体 与非 立方体
intersection(){cube(12, center=true); sphere(8);} // 立方体 与 球体
union
[编辑]创建所有子节点的并集。即,所有子节点之和(逻辑或).
可用于2D对象或3D对象, 但不能两者混用。
//举个栗子:
union() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
备注: union is implicit when not used. But it is mandatory, for example, in difference to group first child nodes into one.
difference
[编辑]从第一个子节点集中减去第二个(以及指定的其他)子节点集(逻辑与非).
可用于2D对象或3D对象, 但不能两者混用。
用例:
difference() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
减去多个子对象
[编辑]请注意,在第二个实例中,加入了第一个子对象与第二个子对象的并集操作。
// 减去多个子对象的用例:
$fn=90;
difference(){
cylinder(r=5,h=20,center=true);
rotate([00,140,-45]) color("LightBlue") cylinder(r=2,h=25,center=true);
rotate([00,40,-50]) cylinder(r=2,h=30,center=true);
translate([0,0,-10])rotate([00,40,-50]) cylinder(r=1.4,h=30,center=true);
}
// 第二个实例在第一个实例的基础上添加了一个并集操作
translate([10,10,0]){
difference(){
union(){ // 将第一个子对象与第二个子对象组合起来
cylinder(r=5,h=20,center=true);
rotate([00,140,-45]) color("LightBlue") cylinder(r=2,h=25,center=true);
}
rotate([00,40,-50]) cylinder(r=2,h=30,center=true);
translate([0,0,-10])rotate([00,40,-50]) cylinder(r=1.4,h=30,center=true);
}
}
intersection
[编辑]创建所有子节点的交集。这将保留集合间的重合部分(逻辑与).
只有所有子对象共用或共享的部分才会被保留下来。
可用于2D对象或3D对象, 但不能两者混用。
//用例:
intersection() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
render
[编辑]警告:使用渲染函数时,总是针对子对象树计算其CSG模型(在OpenCSG预览模式下也是如此)。这将导致预览变得极慢,并发生OpenSCAD短暂挂起并处于冻结状态。
用例:
render(convexity = 1) { ... }
convexity | 此参数为整数。此凸性参数用于指定:一射线贯穿物体的前后侧时,两者相交可达到的最多次数。此参数仅用于在OpenCSG预览模式下正确地显示对象,而对于多面体的渲染并无影响。 |
此图像展示的是凸性参数为4的一个2D图形,这是因为红色射线穿过该图形时与之最多相交4次。利用同样的方法亦可确定3D图形的凸性。在大多数情况下,将其设置为10就能够顺利地完成渲染工作。