用python 开发FreeCad 入门

python 编程是 freecad 强大功能之一。不用编译freecad,只要安装好freecad 就可以。我学习了https://wiki.freecadweb.org/Python_scripting_tutorial 立马就感觉自己掌握了python 开发freecad,特整理此文。所有对freecad 的操作都可以用python 实现。Macro 中还有一个记录操作的工具,保存到文件中,下次调用就可以重复操作,当然你可编辑让他完成更复杂的操作。

准备工作:

启动freecad。

在开始python编程前,需要设置界面:

Edit → Preferences → General → Output window 勾选:

Redirect internal Python output to report view.

Redirect internal Python errors to report view.

然后菜单: View → Panels   勾选 Report view.

写python代码

有2种方式写python 代码:

View → Panels → Python console

Macro → Macros...

下面是第一种方式

开始试一试代码

doc = FreeCAD.newDocument()

回车,其效果就是新建文档,菜单:file->New, 或者工具条 的新建,或者按键 Ctrl + N

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

什么都没发生。 为什么? 因为FreeCAD是为大局而生的。 有一天,它将处理数百个复杂的对象,它们彼此依赖。 在某处进行小的更改可能会产生很大的影响,可能需要很长时间。 因此,几乎没有命令会自动更新场景。 必须手动执行。话虽这么说,在这里还是可以看到:

doc.recompute()

这样,在图形界面可以看到了。

box.Height

显示高度

box.Height=5

更改高度为5

可以看到图形变了。

矢量和位置

体验下矢量和他的运算

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

然后看看位置:

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

App and Gui

FreeCAD的设计使其可以在没有用户界面的情况下用作命令行应用程序。 因此,FreeCAD中的几乎每个对象都由两部分组成:一个对象(其“几何”组件)和一个ViewObject(其“可视”组件)。 在命令行模式下工作时,存在几何图形部分,但可视部分被禁用。

为了说明这个概念,让我们看一下我们的多维数据集对象。 多维数据集的几何属性(例如其尺寸,位置等)存储在对象中。 而其视觉属性(例如其颜色,线条粗细等)存储在ViewObject中。 这对应于“属性”编辑器中的“数据 Data”和“视图View”选项卡。 对象的视图对象的访问方式如下:

vo = box.ViewObject

现在可以改变View 的属性:

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

模块 Module

FreeCAD的真正强大在于模块。 FreeCAD基本应用程序只是一个空容器。 没有它的模块,它只能执行创建新的空文档的工作。 每个模块不仅向界面添加了新的工作台,而且还增加了新的Python命令和新的对象类型。几种不同甚至完全不兼容的对象类型可以共存于同一文档中。 这里介绍FreeCAD中最重要的模块:零件,网格,草绘器和工程图。

“草绘器”和“草稿”都使用“零件”模块来创建和处理其几何图形。 而网格是完全独立的,并处理自己的对象。 下文提供了更多信息。

可以像这样检查当前文档的所有可用基础对象类型:

doc.supportedTypes()

模块并不自动导入python 控制台,需要的时候,你要自己导入,这样避免启动太慢。比如导入Part

import Part

导入后,可以

Part. 就有很多功能提示。这里P是大写。

网格 Mesh

网格是一种非常简单的3D对象,例如Sketchup,Blender和3D Studio Max都使用网格。它们由3个元素组成:点(也称为顶点),线(也称为边缘)和面。在许多应用程序中(包括FreeCAD),面只能有3个顶点。当然,可以由多个共面三角形组成的更大的面。

网格很简单,正因为简单,在一个文档中很容易拥有数百万个网格。在FreeCAD中,用得不多,大多数情况下都是从其他应用程序以网格格式(.stl,.obj)导入对象。

网格对象和FreeCAD对象是不同的东西。可以将FreeCAD对象看作是Mesh对象的容器(对于Part对象也是如此)。为了将网格对象添加到FreeCAD中,必须首先创建一个FreeCAD对象和一个Mesh对象,然后将Mesh对象添加到FreeCAD对象中:

import Mesh
mymesh = Mesh.createSphere()
mymesh.Facets
mymesh.Points
 
meshobj = doc.addObject("Mesh::Feature", "MyMesh")
meshobj.Mesh = mymesh
doc.recompute()

这段代码的解说是:导入Mesh,建立一个Mesh(mymesh) ,查看面和点, doc 中添加mesh 对象,赋值mymesh, 显示计算。

零件 Part

零件模块是整个FreeCAD中最主要的模块。 它允许您创建和操作BRep对象。 BRep代表“边界表示”。与网格不同,BRep对象可以具有从平面到非常复杂的NURBS曲面的多种组件。

零件模块基于强大的OpenCasCade库,该库允许对这些对象执行各种复杂的操作,例如布尔操作,圆角,放样等。

“零件”模块的工作方式与“网格”模块相同:创建一个FreeCAD对象,一个“零件”对象,然后将“零件”对象添加到FreeCAD对象中:

import Part
myshape = Part.makeSphere(10)
myshape.Volume
myshape.Area

shapeobj = doc.addObject("Part::Feature", "MyShape")
shapeobj.Shape = myshape
doc.recompute()

其实后面代码也可简化为:

 Part.show(myshape)

网格也一样。

草图 Draft

FreeCAD有更多的模块,例如Sketcher和Draft,它们也可以创建零件对象。 这些模块为创建的对象添加了附加参数,甚至实现了一种全新的方式来处理其中的零件几何图形。 上面的box例子是参数对象的一个示例。 定义box所需要做的只是指定参数高度,宽度和长度。 基于这些,对象将自动计算其零件形状。

Draft 模块添加了诸如线和圆之类的2D参数化对象类型(全部为零件对象),并且还提供了一些通用功能,这些功能适用于Draft 对象,而且适用于任何Part对象。 执行以下操作练练手:

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

界面 Interface

FreeCAD用户界面由功能强大的图形界面系统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知道Order是从FreeCAD应用程序内部发出的。 可以操纵FreeCAD界面的任何部分。

Qt是一个非常强大的界面系统,可执行非常复杂的事情。 它还具有一些易于使用的工具,例如Qt Designer,可以使用该工具以图形方式设计对话框,然后使用几行Python代码将其添加到FreeCAD界面中。

宏 Macros

现在,已经对基础知识有了很好的了解,我们将在哪里保留Python脚本,以及如何在FreeCAD中启动它们? 有一种简单的机制称为宏。 宏是可以添加到工具栏并通过单击鼠标启动的Python脚本。 FreeCAD为您提供了一个简单的文本编辑器(宏→宏...→创建),您可以在其中编写或粘贴脚本。 脚本完成后,使用工具→自定义...→宏为其定义按钮,该按钮可以添加到工具栏。

现在,可以进行更深入的FreeCAD脚本编写了。 因此,请访问高级用户中心

更多内容

学完了,开始看https://wiki.freecadweb.org/Power_users_hub 这个像是目录或链接分支说明。

接口个性化,就是改变toolbar 和快捷键:https://wiki.freecadweb.org/Interface_Customization

Tools->Customize

Macros  (宏)

https://wiki.freecadweb.org/Macros

所有操作都可以用python 命令完成,一系列操作可以记录为python 文件,以后用一个宏再做同样的工作。

https://wiki.freecadweb.org/Macros_recipes

自动安装宏:

addon manager: Tools → Addon manager 

手动安装:

menu:Macro → Macros

create 按钮,给个名字,复制python 代码,save 保存, 然后再打开 选择你的宏,Excute

新加宏到工具条,tool->ccustomize, 选择 Macro 

https://wiki.freecadweb.org/Customize_Toolbars

安装workbenches

https://wiki.freecadweb.org/Installing_more_workbenches

Talk:Developer hub

https://wiki.freecadweb.org/Developer_hub

介绍到此。

猜你喜欢

转载自blog.csdn.net/leon_zeng0/article/details/114243027