1、FreeCAD概述与架构

FreeCAD介绍

        FreeCAD的诞生:2002年10月29日,由Jürgen Riegel上传了版本0.0.1的初始上传。FreeCAD的维基百科页面显示,FreeCAD基本上是由不同强大的库组成的集合,其中最重要的是openCascade,用于管理和构建几何体,Coin3D用于显示这些几何体,Qt用于将这些功能放入一个友好的图形用户界面,Python则提供完整的脚本/宏功能。

关键特性

  • 跨平台:支持Windows、Linux和MacOS X
  • 控制台模式,可通过Python模块导入
  • 参数化建模、脚本和宏支持,类似于商业CAD工具
  • 模块化架构,支持各种插件:CAD、CAM、Robot、Meshing、FEM等
  • 支持多种标准的2D和3D CAD交换文件格式,如STL、STEP等
  • 文件类型*.FCstd - 一个zip文件容器,包含多种不同类型的信息,如几何体、脚本或缩略图图标

软件架构

关键软件库

  • OpenCASCADE作为CAD核心
  • OpenInventor/Coin3D/pivy用于3D场景渲染
  • Qt和'Qt for Python'(又名PySide2)用于GUI
  • Python脚本和封装:PyCXX、swig、boost.python
  • 其他强大的软件库,如Xerces XML、boost

混合Python和C++

  • 在控制台模式下进行Python脚本编写,以及在GUI模式下进行基于Python的宏录制
  • 所有FreeCAD类都从这个BaseClass派生出来,与BaseClassPy连接
  • 在0.17版本之前不广泛使用c++11
  • c++模板没有大量使用,但FeatureT<>使得DocumentObject, ViewProvider在Python中可扩展
  • FreeCAD在GUI之前不绑定到Qt系统,在命令行模式下使用Boost::signal:FreeCADCmd
  • 内部使用std::string(UTF8),使用QString getString(){QString.fromUtf8(s.c_str())}进行转换
  • c++用于大多数耗时任务(线程模型),以避免全局解释器锁(GIL)的瓶颈

3D模型渲染方式

        FreeCAD 3D视图中的几何体由Coin3D库渲染。Coin3D是OpenInventor标准的实现,免除了OpenGL编程的需要。

OpenInventor在FreeCAD的ViewProvider中

        FreeCAD本身提供了一些工具来查看或修改openInventor代码。例如,以下Python代码将显示选定对象的openInventor表示形式:

代码解释器

obj = FreeCAD.ActiveDocument.ActiveObject
viewprovider = obj.ViewObject
print(viewprovider.toString())

Pivy:Coin3D的Python封装

        pivy是Coin3D C++库的Python封装,通过SWIG实现。一个新的SoPyScript节点被添加到直接包含Python脚本中。

总结

        FreeCAD是一个功能强大的开源CAD工具,它基于多种库和框架,如OpenCASCADE、Coin3D、Qt和Python,提供跨平台的支持、参数化建模、脚本和宏功能。其软件架构注重模块化,允许通过插件扩展功能。在3D渲染方面,FreeCAD选择OpenInventor和Coin3D,而不是直接使用OpenCASCADE的渲染功能,主要是基于性能和软件许可的考虑。未来,FreeCAD计划逐步升级其关键组件,如采用C++11、迁移到Qt5和PySide2,以及支持Python3。同时,它也将继续避免GPL代码以保持项目的开源和商业友好性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue 2.x】学习vue之一基础部分

文章目录 Vue 一基础部分第一章1、git两个分支主分支子分支 使用方法方式1&#xff1a;采用命令的方式操作分支方式2&#xff1a;在idea中使用git的分支 向git远程仓库提交时忽略文件使用git时的一些冲突注意事项 2、Vue问题1&#xff1a;什么是Vue&#xff1f;问题2&#xff1…

泰勒创造力达到顶峰?(下)

上文说了一半&#xff0c;回顾看文&#xff1a; https://blog.csdn.net/weixin_41953346/article/details/138336524 继续看下文 “Like I lost my twin /Fuck it if I cant have him,"she sings in “Down Bad". 在《Down Bad》这首歌中&#xff0c;她唱道&#xff…

TiDB系列之:使用TiUP部署TiDB集群最新版本,同时部署TiCDC的详细步骤

TiDB系列之:使用TiUP部署TiDB集群最新版本,同时部署TiCDC的详细步骤 一、部署TiDB集群二、准备环境三、安装 TiUP四、安装TiUP cluster组件五、初始化包含TiCDC的TiDB集群拓扑文件六、检查和修复集群存在的潜在风险七、查看可以安装的tidb版本八、部署 TiDB 集群:九、查看集…

Activiti7 开发快速入门【2024版】

记录开发最核心的部分&#xff0c;理论结合业务实操减少废话&#xff0c;从未接触工作流快速带入开发。假设你是后端的同学学过JAVA和流程图&#xff0c;则可以继续向后看&#xff0c;否则先把基础课程书准备好先翻翻。 为什么要工作流 比起直接使用状态字段&#xff0c;工作…

工业互联网常用开源库

libopen62541 opc-ua开源库 libmodbus modbus开源库 libsocketcan can 开源库 canutils&#xff1a;ubuntu 中socket can 与can通道绑定命令ifconfig -a 查看当前can设备名如can0ip link set down can0ip link set can0 type can bitrate 5000ip link set up can0cansend ca…

【C++之多态的知识】

C学习笔记---018 C之多态的知识1、C多态的简单介绍1.1、多态的分类1.2、多态的构成条件 2、虚函数2.1、虚函数的重写(覆盖) 3、虚函数重写的两个例外3.1、协变&#xff1a;(基类与派生类虚函数返回值类型不同)3.2、析构函数的重写(基类与派生类析构函数的名字不同) 4、两个关键…

redis运维篇下篇

最近在学redis&#xff0c;由于笔者是学运维的&#xff0c;所以推荐学习运维的小伙伴参考&#xff0c;希望对大家有帮助&#xff01; redis运维篇上篇:http://t.csdnimg.cn/MfPud 附加redis多用户管理:http://t.csdnimg.cn/DY3yx 目录 十.redis慢日志 十一.redis的key的有效…

dvwa kali SQL注入

high: 1.txt的来源 1.txt的内容 手动添加&#xff1a; id1&SubmitSubmit 执行&#xff1a; sqlmap -r /root/1.txt -p id --second-url "http://192.168.159.128:20000/vulnerabilities/sqli_blind/" --batch medium&#xff1a; 换链接&#xff0c;换cook…

HDFS存取策略联系

书上关于这部分分了三个点&#xff1a; 1.数据存放 2.数据读取 3.数据复制 但数据存放和数据复制都是数据写操作过程中的&#xff0c;“存放”体现一种思想&#xff0c;“复制”体现过程&#xff0c;整个数据写操作过程如下&#xff1a; 1.分块&#xff1a;当客户端写入一个…

【JS篇之】异常

前言&#xff1a;在代码编写过程中&#xff0c;最常遇到的就是程序异常。其实异常并非坏事&#xff0c;它可以让开发人员及时发现、定位到错误&#xff0c;提醒我们做正确的事情&#xff0c;甚至在某些时候&#xff0c;我们还会手动抛出异常。 1.异常的分类 在JS中&#xff0…

2021 OWASP Top 10-零基础案例学习

文章目录 A01:2021 – 权限控制失效情境 #1: SQL 注入攻击风险风险与后果解决方案情境 #2: 未经授权的访问控制漏洞风险与后果解决方案 A02:2021 – 加密机制失效情境 #1: 自动解密的信用卡卡号与SQL注入情境 #2: 弱SSL/TLS使用与会话劫持情境 #3: 不安全的密码存储与彩虹表攻击…

http实现post请求时本地没问题,线上报413错误、nginx配置免费https、nginx反向代理

MENU 错误原因解决其他方式关于nginx的文章 错误原因 前端发送请求以后后端没有收到请求 而客户端却报了413错误 是请求实体过大的异常 如果请求夹带着文件就可能造成请求实体过大 那这里是什么原因造成的呢 在基础的后端开发中 都会用到nginx反向代理 默认大小为1M 超过1M都会…

LinkedList与链表

文章目录 ArrayList的缺陷链表链表的概念及结构链表的实现 LinkedList的使用什么是LinkedListLinkedList具体使用 ArrayList和LinkedList的区别 ArrayList的缺陷 通过源码知道&#xff0c;ArrayList底层使用数组来存储元素 由于其底层是一段连续空间&#xff0c;当在ArrayList任…

Windows 11 系统安装时如何跳过联网和逃避微软账号登录

问题描述 Windows 11 是从 22H2 版本之后开始强制联网何登录微软账号的。 这就带来两个问题&#xff1a; 1、如果我的电脑没有网络或者网卡驱动有问题&#xff0c;那就无法继续安装系统了。 2、如果我有强怕症&#xff0c;就是不想登录微软账号&#xff0c;害怕个人信息泄露…

SpringEL表达式编译模式SpelCompilerMode详解

https://docs.spring.io/spring-framework/reference/core/expressions.html 在构建SpringEL表达式解析器时候&#xff0c;发现可以传递个SpelCompilerMode参数&#xff0c;这个值不传的话默认是OFF // SpelParserConfiguration config new SpelParserConfiguration(); Spel…

uniApp+Vue3+vite+Element UI或者Element Plus开发学习,使用vite构建管理项目,HBuilderX做为开发者工具

我们通常给小程序或者app开发后台时&#xff0c;不可避免的要用到可视化的数据管理后台&#xff0c;而vue和Element是我们目前比较主流的开发管理后台的主流搭配。所以今天石头哥就带大家来一起学习下vue3和Element plus的开发。 准备工作 1&#xff0c;下载HBuilderX 开发者…

Portworx安装和使用

Portworx安装和使用 Portworx介绍 Portworx是一家美国存储初创公司&#xff0c;它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的Scale out存储栈&#xff0c;其核心架构是共享的、松耦合的、分布式、基于元数据的块存储层(卷、块设备、全局共享卷…

【webrtc】MessageHandler 8: 基于线程的消息处理:处理音频输入输出断开

m98代码,看起来m114 去掉了MessageHandler :音频的录制和播放 都使用了on message,但只是用来通知并处理流的断开的。AAudioRecorder AAudioRecorder 处理流断开 OnErrorCallback :有可能 错误回调是别处来的,是其他线程, 但是这个错误的处理要再自己的线程执行: 音频播…

Go中为什么不建议用锁?

Go语言中是不建议用锁&#xff0c;而是用通道Channel来代替(不要通过共享内存来通信&#xff0c;而通过通信来共享内存)&#xff0c;当然锁也是可以用&#xff0c;锁是防止同一时刻多个goroutine操作同一个资源&#xff1b; GO语言中&#xff0c;要传递某个数据给另一个gorout…

JavaScript原型链深度剖析

目录 前言 一、原型链 1.原型链的主要组成 原型&#xff08;Prototype&#xff09; 构造函数&#xff08;Constructor&#xff09; 实例&#xff08;Instance&#xff09; 2.原型链的工作原理 前言 在JavaScript的世界中&#xff0c;原型链&#xff08;Prototype Chain&…