Freecad的Python脚本

Python是一种编程语言,使用起来很是简单,学习起来很是快。它是开源的,多平台的,能够单独用于各类各样的事情,从简单的shell脚本编程到很是复杂的程序。但其最普遍的用途之一是做为脚本语言,由于它很容易嵌入到其余应用程序中。这正是它在FreeCAD中的使用方式。从python控制台或自定义脚本,您能够导航FreeCAD,并使其执行很是复杂的操做,但仍然没有图形用户界面工具。python

例如,从python脚本中,您能够:shell

  • 建立新对象
  • 修改现有对象
  • 修改这些对象的3D表示
  • 修改FreeCAD界面

在FreeCAD中使用python还有几种不一样的方法:编程

  • 从FreeCAD python解释器中,您能够在“命令行”界面中发出简单命令
  • 从宏中,这是一种将缺乏的工具快速添加到FreeCAD界面的便捷方式
  • 从外部脚本,可用于编写更复杂的东西。像整个工做台同样。

在本教程中,咱们将介绍一些简单的示例来帮助您入门,但此维基上还有更多关于python脚本的文档。若是您对python彻底不熟悉并但愿了解它的工做原理,咱们还将对Python进行基本介绍。编程语言

编写python代码

在FreeCAD中编写python代码有两种简单的方法:编辑器

  • 从python控制台(可从View - > Panels - > Python控制台菜单得到)或从宏编辑器(工具 - >宏)。在控制台中,您能够逐个编写python命令,这些命令在按下return时执行
  • 宏能够包含由多行组成的更复杂的脚本,只有在执行宏时才会执行。

在本教程中,您将可以使用这两种方法,方法是在python控制台中逐个复制/粘贴每一行,而后在每行后按Return键,或者在新的Macro窗口中复制/粘贴整个代码。ide

探索FreeCAD

让咱们从建立一个新的空文档开始:函数

doc = FreeCAD.newDocument()

若是您在FreeCAD python控制台中键入此内容,您会注意到只要您输入“FreeCAD.”,就会弹出一个窗口,容许您快速自动完成剩余的命令。更好的是,自动完成列表中的每一个条目都有一个工具提示,说明它的做用。这使得探索可用功能变得很是容易。在选择“newDocument”以前,请先查看其余可用选项。工具

如今咱们的新文档将被建立。这相似于按工具栏上的“新建文档”按钮。事实上,FreeCAD中的大多数按钮只执行一行或两行python代码。更好的是,您能够在Edit-> Preferences-> General-> Macro中设置一个选项,以“在python控制台中显示脚本命令”。这将在控制台中打印按下按钮时执行的全部python代码。学习如何在python中重现动做很是有用。学习

如今让咱们回到咱们的文档。让咱们看看咱们能用它作些什么:测试

doc.
  • 以大写字母开头的名称是属性,它们包含值;
  • 而以小写字母开头的名称是函数(也称为方法),它们“作某事”。
  • 如下划线开头的名称一般用于模块的内部工做,您不该该关心它们。

让咱们使用其中一种方法将新对象添加到咱们的文档中:

box = doc.addObject(“Part :: Box”,“myBox”)

什么都没发生。为何?由于FreeCAD是为大场景而制做的。有一天,它将与数百个复杂的对象一块儿工做,全部这些对象都是彼此依赖的。在某个地方进行小的改动可能会产生很大的影响,您可能须要从新计算整个文档,这可能须要很长时间...所以,几乎没有命令会自动更新场景。你必须手动完成:

doc.recompute()

看,如今个人Box出现了!在FreeCAD中添加对象的许多按钮实际上作了两件事:添加对象,而后从新计算。若是您打开上面的“show script commands in python console”选项,如今尝试使用GUI按钮添加一个球体,您将看到两行python代码一个接一个地执行。

你会问“Part :: Box”怎么样?我怎么知道能够添加其余类型的对象?一切都在这里:

doc.supportedTypes()

如今让咱们探讨一下咱们方框的内容:

box.

你会当即看到一些很是有趣的东西,好比:

box.Height

这将打印咱们盒子的当前高度。如今让咱们试着改变它:

box.Height = 5

若是您使用鼠标选择框,您会在属性面板中看到“数据”选项卡中的“高度”属性。出如今那里的FreeCAD对象的全部属性(以及“视图”选项卡中的更多关于后面的内容)也能够经过python直接访问它们的名称,就像咱们使用“Height”属性同样。尝试更改该框的其余尺寸。

向量和定位

向量是任何3D应用程序中很是基本的概念。它是3个数字(x,y和z)的列表,描述了3D空间中的点或位置。使用向量能够完成不少事情,例如加法,减法,投影等等。在FreeCAD中,矢量的工做方式以下:

myvec = FreeCAD.Vector(2,0,0)
myvec
myvec.x
myvec.y
othervec = FreeCAD.Vector(0,3,0)
sumvec = myvec.add(othervec)

FreeCAD对象的另外一个常见功能是它们的定位。每一个对象都有一个Placement属性,它包含对象的位置(Base)和方向(Rotation)。它很容易操做,例如移动咱们的对象:

box.Placement
box.Placement.Base
box.Placement.Base = sumvec
 
otherpla = FreeCAD.Placement()
box.Placement = otherpla

如今,在咱们进一步研究以前,你必须先了解一些重要的概念。

App和Gui

FreeCAD从一开始就做为命令行应用程序工做,没有用户界面。结果,几乎全部东西都在“几何”组件和“可视”组件之间分开。在命令行模式下工做时,几何体部分存在,但全部可视部分都被禁用。所以,FreeCAD中的几乎任何对象都由两部分组成,一个Object和一个ViewObject。

为了说明这个概念,请参阅咱们的立方体对象,立方体的几何属性,例如它的尺寸,位置等......都存储在对象中,同时它的视觉属性,如颜色,线条粗细等等。 。存储在viewobject中。这对应于属性窗口中的“数据”和“视图”选项卡。访问对象的视图对象,以下所示:

vo = box.ViewObject

如今您还能够更改“视图”选项卡的属性:

vo.Transparency = 80
vo.hide()
vo.show()

当您启动FreeCAD时,python控制台已经加载了2个基本模块:FreeCAD和FreeCADGui(也能够经过它们的快捷方式App和Gui访问)。它们包含用于处理文档及其对象的各类通用功能。为了说明咱们的概念,请参阅FreeCAD和FreeCADGui都包含ActiveDocument属性,该属性是当前打开的文档。FreeCAD.ActiveDocument和FreeCADGui.ActiveDocument不是同一个对象。它们是FreeCAD文档的两个组件,它们包含不一样的属性和方法。例如,FreeCADGui.ActiveDocument包含当前打开的3D视图的ActiveView。

模块

如今,你必定想知道,除了“Part :: Box”以外,我能作什么?FreeCAD基础应用程序或多或少是一个空容器。没有它的模块,它只能建立新的空文档。FreeCAD的真正强大在于其忠可靠的模块。它们都不只为界面添加了新的工做台,还增长了新的python命令和新的对象类型。所以,几个不一样甚至彻底不兼容的对象类型能够共存于同一文档中。FreeCAD中最重要的模块,咱们将在本教程中看到,包括Part,Mesh,Sketcher或Draft。

Sketcher和Draft都使用“ Part”模块来建立和处理它们的几何体,这些几何体是BRep,而Mesh是彻底独立的,并处理它本身的对象。更多关于如下内容。

您能够检查当前文档的全部可用基础对象类型,以下所示:

doc.supportedTypes()

不一样的FreeCAD模块虽然将其对象类型添加到FreeCAD,但不会自动加载到python控制台中。这是为了不启动速度很是慢。模块仅在您须要时加载。所以,例如,要探索Part模块中的内容:

import Part
Part.

咱们将在下面详细讨论Part模块。

到目前为止,您对FreeCAD的不一样模块有了更多了解:核心模块(FreeCAD,FreeCADGui)和工做台模块(Part,Mesh,Sketcher)。其余重要的模块是3d场景模块(pivy)和接口模块(pyside),咱们将在下面讨论它们。

如今是时候深刻探讨重要的工做台模块了。

Mesh

Mesh网格是一种很是简单的3D对象,例如由Sketchup,Blender或3D studio Max使用。它们由3个元素组成:点(也称为顶点),线(也称为边)和面。在许多应用程序中,包括FreeCAD,面只能有3个顶点。可是,固然没有什么能阻止你拥有一个由几个共面三角形组成的更大的平面。

网格很简单,这多是一件坏事,但对于许多应用程序(例如上面提到的那些),它变成了一个优点,由于它们很是简单,您能够在一个文档中轻松拥有数百万个。可是,在FreeCAD中,它们的使用较少,而且大部分都是从其余应用程序导入网格格式(.stl,.obj)的对象。在FreeCAD的初期,它被普遍用做主要的测试模块。

网格对象和FreeCAD对象是不一样的东西。您能够将FreeCAD对象视为Mesh对象的容器(咱们将在下面看到,也能够看到Part对象)。所以,为了向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()

这是一个标准示例,它使用createSphere()方法自动建立球体,但您能够经过定义顶点和面来从头开始建立自定义网格。

阅读更多关于网格脚本的信息......

Part

Part模块是整个FreeCAD最强大的模块。它容许建立和操做BRep对象。与网格不一样,这种对象能够具备各类各样的组件。Brep意味着边界表示。也就是说它们由它们的表面定义,这些表面包围并定义内部体积。这些表面能够是各类各样的东西,例如平面或很是复杂的NURBS曲面。他们还带有体量的概念。

Part模块基于强大的OpenCasCade库,容许在这些对象上轻松执行各类复杂操做,例如布尔操做,圆角,放样等...

Part模块的工做方式与Mesh模块相同:建立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对象并为其添加形状,所以您能够跳过上面的3个最后一行:

Part.show(MyShape)

经过探索myshape的内容,您会注意到许多有趣的可用子组件,如Faces,Edges,Vertexes,Solids或Shells,以及各类几何操做,如cut(减法),common(交叉)或fuse(union)。该拓扑数据脚本页解释了全部的细节。

阅读更多关于部分脚本的信息......

Draft

FreeCAD具备更多模块,例如Sketcher或Draft,它们也能够建立Part对象,但能够为其添加参数,甚至能够采用全新的方式来处理它们中的Part几何体。咱们上面的方框示例是参数对象的完美示例。定义框的全部方法是指定几个参数,例如高度,宽度和长度。基于这些,对象将自动计算其零件形状。FreeCAD容许您在python中建立此类对象。

所述模块草案增长了一些二维参数的对象类型(这是全部部分的对象)例如线和圆,而且还提供,不只在草案制对象的工做的一些通用功能,但任何部分对象。要探索可用的内容,只需执行如下操做:

import Draft
Draft.
rec = Draft.makeRectangle(5,2)
mvec = FreeCAD.Vector(4,4,0)
Draft.move(rec,mvec)
Draft.move(box,mvec)

接口

FreeCAD用户界面由Qt构建,Qt是一个功能强大的图形界面系统,负责绘制和处理3D视图周围的全部控件,菜单,工具栏,按钮。Qt提供了一个名为PySide的模块,它容许python访问和修改Qt接口,例如FreeCAD。让咱们尝试摆弄Qt界面并生成一个简单的对话框:

from PySide import QtGui
QtGui.QMessageBox.information(None,"Apollo program","Houston, we have a problem")

看到出现的对话框在其工具栏中有FreeCAD图标,这意味着Qt知道该订单是从FreeCAD应用程序内部发出的。所以,咱们能够轻松地直接操做FreeCAD界面的任何部分。

Qt是一个很是强大的界面系统,它容许你作很复杂的事情,但也有一些很是容易使用的工具,好比Qt Designer,你能够用图形方式设计对话框,而后将它们添加到FreeCAD界面几行蟒蛇。

在这里阅读更多关于PySide的信息......

如今您已经对基础知识有了很好的理解,咱们将在哪里保留咱们的python脚本,以及如何从FreeCAD轻松启动它们?有一个简单的机制,称为宏。宏只是一个python脚本,而后能够添加到工具栏并经过简单的鼠标单击启动。FreeCAD为您提供了一个简单的文本编辑器(宏 - >宏 - >建立),您能够在其中编写或粘贴脚本。完成后,工具 - >自定义 - >宏容许您为其定义一个按钮,能够将其添加到工具栏。

相关文章
相关标签/搜索