跳转到内容

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就能够顺利地完成渲染工作。