是否可以在 OpenSCAD 中沿法线单独挤出面?

3D打印 3d模型 opencad
2021-05-12 13:20:17

对于我正在制作的几何体,我想沿着其法线单独挤出每个面。

这是 Blender 等 3D 建模软件中的标准程序;请参见此处的示例 3

这在 OpenSCAD 中可行吗?

3个回答

对于单个面的拉伸,只要知道该面所在的平面,就可以projection将其变成二维形状linear_extrude通常,您需要 的cut=true变体projection,并且您需要平移/旋转要投影的对象,使面位于 XY 平面(这是“只要您知道”)部分。不幸的是,这会受到数值不稳定性的影响,因此您可能需要将其平移 0.001 左右才能穿过XY 平面,在这种情况下,您最终会得到面部的近似值,而不是其精确版本。

(严格来说,OpenSCAD 无论如何都没有确切的东西,除了在 a 中共享点的人脸的情况下polyhedron,因此此限制可能不会使情况比 OpenSCAD 中的情况更糟)。

一旦你有了投影,你就linear_extrude可以在任何你想要的方向上,操纵结果(例如用变换矩阵倾斜),然后旋转并将其平移回面部。应该可以将整个操作包装成一个module对其子节点进行操作的 [ren]。

另一种方法是通过手动捕获面部周围的薄片intersection,然后hull使用自身的平移执行 a ,但这仅在它是凸面时才有效(否则hull也会填充 2D 面部形状的凸包)。

只能在 2D 多边形上挤出面。从 3D 对象中,您无法捕捉面部并将其挤出。要挤出“面”,您需要定义面的形状并将其扩展到您选择的第三维。这样就创建了一个 3D 形状,它可以连接(使用 eg 连接union)到原始形状。对于挤压,该功能linear_extrude可用:

linear_extrude(height = fanwidth, center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0, $fn = 16) {...}

内置于语言及其 CSG 模型中,不处理 CSG 树是执行函数式语言之后的一个完全独立的阶段,并且无法“读回”从模型到人脸的转换过程中的任何内容对面部进行操作。

但是,如果您愿意自己做一些繁重的工作,或者从已经完成此操作的其他人那里寻找库代码,则可以执行此操作。它所涉及的是根据代表模型的嵌套列表制定您自己的描述形式,并带有一个用于将列表转换为 OpenSCAD CSG 树的模块。然后,您可以编写函数以任意方式处理此描述,实质上是用自己的语言重新发明 OpenSCAD 的 CSG 阶段。过去肯定已经完成了一些较小的版本,例如在 OpenSCAD 中实现“loft”类型的功能。