FreeCAD学习笔记——Python scripting tutorial

Python scripting tutorial
1. Object和ViewObject
  • FreeCAD从一开始就作为命令行应用程序工作,没有用户界面。结`几乎所有东西都被分为“几何”组件和“可视”组件。在命令行模式下工作时,几何体部分存在,但所有可视部分都被禁用。因此,FreeCAD中的几乎任何对象都由两部分组成,一个Object和一个ViewObject。
  • 为了解释这个概念,以立方体为例。立方体的几何属性,比如他的尺寸、位置等都存储在object中。而它的视觉属性,比如颜色、线条粗细都存在ViewObject中。它们分别对应属性窗口中的"Data" and “View” tabs。
    在这里插入图片描述
  • FreeCAD在开启时,python控制台已经加载了2个基本模块:FreeCAD和FreeCADGui,也分别叫做App和Gui。这两个模块包含用于处理文档及其对象的各种通用功能。例如,FreeCAD和FreeCADGui都包含ActiveDocument属性,返回当前打开的文档。FreeCAD.ActiveDocument和FreeCADGui.ActiveDocument不是同一个对象。它们是FreeCAD文档的两个组件,它们包含不同的属性和方法(通过实验发现,它们的返回值不同)。例如,FreeCADGui.ActiveDocument包含ActiveView,它是当前打开的3D视图。
    在这里插入图片描述
2. Module
  • FreeCAD基础应用程序或多或少是一个空容器。没有它的Module,它只能创建新的空文档。它们中的每一个不仅为界面添加了新的工作台,还添加了新的python命令新的对象类型。因此,几个不同甚至完全不兼容的对象类型可以共存于同一文档中。
  • 不同的FreeCAD模块虽然将其对象类型添加到FreeCAD,但不会自动加载到python控制台中。这是为了避免启动速度非常慢,模块仅在您需要时加载。
import Part
Part.Cylinder
  • FreeCAD的Module包括:核心模块 (FreeCAD, FreeCADGui)、工作台模块(Part, Mesh, Sketcher)、3d 场景模块(pivy) 和接口模块(pyside)。
3. Mesh
  • Mesh是一种非常简单的3D对象,它在Sketchup,Blender或3D studio Max都有使用,包括点(顶点)、线(边)、面。参考链接:Polygon mesh
  • 网格很简单,对于许多应用程序来说,它变成了一个优势,因为它们非常简单,您可以在一个文档中轻松拥有数百万个网格。在FreeCAD中,它们的使用较少,但可以从其他应用程序导入网格格式(.stl,.obj)的对象。
  • Mesh对象和FreeCAD对象是不同的东西。可以将FreeCAD对象视为Mesh对象的容器。因此,为了向FreeCAD添加网格对象,我们必须首先创建一个FreeCAD对象和一个Mesh对象,然后将Mesh对象添加到FreeCAD对象:
import Mesh
mymesh = Mesh.createSphere()
mymesh
mymesh.Facets
mymesh.Points
 
meshobj = doc.addObject("Mesh::Feature","MyMesh")
meshobj.Mesh = mymesh
doc.recompute()

在这里插入图片描述
PS: 通过这种方式创建的对象,具有Mesh属性,能通过meshobj.Mesh打印出它的点、线、面信息。利用Part工作台创建的box对象,却没有Mesh属性。一种方法查看对象的面片数:选择对象导出为*.stl或者 *.obj文件,再导入则会发现对象成了网格对象,具有Mesh属性。
在这里插入图片描述
参考链接:更多Mesh 脚本——Mesh Scripting

4. Part
  • Part模块允许创建和操作 BRep(边界表示)对象。BRep对象与Mesh对象不同,这种对象可以具有各种各样的组件。
  • Part模块基于强大的OpenCasCade库,允许在这些对象上轻松执行各种复杂操作,例如布尔操作,倒圆角等。
  • 与Mesh一样,为了向FreeCAD添加网格对象,我们必须首先创建一个FreeCAD对象和一个Part对象,然后将Part对象添加到FreeCAD对象:
import Part
myshape = Part.makeSphere(10)
myshape.
myshape.Volume
myshape.Area

shapeobj = doc.addObject("Part::Feature","MyShape")
shapeobj.Shape = myshape
doc.recompute()
  • Part模块和Mesh模块有一个快捷方式,可以自动创建FreeCAD对象并为其添加形状,可以使用以下命令代替最后三行:
Part.show(myshape)
5. Draft、Interface、宏
  • FreeCAD具有更多模块,例如Sketcher或Draft,它们也可以创建Part对象,但可以为其添加参数,甚至可以采用全新的方式来处理它们中的Part几何体。Draft增加了一些二维参数对象类型(他们都是Part对象),比如线和圆。并且提供一些不仅能在Draft工作台生成的对象上使用,还能在Part对象上使用的通用功能。
  • FreeCAD用户界面由Qt构建,Qt是一个功能强大的图形界面系统,负责绘制和处理关于3D视图的所有控件、菜单、工具栏、按钮。Qt提供了一个名为PySide的模块,它允许python访问和修改Qt接口。
  • Qt Designer工具,通过它可以用图形方式设计对话框,然后在通过几行python代码,将它们添加到FreeCAD界面。
  • 可以通过Tools -> Customize -> Macros,允许讲一个宏添加到工具栏。可以参考Customize Toolbars
  • 工作台的安装目录Mod:Installing more workbenches
  • add-ons repository for FreeCAD:GitHub——FreeCAD/FreeCAD-addons
    参考链接:PySide
Module developer’s guide to FreeCAD source code by Qingfeng Xia http://www.iesensor.com • 2015-09-18 version 0.1 for FreeCAD version 0.16-dev • 2016-09-18 version 0.2 for FreeCAD version 0.17-dev License of this book This ebook is licensed the same as FreeCAD document license CC-BY 3.0 http://creativecommons.org/licenses/by/3.0/Contents 1 FreeCAD overview and architecture 7 1.1 Introduction to FreeCAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Key features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Software architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.1 Key software libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.2 Mixed python and c++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.3 GPL code will not be included into installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 How 3D model are renderred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.1 Selection of 3D visualization libarary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.2 Discussion of 3D rendering library selection on FreeCAD Forum . . . . . . . . . . . . . . . . . . . . . 8 1.5 Roadmap of FreeCAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.1 Keep updated with main components: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.2 C++11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.3 Pyside 2 project for Qt 5.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 Organisation of FreeCAD source code 11 2.1 Build system for FreeCAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.1 Analysis of src/cMake/SMesh.cMake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 List of files and folders in FreeCAD source folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 List of modules in FreeCAD Mod folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4 Learning path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5 Learning OpenInventor/Coin3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5.1 OpenInventor in FreeCAD’s ViewProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5.2 Important classes in OpenInventor/Coin3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5.3 Window System integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.5.4 Pivy: Coin3D ’s Python wrapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3 Base, App and Main module 19 3.1 List of header files in Base folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1.1 Frequently included headers files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.2 Correct way of using Sequencer in try-catch block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.3 String enconding utf8 and conversion into wchar_t QString . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2 Type, BaseClass, PyObjectBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.1 Type system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.2 src/Base/BaseClass.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.3 src/Base/PyObjectBase.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.4 src/Base/Persistence.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.5 GeoFeature: Base class of all geometric document objects . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3 Unit scheme for physial quantity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.3.1 src/Base/Unit.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.3.2 src/Base/Quantity.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4 List of header files in App folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5 Property framewrok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.5.1 Naming of property and PropertyEditor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.5.2 src/App/PropertyStandard.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5.3 PropertyEnumeration, see src/App/Enumeration.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5.4 Geometry related property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5.5 File related property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值