最近发现 FreeCAD 官方在发布 0.19_pre 时已提供 vs2017 x64的LibPack,现在就再来测试一下。

编译

下载 FreeCADLibs_12.1.2_x64_VC15.7z 官方LibPack之后,解压后可以将vs2017的生成目录与LibPack重合,也可以不重合。不重合的话可以更好地看清楚编译后的 FreeCAD 都会产生哪些文件。

不重合 LibPack,使用cmake生成vs2017工程项目文件,这里边最主要的是二个变量的设定:FREECAD_LIBPACK_DIR要设置到LibPack解压目录,另外需要将 BUILD_QT5 开启,然后就可以了。

运行

启动编译成功的 FreeCAD 有点注意事项 (不重合的情况下):

  • 有可能启用后找不到python的相关文件而启动失败。这个时候建议设置 FC_PYTHONHOME 至 FreeCAD-LibPack 解压后目录的 bin 子文件夹;因为在FreeCAD启动代码里会取 FC_PYTHONHOME 重置 PYTHONHOME 环境变量。
  • 有可能因为找不到 Qt 的platform插件而启动失败。建议向 编译后 FreeCAD_d.exe 所在目录添加 qt.conf 文件,使得Qt知道他的库路径在哪个地方。如果是重合LibPack目录的此项不用设置。

qt.conf 的内容举例如下:

[Paths]
Prefix=E:/sources/FreeCAD/FreeCAD-vs2017-build/../FreeCADLibs_12.1.2_x64_VC15

导入dxf, dwg

导入dxf, dwg类型的文件,是在 Draft 模块之下的 Init.py 里边增加的,dxf 由 importDXF.py 负责,dwg 由 importDWG.py 负责。

其中 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。

默认情况第一次启动时,user.cfg 内是没有设置 BaseApp/Preferences/Mod/Draft/dxfUseLegacyImporter 的,则取默认值为False,这时就采用 Import 模块的 readDXF() 来执行dxf文件的导入,这是C++写成的。

dxf文件的格式

dxf格式的描述,网上有一大堆这方面的文章,AutoDesk也有帮助文档阐述了dxf格式。文本形式的比较友好,它总是采用一个组码+相关值的方式,而且组码与相关值都各自占一行。

不同的组码代表不同的类型,比如 0 SECTION 表示段的开始, 0 ENDSEC 表示段结束;然后 0 HEADER表示为HEADER段,图形对象在 ENTITIES 段内。

很多库并不会处理dxf的全部内容,比如 FreeCAD 内带的 dxf.h/dxf.cpp ,就是只读取 ENTITIES 段之下的图元的,其余的信息都丢弃处理。

简述FreeCAD在vs2017下的编译与dxf导入的更多相关文章

  1. FFmpeg在VS2017下的编译

    今天无意中在gayhub发现个牛逼工程,全VS工程编译FFMPEG库,包括依赖库全是VS生成的,无需Mingw等Linux环境. 简单记录下过程,以防将来重装系统等情况,备忘. https://git ...

  2. CAFFE在win10+VS2017下的安装笔记

    老版的caffe在BVLC的github上已经找不到,如果要想下载老版caffe可以下载微软的caffe版本:https://github.com/Microsoft/caffe 网上的大多安装caf ...

  3. win10 x64 VS2017 PJSIP 视频通话编译流程

    win10 x64 VS2017 PJSIP 视频通话编译流程 1. 下载PJSIP源码 PJSIP源码下载地址:https://www.pjsip.org/ 2. 阅读一遍官方的文档 文档地址:ht ...

  4. vs2017+qt5.x编译32位应用<转>

    原文地址:https://www.cnblogs.com/woniu201/p/10862170.html 概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用ms ...

  5. 【Qt开发】vs2017+qt5.x编译32位应用

    概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用msvc2017_x86的插件,然而qt官网并没有提供,只能使用源码编译生成msvc2017_x86插件,使用n ...

  6. 原创 C++应用程序在Windows下的编译、链接:第一部分 概述

    本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...

  7. 【FFmpeg】Windows下FFmpeg编译

    由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类 ...

  8. 介绍linux下利用编译bash设置root账号共用的权限审计设置

    在日常运维工作中,公司不同人员(一般是运维人员)共用root账号登录linux服务器进行维护管理,在不健全的账户权限审计制度下,一旦出现问题,就很难找出源头,甚是麻烦!在此,介绍下利用编译bash使不 ...

  9. Solaris 10下Qt编译Oracle 10g驱动

    上回书讲到<Oracle 10g在Solaris 10中安装详解>,现在开始用Qt来编译下Oracle 10g驱动吧!这样就可以通过Qt程序联入Oracle数据库了! Oracle的环境变 ...

随机推荐

  1. MySQL数据库基础笔记

    数据库 数据库就是存储和管理数据的仓库,用户可以对数据库中的数据进行增删改查等操作. 数据库的分类 关系型数据库(Oracle.MySQL.SQLite等) 非关系型数据库(Redis.MongoDB ...

  2. 计算几何 val.1

    目录 计算几何 val.1 向量的点积 向量的叉积 一种奇怪的三角剖分求面积 凸包 点绕点旋转 后记 计算几何 val.1 本文并不是入门文章,供有高中数学基础的阅读 主要写一些重要的点和注意事项吧 ...

  3. bootstrap-table 常用总结-树形结构

    关于树形结构,上篇文章如果还是不能理解的话,请看这一篇.把其他的没有用到的功能都去掉,只留最基础的树形结构! 废话不多说,直接上代码!所有的数据都是走的本地,如果大家想改的话可以自己改,但是需要注意的 ...

  4. ServerSocket类的常用方法

    1.accept:侦听并接受此套接字的连接:此方法在连接传入之前一直阻塞. 2.setSoTimeout(timeout)方法的作用时设置超时时间,通过指定超时timeout值启用/禁用超时功能,以m ...

  5. 第一篇:C++之hello world

    1.编辑器:Microsoft Visual C++ 2010,下载安装 2.新建项目 代码: #include <iostream>#include <Windows.h>/ ...

  6. 数据库语言-SQL

    SQL语言的功能概述 DDL语句引导词:Create(建立),Alter(修改),Drop(撤销) DML语句引导词:Insert,Delete,Update,Select DCL语句引导词:Gran ...

  7. (day65、66)Vue基础、指令、实例成员、JS函数this补充、冒泡排序

    目录 一.Vue基础 (一)什么是Vue (二)为什么学习Vue (三)如何使用Vue 二.Vue指令 (一)文本指令 (二)事件指令v-on (三)属性指令v-bind (四)表单指令v-model ...

  8. nginx 反向代理之 proxy_pass

    格式很简单: proxy_pass URL; 其中URL包含:传输协议(http://, https://等).主机名(域名或者IP:PORT).uri. 示例如下: proxy_pass http: ...

  9. 如何完成述职报告或年终总结PPT

    对于我们 打工仔 职场人士来说,年有年度总结,月有月度报告,指不定有些小伙伴还会有周报和日报,不仅枯燥,而且浪费时间,头都要炸了 ,简直太有趣了呢. 所以,如何准确快速的写完述职报告呢? 这是个好问题 ...

  10. JS-正则表达式解析

    正则表达式通常用于输入校验,用法示例为 if (!(/^1[345789]\d{9}$/.test($('.tel').val()))) { $.toast("手机号格式有误", ...