是否有一种有效的方法来发现 OpenSCAD 中什么是无关的(“死的”或“未使用的”)代码以促进学习过程?
我正在通过使用代码的工作示例取得进展;但是,有些代码包含许多模块和“测试用例”(如齿轮生成器),这些代码并不总是被使用或引用。这些是很棒的实用程序,但是在试图简化文件以仅执行可能的一小部分(通常通过注释掉我认为未使用的代码行)时,(对我而言)变得非常不可预测。查看“AST Dump”对一些人有所帮助,但我希望有一种更实用的方法来仅隔离基本的基本代码。
是否有一种有效的方法来发现 OpenSCAD 中什么是无关的(“死的”或“未使用的”)代码以促进学习过程?
我正在通过使用代码的工作示例取得进展;但是,有些代码包含许多模块和“测试用例”(如齿轮生成器),这些代码并不总是被使用或引用。这些是很棒的实用程序,但是在试图简化文件以仅执行可能的一小部分(通常通过注释掉我认为未使用的代码行)时,(对我而言)变得非常不可预测。查看“AST Dump”对一些人有所帮助,但我希望有一种更实用的方法来仅隔离基本的基本代码。
我编写了编译器和优化器,以及用于光栅操作的优化器。我很想为您提供一个漂亮的解决方案,但我不知道一个。
如果我真的想解决这个问题,我会从这种方法开始:
首先,识别 OpenSCAD 代码中的每个标记和表达式。为每个分配一个唯一标识符,并保留一位存储,最初为零,稍后将使用。
在几何数据库级别,使用生成它的源代码中的标识符标记每个几何元素。交点被标记为操作数和交集运算符。与联合和其他操作相同。
然后将 OpenSCAD 表单渲染为某种表示,可能是体素,也可能是 STL。体素有分辨率限制,但本质上是最简单的形式。STL 可能需要优化过程来查找冗余边——尽管这可能已经是 STL 生成过程的一部分。
现在,逐个体素或逐个三角形地检查标记的表示体素。对于与该体素或三角形关联的每个标识符,将每个标记和表达式的保留位设置为“一”。
最后,检查每个源标记和表达式上的位。如果该位为零,则该特定元素对结果没有任何贡献。如果该位为 1,则结果中需要该位。
这过于简单,因为一个源元素可以多次使用。有些可能有助于输出,有些可能不会。应该使用源的完全扩展版本,我们必须发明符号来报告使用了实例 1 和 3 但没有使用实例 2。我敢肯定还有其他过度简化的地方,阅读本文的人会立即意识到。
不过,我认为这将是通往您想要的 OpenSCAD 优化器的途径。
同时,OpenSCAD 提供了一些前缀字符。其中一个,可能是“*”,从生成的几何图形中删除子树,而不会弄乱解析。我经常使用该标记来确定是否使用了代码以及它的贡献。