Chapter 15 Python

FreeCAD 中 Python 无处不在。很多的用户图形界面工具,甚至整个工作台都是用 Python 写成的。你不必成为程序员,也能欣赏这是多么美妙、多么强大的事情。就请你自己叩开这扇通往神奇力量的大门吧。

你在图形界面操练各种任务时,FreeCAD 实际上都在执行一行行的 Python 代码。打开 Python 控制台和报告窗口,你就可以看到这些代码,了解到大幕背后在发生着什么。

15.1 打开 Python 控制台和报告窗口

Python 控制台能让你直接输入 Python 命令。报告窗口显示错误和警告信息,这对查找错我原因非常有价值。

Python 控制台和报告窗口可以通过视图菜单打开

图 15.1: Python 控制台和报告窗口可以通过视图菜单打开

例如,如果我们切换到零件工作台,创建一个长方体,我们就在 Python 控制台中看到如下内容。

>>> App.ActiveDocument.addObject("Part::Box","Box")
>>> App.ActiveDocument.ActiveObject.Label = "Cube"
>>> App.ActiveDocument.recompute()
>>> Gui.SendMsgToActiveView("ViewFit")
>>>

我们不用关心 Python 的具体语法,也能确切推测到发生了什么。首先这里加入了一个“Part::Box”对象,接着改变它的标签为“立方体/Cube”,然后重新计算了文档。最后,告诉激活的视图做适应屏幕的缩放。

你可以手工把这些命令输入控制台,结果将是一样的。

把下面的命令敲入控制台,改变 Box 的命名。

App.ActiveDocument.ActiveObject.Label = "MyCube"

随着敲入代码,你会发现控制台会“自动补全”。当你在某个对象后面敲入英文句点,它会提出建议,帮你探索这个对象有什么属性,有什么方法函数可以调用。

App是一个对象。当你敲入它的名字,跟着一个英文句点,自动补全机制会显示出它可用的属性和方法函数

图 15.2: App是一个对象。当你敲入它的名字,跟着一个英文句点,自动补全机制会显示出它可用的属性和方法函数

属性保存关于对象的数据,方法是可以对该对象可以进行的操作。方法函数可能很复杂,用好它需要一些 Python 的知识,那超出了本书的范畴。然而某些对象的属性却很有意思,即使对新手来说也很有用。

例如,在 3D 窗口中可见的对象通常有“形状/Shape”属性。形状本身也有一些属性,没有显示在 GUI 的任何地方。例如“质量中心/CenterOfMass”,就包含了对象质量中心的坐标信息。

在图 15.3 中有一个不规则形状的 body。如果我想加一个孔,在那里能把它吊平,我可以用 Python 控制台找到它的质心,接着把一个圆柱放在那里,然后把它从机体上减除,这样就挖了一个孔。

>>> App.ActiveDocument.Body.Shape.CenterOfMass
Vector (-5.567385239996649, 5.059464335346136, 1.5)
在 Python 中找到不规则形状体的质心很容易

图 15.3: 在 Python 中找到不规则形状体的质心很容易

15.2 能从灯泡模型上得到什么信息?

Body 对象对应于灯泡的玻璃部分。我们通过 Python 控制台找到它的体积。

体积算是另一个不用 Python 就不容易得知的属性。

图 15.4: 体积算是另一个不用 Python 就不容易得知的属性。

App.ActiveDocument.Body.Shape.Volume

返回值124978.7783065776。注意这个值的单位是默认的“微升/microliters”。下面的字符串将把它转换为“升/liters”:

tu = FreeCAD.Units.parseQuantity
tu(str(App.ActiveDocument.Body.Shape.Volume) + 'µl')/tu('l')