摘要:在控制臺中,您可以逐個編寫命令,這些命令在按下時執行宏可以包含由多行組成的更復雜的腳本,只有在執行宏時才會執行。更好的是,您可以在中設置一個選項,以在控制臺中顯示腳本命令。
Python是一種編程語言,使用起來非常簡單,學習起來非常快。它是開源的,多平臺的,可以多帶帶用于各種各樣的事情,從簡單的shell腳本編程到非常復雜的程序。但其最廣泛的用途之一是作為腳本語言,因為它很容易嵌入到其他應用程序中。這正是它在FreeCAD中的使用方式。從python控制臺或自定義腳本,您可以導航FreeCAD,并使其執行非常復雜的操作,但仍然沒有圖形用戶界面工具。
例如,從python腳本中,您可以:
創建新對象
修改現有對象
修改這些對象的3D表示
修改FreeCAD界面
在FreeCAD中使用python還有幾種不同的方法:
從FreeCAD python解釋器中,您可以在“命令行”界面中發出簡單命令
從宏中,這是一種將缺少的工具快速添加到FreeCAD界面的便捷方式
從外部腳本,可用于編寫更復雜的東西。像整個工作臺一樣。
在本教程中,我們將介紹一些簡單的示例來幫助您入門,但此維基上還有更多關于python腳本的文檔。如果您對python完全不熟悉并希望了解它的工作原理,我們還將對Python進行基本介紹。
編寫python代碼在FreeCAD中編寫python代碼有兩種簡單的方法:
從python控制臺(可從View - > Panels - > Python控制臺菜單獲得)或從宏編輯器(工具 - >宏)。在控制臺中,您可以逐個編寫python命令,這些命令在按下return時執行
宏可以包含由多行組成的更復雜的腳本,只有在執行宏時才會執行。
在本教程中,您將能夠使用這兩種方法,方法是在python控制臺中逐個復制/粘貼每一行,然后在每行后按Return鍵,或者在新的Macro窗口中復制/粘貼整個代碼。
探索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應用程序中非?;镜母拍睢K?個數字(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和GuiFreeCAD從一開始就作為命令行應用程序工作,沒有用戶界面。結果,幾乎所有東西都在“幾何”組件和“可視”組件之間分開。在命令行模式下工作時,幾何體部分存在,但所有可視部分都被禁用。因此,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),我們將在下面討論它們。
現在是時候深入探討重要的工作臺模塊了。
MeshMesh網格是一種非常簡單的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()方法自動創建球體,但您可以通過定義頂點和面來從頭開始創建自定義網格。
閱讀更多關于網格腳本的信息......
PartPart模塊是整個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)。該拓撲數據腳本頁解釋了所有的細節。
閱讀更多關于部分腳本的信息......
DraftFreeCAD具有更多模塊,例如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為您提供了一個簡單的文本編輯器(宏 - >宏 - >創建),您可以在其中編寫或粘貼腳本。完成后,工具 - >自定義 - >宏允許您為其定義一個按鈕,可以將其添加到工具欄。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44951.html
摘要:中的腳本從頭開始構建,完全由腳本控制。因此,可能是目前可用的最深度可定制的工程應用程序之一。但中的腳本編寫是一種快速查看高級用戶通常是熟悉編程的用戶開發的新功能的方法。 FreeCAD中的Python腳本 FreeCAD從頭開始構建,完全由Python腳本控制。FreeCAD的幾乎所有部分,例如界面,場景內容,甚至3D視圖中此內容的表示,都可以從內置的Python解釋器或您自己的腳本中...
摘要:該模塊將對象轉換為字符串,允許將其添加到保存的文件中。返回所有可序列化對象的元組或無。財產類型默認情況下,可以更新屬性。這可以通過函數完成。 除了標注對象類型(如注釋,網格和零件對象)之外,FreeCAD還提供了構建100%python腳本對象(稱為Python功能)的可能性。這些對象的行為與任何其他FreeCAD對象完全相同,并在文件保存/加載時自動保存和恢復。 這些對象使用pyth...
閱讀 3973·2021-10-09 09:43
閱讀 2880·2021-10-08 10:05
閱讀 2740·2021-09-08 10:44
閱讀 889·2019-08-30 15:52
閱讀 2817·2019-08-26 17:01
閱讀 3024·2019-08-26 13:54
閱讀 1657·2019-08-26 10:48
閱讀 815·2019-08-23 14:41