前置条件
- macOS Sequoia (15.2)
- MacBook Pro 2023-Apple M2 Pro (4能效核、8性能核、32GB内存、2TB磁盘)
- OpenSCAD 2025.02.03 (或更高版本)
- FreeCAD 1.0.0 (或更高版本)
- KiCad 8.0.8 (或更高版本)
- MeshLab 2023.12 (或更高版本)
- Wings 3D 2.4.1 (或更高版本)
问题描述
在文章 KiCad-V8.0.8 制作收音机中周(中频变压器)封装 中,我们讨论了如何借助 OpenSCAD 2024.12.13 创建 KiCAD 需要的器件 3D 模型 的过程。
接下来,由于 PCB 板大小的限制,我们需要对部分电阻进行垂直安装,以节约 PCB 面积。可是 KiCAD 自带的电阻 3D模型 都是水平放置的,没有相关的垂直放置模型。这样就迫使我们必须创建电阻的自定义3D模型。
于是我们通过借助 NopSCADlib 绘制电阻的垂直封装,具体代码如下:
1 2 3 4 |
// 直插电阻 include <NopSCADlib/lib.scad> ax_res(res1_2, 20000, 1, inch(0.2)); |
渲染效果如下图:
问题现象
当我们使用 FreeCAD 导入这个模型的时候,会发生如下报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
23:07:20 opening /var/folders/z8/_cvsdvbd4x51vm4szw5xkw0w0000gn/T/fc-33837-764042-000048.dxf... 23:07:20 drawing 1 polylines... 23:07:20 skipping texts... 23:07:20 skipping dimensions... 23:07:20 skipping points... 23:07:20 skipping leaders... 23:07:20 skipping hatches... 23:07:20 skipping *blocks... 23:07:20 done processing 23:07:20 successfully imported /var/folders/z8/_cvsdvbd4x51vm4szw5xkw0w0000gn/T/fc-33837-764042-000048.dxf 23:07:20 <Exception> makeOffset2D: offset result has no wires. 23:07:20 Offset2D001: makeOffset2D: offset result has no wires. 23:07:20 <Exception> makeOffset2D: offset result has no wires. 23:07:20 Recompute failed : Offset2D001 23:07:20 pyException: Traceback (most recent call last): File "<string>", line 2, in <module> File "/Applications/FreeCAD.app/Contents/Resources/lib/python3.11/site-packages/freecad/module_io.py", line 16, in OpenInsertObject getattr(importerModule, importMethod)(objectPath, *importArgs, **importKwargs) File "/Applications/FreeCAD.app/Contents/Resources/Mod/OpenSCAD/importCSG.py", line 120, in open processcsg(tmpfile) File "/Applications/FreeCAD.app/Contents/Resources/Mod/OpenSCAD/importCSG.py", line 178, in processcsg result = parser.parse(f.read()) ^^^^^^^^^^^^^^^^^^^^^^ File "/Applications/FreeCAD.app/Contents/Resources/lib/python3.11/site-packages/ply/yacc.py", line 333, in parse return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Applications/FreeCAD.app/Contents/Resources/lib/python3.11/site-packages/ply/yacc.py", line 1120, in parseopt_notrack p.callable(pslice) File "/Applications/FreeCAD.app/Contents/Resources/Mod/OpenSCAD/importCSG.py", line 457, in p_offset_action if subobj.Shape.Volume == 0 : ^^^^^^^^^^^^^^^^^^^ <class 'RuntimeError'>: shape is invalid |