Mesh Scripting/zh-cn: Difference between revisions
(Updating to match new version of source page) |
(Updating to match new version of source page) |
||
Line 44: | Line 44: | ||
planarMesh = [ |
planarMesh = [ |
||
# triangle 1 |
# triangle 1 |
||
[-0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],[-0.5000,0.5000,0.0000], |
[-0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000], [-0.5000, 0.5000, 0.0000], |
||
#triangle 2 |
#triangle 2 |
||
[-0.5000,-0.5000,0.0000],[0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000], |
[-0.5000, -0.5000, 0.0000], [0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000], |
||
] |
] |
||
planarMeshObject = Mesh.Mesh(planarMesh) |
planarMeshObject = Mesh.Mesh(planarMesh) |
||
Line 52: | Line 52: | ||
}} |
}} |
||
⚫ | |||
网格内核会通过对重合点与边进行排序来小心地创建一个正确的拓扑数据结构。 |
网格内核会通过对重合点与边进行排序来小心地创建一个正确的拓扑数据结构。 |
||
⚫ | |||
随后,您将看到如何测试与检验网格数据。 |
随后,您将看到如何测试与检验网格数据。 |
||
[[#top|top]] |
|||
<div class="mw-translate-fuzzy"> |
<div class="mw-translate-fuzzy"> |
||
Line 61: | Line 65: | ||
</div> |
</div> |
||
To create regular geometries you can use the Python script BuildRegularGeoms.py. |
To create regular geometries you can use the Python script {{FileName|BuildRegularGeoms.py}}. |
||
{{Code|code= |
{{Code|code= |
||
Line 67: | Line 71: | ||
}} |
}} |
||
⚫ | |||
此脚本提供了用来定义简单旋转体(如球体、椭球、圆柱体、圆环与圆柱体)的方法。也可用它来创建简单的立方体。例如,为了创建一个圆环可以这样做: |
此脚本提供了用来定义简单旋转体(如球体、椭球、圆柱体、圆环与圆柱体)的方法。也可用它来创建简单的立方体。例如,为了创建一个圆环可以这样做: |
||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
Line 74: | Line 80: | ||
}} |
}} |
||
⚫ | |||
前两个参数定义了圆环的半径,而第三个参数则是针对创建多少个三角形而设置的子采样因子。第三个参数的值越大,则物体表面就越平滑且细节愈丰富细腻。网格类提供了一组以建模为目的的布尔函数,其中有对两个网格对象进行并、交、差的操作。 |
前两个参数定义了圆环的半径,而第三个参数则是针对创建多少个三角形而设置的子采样因子。第三个参数的值越大,则物体表面就越平滑且细节愈丰富细腻。网格类提供了一组以建模为目的的布尔函数,其中有对两个网格对象进行并、交、差的操作。 |
||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
Line 92: | Line 100: | ||
{{Code|code= |
{{Code|code= |
||
import Mesh, BuildRegularGeoms |
import Mesh, BuildRegularGeoms |
||
sphere = Mesh.Mesh( |
sphere = Mesh.Mesh(BuildRegularGeoms.Sphere(5.0, 50)) |
||
cylinder = Mesh.Mesh( |
cylinder = Mesh.Mesh(BuildRegularGeoms.Cylinder(2.0, 10.0, True, 1.0, 50)) |
||
diff = sphere |
diff = sphere |
||
diff = diff.difference(cylinder) |
diff = diff.difference(cylinder) |
||
d = FreeCAD.newDocument() |
d = FreeCAD.newDocument() |
||
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff |
d.addObject("Mesh::Feature", "Diff_Sphere_Cylinder").Mesh = diff |
||
d.recompute() |
d.recompute() |
||
}} |
}} |
||
[[#top|top]] |
|||
⚫ | |||
=== 测试与检验 === |
|||
⚫ | |||
⚫ | |||
=== 编写您自己的算法 === |
|||
⚫ | |||
<div class="mw-translate-fuzzy"> |
<div class="mw-translate-fuzzy"> |
||
Line 120: | Line 122: | ||
}} |
}} |
||
[[#top|top]] |
|||
⚫ | |||
=== 与Gui有关的内容 === |
|||
⚫ | |||
<div class="mw-translate-fuzzy"> |
<div class="mw-translate-fuzzy"> |
||
Line 136: | Line 136: | ||
参见[[Mesh_API|Mesh API]] |
参见[[Mesh_API|Mesh API]] |
||
[[#top|top]] |
|||
{{Docnav |
{{Docnav |
Revision as of 08:46, 28 May 2020
简介
首先,导入网格模块是必不可少的:
First of all you have to import the Mesh module:
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来创建规则的几何图形。
To create regular geometries you can use the Python script 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)
七零八碎的小东东
这里还有一个与网格有关的脚本扩展源:即网格模块的单元测试脚本(尽管挺难使的)。 在此单元测试中,将调用所有的方法并调整所有的属性,以确保它们的正确性。 所以,如果您有充足的冒险精神,就可以去看一看单元测试模块。
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 Unit Test module.
参见Mesh API
- Miscellaneous: Import mesh, Export mesh, Create mesh from shape, Regular solid, Unwrap Mesh, Unwrap Face
- Modifying: Harmonize normals, Flip normals, Fill holes, Close hole, Add triangle, Remove components, Remove components by hand, Smooth, Refinement, Decimation, Scale
- Boolean: Union, Intersection, Difference
- Cutting: Cut mesh, Trim mesh, Trim mesh with a plane, Create section from mesh and plane, Cross-sections
- Components and segments: Merge, Split by components, Create mesh segments, Create mesh segments from best-fit surfaces
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub