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爲您提供了一個簡單的文本編輯器(宏 - >宏 - >建立),您能夠在其中編寫或粘貼腳本。完成後,工具 - >自定義 - >宏容許您爲其定義一個按鈕,能夠將其添加到工具欄。

相關文章
相關標籤/搜索