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)
- 神奇的地方:
myshape
具有 Faces, Edges, Vertexes, Solids or Shells等属性,还有cut(减法),common(交叉)或fuse(union)等操作!!!可以查看Topological data scripting(拓扑数据脚本)进行详细了解。
参考链接:Topological data scripting(拓扑数据脚本,里面含有关于Part的脚本信息)
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
,允许讲一个宏添加到工具栏。可以参考。 - 工作台的安装目录Mod:Installing more workbenches
- add-ons repository for FreeCAD:GitHub——FreeCAD/FreeCAD-addons
参考链接:PySide