解决OpenSCAD导出的WRL格式文件不正确的问题

前置条件

  • macOS Sequoia (15.2) 
  • MacBook Pro 2023-Apple M2 Pro (4能效核、8性能核、32GB内存、2TB磁盘)
  • OpenSCAD 2025.01.19 (或更高版本)
  • FreeCAD 1.0.0 (或更高版本)
  • KiCad 8.0.8 (或更高版本)

问题描述

在文章 KiCad-V8.0.8 制作收音机中周(中频变压器)封装 中,我们讨论了如何借助 OpenSCAD 2025.01.19 创建 KiCAD 需要的器件 3D 模型 的过程。

接下来,由于 PCB 板大小的限制,我们需要对部分电阻进行垂直安装,以节约 PCB 面积。可是 KiCAD 自带的电阻 3D模型 都是水平放置的,没有相关的垂直放置模型。这样就迫使我们必须创建电阻的自定义3D模型

于是我们通过借助 NopSCADlib 绘制电阻的垂直封装,具体代码如下:

渲染效果如下图:

问题现象

当我们使用 FreeCAD 导入这个模型的时候,会发生如下报错:

具体如下图:

问题定位

我们尝试从 NopSCADlib 库中提取核心代码,观察到底是哪个函数引起的,分离后的代码如下:

经过反复的注释代码,发现这个报错是由于 round 函数引起的,如下:

最终定位到 offset 函数。

问题原因

这个问题的原因是因为 FreeCAD 对于 OpenSCADoffset 命令支持上存在问题导致的。

解决过程

需要注意的是,KiCAD 支持 WRLSTP 两种格式的 3D 模型文件,但是 OpenSCAD 目前版本只支持 WRL 格式的导出。

那么为什么不直接使用 OpenSCAD 导出的 WRL 格式的模型文件呢?

答案就是,导出的模型文件不正确,实际效果如下图:

方案尝试

我们希望达到的效果是,模型显示正常,并且可以保留模型颜色。

  1. OpenSCAD 自身开始入手,是否有办法让 OpenSCAD 直接导出 STP 格式呢?答案是存在的,那就是 PythonSCAD 这个项目支持直接导出 STP 格式。可惜的是,导出的模型 KiCAD 完全无法正常加载。

  2. OpenSCAD 导出其他能保留颜色的3D格式,然后进行模型转换。目前可以支持颜色的格式有 3MFOBJOFFWRL 这几种格式,我们需要进行格式转换成 STP / WRL 格式,另外 KiCAD 要求导出的 STP 格式使用毫米为单位,WRL 格式使用一个 WRL尺寸单位对应 0.1 英寸进行换算。目前测试发现 OpenSCAD 导出 3MFOFF格式的时候是会携带颜色信息的,其他格式都没有颜色信息。

确定方案之后,我们开始进行尝试,首先是通过在线工具进行转换,通过尝试,发现 ImageToStl 网站的转换是非常完美的,通过 3MFOFF 进行格式转换成 STP 格式之后,可以完美的保留颜色,美中不足的是国内访问可能会很慢。

国内的 迪威模型 进行转换的时候,无法正常的保留颜色,如果对于颜色不看重的情况下,是个备选项。

使用  FreeCAD 进行模型转换的时候 1.0.0 版本会直接卡死,weekly build 版本会丢失颜色信息。

也可以使用开源项目 assimp 进行转换,转换后丢失颜色信息:

最终方案

目前尝试的比较好的解决方法如下:

  1. 通过 OpenSCAD 导出 OFF 格式的 3D 模型(目的是保留颜色信息);

  2. 通过 MeshLab 转换成 OBJ 格式的 3D 模型,同样是为了保留颜色信息;

  3. 通过 Wings 3D 转换 OBJ 格式的 3D 模型为 WRL 格式;

    注意: 下图中的 Export scale 中的 0.3937 这个数值的来源, KiCAD 要求 WRL 格式使用英寸作为长度单位,并且要求一个 WRL尺寸单位对应 0.1 英寸进行换算。 而 OpenSCAD 模型的默认单位是毫米,因此此处需要进行单位换算。  0.1 in = 2.54mm,所以缩放比例为 1 / 2.54 = 0.3937

  4. 使用 KiCAD 加载 WRL 格式的模型。

参考连接


发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注