FreeCAD学习笔记——Python scripting tutorial

Python scripting tutorial

1. Object和ViewObject
  • FreeCAD从一开始就作为命令行应用程序工作,没有用户界面。结`几乎所有东西都被分为“几何”组件和“可视”组件。在命令行模式下工作时,几何体部分存在,但所有可视部分都被禁用。因此,FreeCAD中的几乎任何对象都由两部分组成,一个Object和一个ViewObject。
  • 为了解释这个概念,以立方体为例。立方体的几何属性,比如他的尺寸、位置等都存储在object中。而它的视觉属性,比如颜色、线条粗细都存在ViewObject中。它们分别对应属性窗口中的"Data" and “View” tabs。
    FreeCAD学习笔记——Python scripting tutorial_第1张图片
  • FreeCAD在开启时,python控制台已经加载了2个基本模块:FreeCAD和FreeCADGui,也分别叫做App和Gui。这两个模块包含用于处理文档及其对象的各种通用功能。例如,FreeCAD和FreeCADGui都包含ActiveDocument属性,返回当前打开的文档。FreeCAD.ActiveDocument和FreeCADGui.ActiveDocument不是同一个对象。它们是FreeCAD文档的两个组件,它们包含不同的属性和方法(通过实验发现,它们的返回值不同)。例如,FreeCADGui.ActiveDocument包含ActiveView,它是当前打开的3D视图。
    FreeCAD学习笔记——Python scripting tutorial_第2张图片
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()

FreeCAD学习笔记——Python scripting tutorial_第3张图片
PS: 通过这种方式创建的对象,具有Mesh属性,能通过meshobj.Mesh打印出它的点、线、面信息。利用Part工作台创建的box对象,却没有Mesh属性。一种方法查看对象的面片数:选择对象导出为*.stl或者 *.obj文件,再导入则会发现对象成了网格对象,具有Mesh属性。
FreeCAD学习笔记——Python scripting tutorial_第4张图片
参考链接:更多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

你可能感兴趣的:(FreeCAD)