最近发现 FreeCAD 官方在发布 0.19_pre 时已提供 vs2017 x64的LibPack,如今就再来测试一下。python
下载 FreeCADLibs_12.1.2_x64_VC15.7z 官方LibPack以后,解压后能够将vs2017的生成目录与LibPack重合,也能够不重合。不重合的话能够更好地看清楚编译后的 FreeCAD 都会产生哪些文件。git
不重合 LibPack,使用cmake生成vs2017工程项目文件,这里边最主要的是二个变量的设定:FREECAD_LIBPACK_DIR要设置到LibPack解压目录,另外须要将 BUILD_QT5 开启,而后就能够了。github
启动编译成功的 FreeCAD 有点注意事项 (不重合的状况下):测试
qt.conf 的内容举例以下:ui
[Paths]
Prefix=E:/sources/FreeCAD/FreeCAD-vs2017-build/../FreeCADLibs_12.1.2_x64_VC15插件
导入dxf, dwg类型的文件,是在 Draft 模块之下的 Init.py 里边增长的,dxf 由 importDXF.py 负责,dwg 由 importDWG.py 负责。orm
其中 importDWG.py 是采用 ODA 的 TeighaFileConverter.exe 来进行中转的,也就是说若是导入dwg,那么它先用 TeighaFileConverter.exe 将dwg转换成为 dxf,而后将dxf格式的文件导入;导出也是如此,先转换成为dxf文件,再由 TeighaFileConverter.exe 将dxf转换成为dwg。对象
第一次看到这样的转换思路,在缺乏稳定可靠的dwg导入导出库时,这样的思路感受不错。文档
导入 dxf 格式,在 importDXF.py 内是这样处理,首先从 user.cfg 读取设置,若是 BaseApp/Preferences/Mod/Draft/dxfUseLegacyImporter 的设置为True,则启用 python 语言的库进行导入,这个库没有的话,会从github上下载。而后还有一个配置项,是否每次都去尝试下载最新的。下载的4个文件(dxfLibrary.py, ...) 会放在 Macro 目录或者是 UserAppData。qt
默认状况第一次启动时,user.cfg 内是没有设置 BaseApp/Preferences/Mod/Draft/dxfUseLegacyImporter 的,则取默认值为False,这时就采用 Import 模块的 readDXF() 来执行dxf文件的导入,这是C++写成的。
dxf格式的描述,网上有一大堆这方面的文章,AutoDesk也有帮助文档阐述了dxf格式。文本形式的比较友好,它老是采用一个组码+相关值的方式,并且组码与相关值都各自占一行。
不一样的组码表明不一样的类型,好比 0 SECTION 表示段的开始, 0 ENDSEC 表示段结束;而后 0 HEADER表示为HEADER段,图形对象在 ENTITIES 段内。
不少库并不会处理dxf的所有内容,好比 FreeCAD 内带的 dxf.h/dxf.cpp ,就是只读取 ENTITIES 段之下的图元的,其他的信息都丢弃处理。