Freecad的Python脚本
Python是⼀种编程语⾔,使⽤起来⾮常简单,学习起来⾮常快。它是开源的,多平台的,可以单独⽤于各种各样的事情,从简单的shell脚本编程到⾮常复杂的程序。但其最⼴泛的⽤途之⼀是作为脚本语⾔,因为它很容易嵌⼊到其他应⽤程序中。这正是它在FreeCAD中的使⽤⽅式。从python控制台或⾃定义脚本,您可以导航FreeCAD,并使其执⾏⾮常复杂的操作,但仍然没有图形⽤户界⾯⼯具。
例如,从python脚本中,您可以:
创建新对象
抓buffer是什么意思修改现有对象
修改这些对象的3D表⽰
修改FreeCAD界⾯
在FreeCAD中使⽤python还有⼏种不同的⽅法:
从FreeCAD python解释器中,您可以在“命令⾏”界⾯中发出简单命令
从宏中,这是⼀种将缺少的⼯具快速添加到FreeCAD界⾯的便捷⽅式
从外部脚本,可⽤于编写更复杂的东西。像整个⼯作台⼀样。
在本教程中,我们将介绍⼀些简单的⽰例来帮助您⼊门,但此维基上还有更多关于python脚本的⽂档。如果您对python完全不熟悉并希望了解它的⼯作原理,我们还将对Python进⾏基本介绍。
编写python代码
在FreeCAD中编写python代码有两种简单的⽅法:
从python控制台(可从View - > Panels - > Python控制台菜单获得)或从宏编辑器(⼯具 - >宏)。在控制台中,您可以逐个编写python命令,这些命令在按下return时执⾏
宏可以包含由多⾏组成的更复杂的脚本,只有在执⾏宏时才会执⾏。
在本教程中,您将能够使⽤这两种⽅法,⽅法是在python控制台中逐个复制/粘贴每⼀⾏,然后在每⾏后按Return键,或者在新的Macro 窗⼝中复制/粘贴整个代码。
探索FreeCAD
让我们从创建⼀个新的空⽂档开始:
doc = wDocument()
如果您在FreeCAD python控制台中键⼊此内容,您会注意到只要您输⼊“FreeCAD.”,就会弹出⼀个窗⼝,允许您快速⾃动完成剩余的命令。更好的是,⾃动完成列表中的每个条⽬都有⼀个⼯具提⽰,说明它的作⽤。这使得探索可⽤功能变得⾮常容易。在选
择“newDocument”之前,请先查看其他可⽤选项。
现在我们的新⽂档将被创建。这类似于按⼯具栏上的“新建⽂档”按钮。事实上,FreeCAD中的⼤多数按钮只执⾏⼀⾏或两⾏python代码。更好的是,您可以在Edit-> Preferences-> General-> Macro中设置⼀个选项,以“在python控制台中显⽰脚本命令”。这将在控制台中打印按下按钮时执⾏的所有python代码。学习如何在python中重现动作⾮常有⽤。
现在让我们回到我们的⽂档。让我们看看我们能⽤它做些什么:
doc.
以⼤写字母开头的名称是属性,它们包含值;
⽽以⼩写字母开头的名称是函数(也称为⽅法),它们“做某事”。
以下划线开头的名称通常⽤于模块的内部⼯作,您不应该关⼼它们。
让我们使⽤其中⼀种⽅法将新对象添加到我们的⽂档中:
box = doc.addObject(“Part :: Box”,“myBox”)
什么都没发⽣。为什么?因为FreeCAD是为⼤场景⽽制作的。有⼀天,它将与数百个复杂的对象⼀起⼯作,所有这些对象都是彼此依赖的。在某个地⽅进⾏⼩的改动可能会产⽣很⼤的影响,您可能需要重新计算整个⽂档,这可能需要很长时间...因此,⼏乎没有命令会⾃动更新场景。你必须⼿动完成:
看,现在我的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)
java18
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是完全独⽴的,并处理它⾃⼰的对象。更多关于以下内容。
python入门教程(非常详细)书
您可以检查当前⽂档的所有可⽤基础对象类型,如下所⽰:
c语言编程怎么练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 = ateSphere()
mymesh.
mymesh.Facets
mymesh.Points
meshobj = doc.addObject("Mesh::Feature","MyMesh")
meshobj.Mesh = mymesh
这是⼀个标准⽰例,它使⽤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
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)
常见三角函数值表接⼝
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为您提供了⼀个简单的⽂本编辑器(宏 ->宏 - >创建),您可以在其中编写或粘贴脚本。完成后,⼯具 - >⾃定义 - >宏允许您为其定义⼀个按钮,可以将其添加到⼯具栏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。