Mesh Scripting/zh-cn: Difference between revisions

From FreeCAD Documentation
(Created page with "=== 与Gui有关的内容 ===")
(Created page with "=== 七零八碎的小东东 === 这里还有一个与网格有关的脚本扩展源:即网格模块的单元测试脚本(尽管挺难使的)。 在此单元测试中...")
Line 97: Line 97:
=== 与Gui有关的内容 ===
=== 与Gui有关的内容 ===


=== Odds and Ends ===
=== 七零八碎的小东东 ===
这里还有一个与网格有关的脚本扩展源:即网格模块的单元测试脚本(尽管挺难使的)。
An extensive (though hard to use) source of Mesh related scripting are the unit test scripts of the Mesh-Module.
在此单元测试中,将调用所有的方法并调整所有的属性,以确保它们的正确性。
In this unit tests literally all methods are called and all properties/attributes are tweaked.
So if you are bold enough, take a look at the [http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/App/MeshTestsApp.py?view=markup Unit Test module].
所以,如果您有充足的冒险精神,就可以去看一看[http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/App/MeshTestsApp.py?view=markup 单元测试模块]


参见[[Mesh_API|Mesh API]]
参见[[Mesh_API|Mesh API]]

Revision as of 05:21, 10 July 2019

FreeCAD Scripting Basics
Topological data scripting

简介

首先,导入网格模块是必不可少的:

import Mesh

此后,您就可以访问网格模块与网格类了,继而方便地使用FreeCAD C++网格内核中的各种函数。

创建与加载

如果要创建一个空的网格对象,仅需轻松地调用以下标准构造函数:

mesh = Mesh.Mesh()

您也可以利用文件中的数据来创建一个网格对象:

mesh = Mesh.Mesh('D:/temp/Something.stl')

(兼容网格的文件类型均列于。)

或者利用一组三角形(即利用构成三角形的顶点)来创建网格:

planarMesh = [
# triangle 1
[-0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],[-0.5000,0.5000,0.0000],
#triangle 2
[-0.5000,-0.5000,0.0000],[0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],
]
planarMeshObject = Mesh.Mesh(planarMesh)
Mesh.show(planarMeshObject)

网格内核会通过对重合点与边进行排序来小心地创建一个正确的拓扑数据结构。

随后,您将看到如何测试与检验网格数据。

建模

您可以利用Python脚本BuildRegularGeoms.py来创建规则的几何图形。

import BuildRegularGeoms

此脚本提供了用来定义简单旋转体(如球体、椭球、圆柱体、圆环与圆柱体)的方法。也可用它来创建简单的立方体。例如,为了创建一个圆环可以这样做:

t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
m = Mesh.Mesh(t)

前两个参数定义了圆环的半径,而第三个参数则是针对创建多少个三角形而设置的子采样因子。第三个参数的值越大,则物体表面就越平滑且细节愈丰富细腻。网格类提供了一组以建模为目的的布尔函数,其中有对两个网格对象进行并、交、差的操作。

m1, m2              # are the input mesh objects
m3 = Mesh.Mesh(m1)  # create a copy of m1
m3.unite(m2)        # union of m1 and m2, the result is stored in m3
m4 = Mesh.Mesh(m1)
m4.intersect(m2)    # intersection of m1 and m2
m5 = Mesh.Mesh(m1)
m5.difference(m2)   # the difference of m1 and m2
m6 = Mesh.Mesh(m2)
m6.difference(m1)   # the difference of m2 and m1, usually the result is different to m5

最后,这里给出一个计算球体与立方体相交的示例,显示的是在球体上两者的交集。

import Mesh, BuildRegularGeoms
sphere = Mesh.Mesh( BuildRegularGeoms.Sphere(5.0, 50) )
cylinder = Mesh.Mesh( BuildRegularGeoms.Cylinder(2.0, 10.0, True, 1.0, 50) )
diff = sphere
diff = diff.difference(cylinder)
d = FreeCAD.newDocument()
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff
d.recompute()

测试与检验

编写您自己的算法

导出

您甚至可以将网格导出为一个python模块:

m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py")
import SavedMesh
m2 = Mesh.Mesh(SavedMesh.faces)

与Gui有关的内容

七零八碎的小东东

这里还有一个与网格有关的脚本扩展源:即网格模块的单元测试脚本(尽管挺难使的)。 在此单元测试中,将调用所有的方法并调整所有的属性,以确保它们的正确性。 所以,如果您有充足的冒险精神,就可以去看一看单元测试模块

参见Mesh API

FreeCAD Scripting Basics
Topological data scripting