在机械工程工业软件领域有一个库不得不提,就是OpenCASCADE(缩写OCC或OCCT)( https://github.com/Open-Cascade-SAS/OCCT) 这个库在GitHub上的Star数目不高,只有1.8K,但是OpenCASCADE是全球唯一一个相对比较成熟,开源的C++三维CAD内核。三维CAD内核的研发难度是非常高的,比较成熟的商业三维CAD内核有Parasolid和ACIS,分别由工业软件巨头西门子集团和达索集团把持。俄罗斯还有一家C3D提供比较成熟的三维CAD内核商业库。在全世界不需要授权费,免费使用的开源C++三维CAD内核仅OCC一家,别无分号(经评论区分享还有一个Rust库fornjot:https://github.com/hannobraun/fornjot?tab=readme-ov-file )。中国国内,很多中小型CAD/CAM工业软件开发商,都是用的OpenCASCADE作为底层的计算内核,特别是CAD领域,很多号称是自主研发底层内核的公司,其实都是OCC套壳。对于CAM软件来说,OCC基本上只是用来作为一个格式导入和转换器,用的功能比较少。国内真正具有三维几何内核研发能力的公司,我知道的深圳泊松算一个,另外华天可能也算一个。中望的二维CAD是自己做的,三维CAD据说是买了一家美国的比较小的几何内核库代码进行研发。其他很多公司,号称自主研发的三维几何内核底层,要么是买的Parasolid/C3D授权,要么是OCC套壳。OCC的发展要感谢法国人和俄国人,OCC的公司总部位于法国,在俄国也有重要的开发团队。这个库的开发对数学要求极高,法国和俄国是数学强国,有一些能人志士在开发和维护OCC库,至今这个库仍然是在不断更新的。但是俄乌战争之后,因为国际社会对俄国的制裁,OCC的法国和俄国开发团队分道扬镳了,从Github的提交记录来看,几位俄国的开发大佬似乎已经退出了这个项目。后来据说华为请来了俄国大佬,想基于OCC研发云CAD内核作为工业云的底座之一,这个东西就是OGG项目,当时在业内颇为高调,还开了发布会。华为,为世界工业软件提供了第二种选择但是2024年之后,除了一些新闻稿和一个没有再更新过的Gitee项目(https://gitee.com/opengeometry/OGG )之外,OGG项目似乎没有看见什么进展。有另一家和华为渊源很深的公司叫泊松软件,这家公司也在研发自主内核,并且不是基于OCC而是全自主开发的。据个人猜测,华为有可能已经放弃了基于OCC的路线,押注到泊松的完全自主内核上。这可能是因为OCC毕竟历史悠久,有一些底层的结构性问题难以解决,只能另起炉灶。比如一些布尔运算错误,至今仍然是OCC难以解决的Bug。另外基于OCC开发商业几何内核库也有一点比较致命,就是因为动了代码,绕不开LGPL的传染性问题,只能以云方案提供SAAS服务,而这很大地限制了其商业化场景。国内基于OCC做的CAD SAAS服务有很多,比较常见的是几家基于OCC做云BIM,云装修设计解决方案的团队,这些公司对OCC都吃的比较透。想基于OCC做机械工程云CAD解决方案的公司也有(仿OnShape),但是没有做的很完善的,毕竟机械工程建模的三维求解非常复杂,OCC的一些顽疾Bug在商业化项目里是比较难解决的。比较有意思的是,很多公司不太愿意提自己的底层用的是OCC。但是判断是不是用的OCC也很简单,去看一眼招聘BP里面有没有提到OCC就行了,因为这个库太小众,不写在BP里根本招不来合适的人。桌面端最有名的基于OCC的三维建模软件就是FreeCAD,这个软件自己比OCC要有名一些,但是同样的,只能作为玩具解决方案,距离成熟的商业CAD软件差很远。至于CAM,基于OCC做的就多了,国内几家做的比较好的CAM软件团队,基本都用到了这个库。但是CAM软件一般是使用基于Mesh的网格计算,而不是OCC/ACIS/Parasolid这样的Brep图形计算,OCC起到的作用基本上是一个三维格式读取和转换器。有些CAM软件内置的有限的CAD功能,可能用到OCC的地方会多一些。不管怎么说,OCC这个库对中国工业软件的贡献是很大的,OCC的开源协议比较友好,是LGPL协议,只要使用dll就没有传染性。很多的中小型CAD/CAM开发团队买不起商业三维几何内核库的授权,只能使用OCC,而且业界用的人越来越多,熟悉OCC的工程师也越来越好招,已经初步形成了一个有限的生态圈子。OCC还有一个比较知名的开源Python Binding库,叫PyOCC(https://github.com/tpaviot/pythonocc-core),这个库结合PyQt,可以非常方便地做一些简单的三维CAD显示软件。OCC没有成熟的开源C#绑定方案,有一个国产商业C# 绑定库叫AnyCAD,目前是在C#绑定库方面最完善的,文档最齐全的,是唯一一个可以提供跨平台C#绑定的方案(连Avalonia都支持)。这个库我研究过一段时间,应该是自己重新实现了渲染管线,没有用OCC原先的渲染管线。这个项目在C#用的比较多的上位机领域打出了自己的一片天地,商业化做的还不错。可以无限制地试用,但是正式授权价格比较昂贵,且技术服务费非常贵。另外C#不适合做高计算量高显示压力的项目。另外几个在工业软件领域常用的比较小众的经典C++项目:CGAL(https://github.com/CGAL/cgal)5.6K Star:CGAL是一个有名的基于Mesh的几何计算库,Mesh计算库的作用就不局限于机械工程工业软件了,在很多领域都有应用。VTK (https://github.com/Kitware/VTK)3K Star:工业软件常用的三维几何显示库,API比较友好,和Qt、OCC之间有现成的接口可以粘合,显示大规模数据、点云都很好用。Clipper2(https://github.com/AngusJohnson/Clipper2)2K Star:一个写的非常好的平面多边形求交/偏置计算库。自己写一些平面多边形求交算法就知道解决一些corner case有多么麻烦,而用这个库你只需要几行代码就可以丝滑求解,而且表现非常稳定。作者还贴心地提供了多语言绑定,简直大大的良心。FCL(https://github.com/flexible-collision-library/fcl)1.6K Star:一个碰撞检测求解库,目前没有更新了,但是做做碰撞检测够用。MeshLab(https://github.com/cnr-isti-vclab/meshlab)5.4K Star:显示、处理Mesh的一个很常用的开源软件。OpenMesh(https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/OpenMesh):同样是一个处理网格的开源库,在网格处理领域用的也挺多。PCL(https://github.com/PointCloudLibrary/pcl)10.7K Star:这是一个很经典的点云处理库,在大规模点云处理中经常应用。Blender(https://github.com/blender/blender)16.4K Star:这个建模软件可能太有名了,不太符合小众的开源项目的定义。Blender是一个完全可以商业化的开源项目,国内基于它做的一些商业解决方案也挺多的。FreeCAD (https://github.com/FreeCAD/FreeCAD) 26.5K Star:有名的开源三维CAD软件,基于OCC+Qt+Coin3D开发,软件架构比较复杂,还提供了Python插件接口。这个项目估计是OCC的最经典下游项目。不太好用,距离SolidWorks这种商业软件差距很大。虽然开源协议是LGPL,但是国内一堆团队无视其传染性拿这个开源代码来直接开发CAD/CAM项目的。LibreCAD (https://github.com/LibreCAD/LibreCAD) 5.3K Star:另一个比较有名的二维CAD开源方案, 基本不更新了。二维CAD相对来说比较好做一些,但是要做成成熟的商业产品也绝非易事,中望能靠着自研的二维CAD上市,可见技术含金量。LibreCAD有名在很多做平面激光切割/点胶的CAM团队是基于这个开发的。此库的协议同样是GPLv2,但是正如我所说,国内对GPL的尊重程度有限。
兰 亭 墨 苑
期货 · 量化 · AI · 终身学习