Compile FreeCAD on Windows

eryar@163.com

1.Introduction

FreeCAD是一个参数化的三维造型软件,主要用于任意大小的实际模型的设计。参数化的建模方式可以通过修改相关参数从而方便地修改你的设计。FreeCAD是开源软件,并提供了便利地自定义方式,也提供了脚本,从而根据自己的需要去扩展功能。FreeCAD是跨平台(Windows, Mac和Linux),可以读写许多开放的模型文件,如STEP,IGES,STL,SVG,DXF,OBJ,IFC,DAE等。

如果说学习OpenCASCADE可以了解一些几何内核底层的算法,那么学习FreeCAD则可以用来实现一些具体的功能,从而将三维的技术应用到实际的生活中去,创造出有意义的功能。

本文详细说明如何在Windows平台上编译FreeCAD源码。如果你已经可以正常编译OpenCASCADE这种开源库的源码,那么编译FreeCAD还是很简单的。

2.Preparation

编译FreeCAD源码之前,需要做些准备工作:下载源码及所需的第三方库。其中源码可以从github上下载,地址为:https://github.com/FreeCAD

为了方便其源码的编译,FreeCAD将所需要的第三方库打包在一起取名LibPack,方便开发者自己编译。LibPack可以从sourceforge上下载:

https://sourceforge.net/projects/free-cad/files/FreeCAD%20LibPack/

Figure 2.1 Download LibPack of FreeCAD

找到与自己编译器版本一致的LibPack下载。如果想在Visual Studio2008中编译,则下载FreeCADLibs_11.1_x86_VC9.7z。下载好源码和LibPack就万事具备了,我们先来粗略地看下LibPack中都有哪些库:

Figure 2.2 3rd party libraries used in FreeCAD

从include可以看出,几何内核主要使用了oce(OpenCASCADE社区版),脚本使用了Python,显示使用了Inventor,网格库还使用了SMESH,逆向工程的功能使用了pcl,还用到了boost及eigen矩阵计算库,程序界面使用了Qt等。由此可见,FreeCAD中的第三方库的数量比OpenCASCADE中的要多,所以编译成功的关键就是要将这些第三方库配置正确。

还好FreeCAD的开发团队提供了这些第三方库,如果自己去准备这些库也要花不少时间和精力。

3.Compiling

FreeCAD在Windows中编译主要使用CMake,通过CMake生成Visual Studio工程文件。如果直接Configure源码文件夹中的CMakeLists.txt会有如下图所示的错误:

Figure 3.1 Could not find libpack error

根据错误信息,说是没有在指定目录找到libpack,所以自己将FREECAD_LIBPACK_DIR设置到下载的libpack中去之后,就可以Configure成功了,如下图所示:

Figure 3.2 CMake success

Configure成功后,即可使用Generate来生成FreeCAD_trunk.sln工程文件,从而用Visual Studio来打开和编译了。

Figure 3.3 FreeCAD projects in Visual Studio

看着自己编译一个模块,在FreeCAD的功能选择中就多出一个模块,还是很有感觉的。自己动手编译下,经过漫长的等待后得到可以运行的程序也是有些收获。

4.Play

编译成功后,就迫不及待地想测试下很有亮点的功能,如网格设计、逆向工程、机器人等模块。

Figure 4.1 Shape in Wireframe mode

Figure 4.2 Shape Mesh

Figure 4.3 Assembly in FreeCAD

看到Assembly中只有那一个按钮,装配功能基本上不能用。如果有了装配功能,那么FreeCAD的功能就和常见的那些三维软件功能类似了。装配功能中需要用到了三维的约束,像什么面对齐,同轴等,商用软件会用到西门子的约束求解库DCM,DCM相关信息可参考simens官方网站:

https://www.plm.automation.siemens.com/en_us/products/open/d-cubed/

有需要DCM的可直接与他们联系,不过价格也是不便宜的。

Figure 4.4 DCM of SIEMENS

没有了google找点东西还是很费劲,用baidu和bing中文版的都没找到什么有用的东西。用了Bing英语版的,才找到,如下图同样输入关键字dcm3d,百度中出来的东西完全无用:

Figure 4.5 Search result of DCM3d

FreeCAD中机器人功能的视频:http://www.tudou.com/listplay/5zDaAoucSXQ/

Figure 4.6 Robot in FreeCAD

Compile FreeCAD on Windows的更多相关文章

  1. windows 10上源码编译dlib教程 | compile dlib on windows 10

    本文首发于个人博客https://kezunlin.me/post/654a6d04/,欢迎阅读! compile dlib on windows 10 Series Part 1: compile ...

  2. windows 10 上源码编译opengv | compile opengv on windows 10 from source

    本文首发于个人博客https://kezunlin.me/post/51cd9fa0/,欢迎阅读! compile opengv on windows 10 from source Series co ...

  3. Win10 + YOLOv3 环境配置,编译,实现目标检测----How to compile YOLOv3 on Windows

    其他比较好的参考链接: 环境配置: 环境配置的最终图片列表:https://blog.csdn.net/shanglianlm/article/details/80322718 视频讲解YOLOv1: ...

  4. compile FFMPEG under windows

    这个文章应该算是中文版最好的了.但是还有一些需要修正. 特别是winsock2的处理 win10 msys2 vs2015 ffmpeg3.2.2 编译 这个英文版的才是最好的 Building ff ...

  5. windows系统下安装和使用ROS的解决方案 (1 win_ros 2 rosserial_windows)

    具体请参考官网: 1  http://wiki.ros.org/win_ros 2  https://github.com/ros-windows/win_ros 3  http://wiki.ros ...

  6. WIndows下使用Grafana+InfluxDB打造监控系统

     前言 对于一个运维DBA来说,了解数据库的TPS.QPS很有必要(QPS:每秒查询数,即对数据库每秒的DML的操作数:TPS:每秒事物处理,即对数据库每秒DDL操作数),通过了解他们,可以掌握一个实 ...

  7. 使用code::blocks编译windows的dll链接库

    因为机子上没有安装Visual Studio,所以找到了一种通过code::blocks编译dll的方式,踩到的坑是code::blocks默认的compiler是32位的,这样编译出的dll也是32 ...

  8. ubuntu 16.04上源码编译dlib教程 | compile dlib on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/c6ead512/,欢迎阅读! compile dlib on ubuntu 16.04 Series Part 1: compil ...

  9. ubuntu 16.04上源码编译opengv | compile opengv on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/1e5d14ee/,欢迎阅读! compile opengv on ubuntu 16.04 Series compile open ...

随机推荐

  1. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  2. 2017-1-5 天气雨 React 学习笔记

    官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...

  3. Redis百亿级Key存储方案(转)

    1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...

  4. 如何理解javaSript中函数的参数是按值传递

    本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...

  5. Android游戏开发实践(1)之NDK与JNI开发03

    Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...

  6. maven的pom.xml关系依赖书写顺序

    今天遇到了一个情况,以前代码编译没有问题,升级了hbase客户端phoenix驱动,又调整了thrift的关系依赖的位置,放到了这个驱动后面. 如下: 导致了一个thrift接口类编译报错: 检查这个 ...

  7. .NET面试题系列[5] - 垃圾回收:概念与策略

    面试出现频率:经常出现,但通常不会问的十分深入.通常来说,看完我这篇文章就足够应付面试了.面试时主要考察垃圾回收的基本概念,标记-压缩算法,以及对于微软的垃圾回收模板的理解.知道什么时候需要继承IDi ...

  8. Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

    用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...

  9. 高性能的关键:Spring MVC的异步模式

    我承认有些标题党了,不过话说这样其实也没错,关于“异步”处理的文章已经不少,代码例子也能找到很多,但我还是打算发表这篇我写了好长一段时间,却一直没发表的文章,以一个更简单的视角,把异步模式讲清楚. 什 ...

  10. 你还可以再诡异点吗——SQL日志文件不断增长

    前言 今天算是遇到了一个罕见的案例. SQL日志文件不断增长的各种实例不用多说,园子里有很多牛人有过介绍,如果我再阐述这些陈谷子芝麻,想必已会被无数次吐槽. 但这次我碰到的问题确实比较诡异,其解决方式 ...