Mesh Scripting/ru: Difference between revisions
(Created page with "Прежде всего вы должны импортировать Mesh модуль:") |
No edit summary |
||
(33 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
{{Docnav/ru |
{{Docnav/ru |
||
|[[Topological_data_scripting/ru|Topological data scripting]] |
|||
|[[FreeCAD Scripting Basics/ru|FreeCAD Scripting Basics]] |
|||
|[[Mesh_to_Part/ru|Mesh to Part]] |
|||
|[[Topological data scripting/ru|Topological data scripting]]}} |
|||
}} |
|||
=== Введение === |
|||
{{TOCright}} |
{{TOCright}} |
||
Прежде всего вы должны импортировать Mesh модуль: |
|||
==Введение== |
|||
Чтобы получить доступ к модулю {{incode|Mesh}}, вы должны сначала импортировать его: |
|||
{{Code|code= |
{{Code|code= |
||
import Mesh |
import Mesh |
||
}} |
}} |
||
После этого вы получаете доступ к Mesh модулю и классам Mesh которые сообщаются с с функциями FreeCAD C++ Mesh-Kernel. |
|||
==Создание== |
|||
<div class="mw-translate-fuzzy"> |
|||
=== Создание и Загрузка === |
|||
Чтобы создать |
Чтобы создать пустой объект сетки, просто используйте стандартный конструктор: |
||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 23: | Line 23: | ||
}} |
}} |
||
Вы также можете создать объект из файла |
Вы также можете создать объект из файла: |
||
{{Code|code= |
{{Code|code= |
||
mesh = Mesh.Mesh( |
mesh = Mesh.Mesh("D:/temp/Something.stl") |
||
}} |
}} |
||
Или создайте его из множества треугольников, задав их вершины: |
|||
<div class="mw-translate-fuzzy"> |
|||
Какие файловые форматы вы можете использовать для создания полигиональных объектов написано [[Feature_list#IO|здесь]]. |
|||
</div> |
|||
Или создайте его из множества треугольников, задав их верщины: |
|||
{{Code|code= |
{{Code|code= |
||
triangles = [ |
|||
# 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], |
||
] |
] |
||
meshObject = Mesh.Mesh(triangles) |
|||
Mesh.show( |
Mesh.show(meshObject) |
||
}} |
}} |
||
Ядро Mesh заботится о создании топологического правильной структуры данных, сортируя |
|||
совпадающие точки и края |
совпадающие точки и края. |
||
[[#top|top]] |
|||
Позже вы увидете как можно протестировать и изучить полигиональные(сеточные) данные. |
|||
==Моделирование== |
|||
<div class="mw-translate-fuzzy"> |
|||
=== Моделирование === |
|||
Для создания |
Для создания правильной геометрии вы можете использовать один из методов {{incode|create*()}}. Например, тор можно создать следующим образом: |
||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
m = Mesh.createTorus(8.0, 2.0, 50) |
|||
import BuildRegularGeoms |
|||
Mesh.show(m) |
|||
}} |
}} |
||
Первые два параметра определяют радиусы тороида, а третий параметр - фактор подвыборки, как много треугольников будет создано. Чем выше это значение, тем сглаженней тело. |
|||
Этот сценарий предоставляет методы для определения простых тел вращения, таких как сферы, элипсоиды, цилиндры, тороиды и конусы. И он также обладает методом для создания простого куба. |
|||
Чтобы создать тороид, например, следующим образом: |
|||
Модуль {{incode|Mesh}} также предоставляет три булевых метода: {{incode|union()}}, {{incode|intersection()}} и {{incode|difference()}}: |
|||
{{Code|code= |
|||
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles |
|||
m = Mesh.Mesh(t) |
|||
}} |
|||
Первые два параметра определяют радиусы тороида а третий параметр фактор подвыборки , как много треугольников будет создано. Чем выше это значение тем сглаженней и наоброт чем ниже тем грубее тело. |
|||
Mesh классы предоставляют набор логических функций которые могут быть использовыны в целях моделирования. Они обеспечивают объединение, пересечение и вычитание двух полигиональных объектов. |
|||
{{Code|code= |
{{Code|code= |
||
Line 84: | Line 72: | ||
}} |
}} |
||
Вот пример, который создает трубку, используя метод {{incode|difference()}}: |
|||
Наконец, полный пример, который вычисляет пересечение сферы и цилиндра, пересекающего сферу. |
|||
{{Code|code= |
{{Code|code= |
||
import |
import FreeCAD, Mesh |
||
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36) |
|||
cylB = Mesh.createCylinder(1.0, 12.0, True, 1.0, 36) |
|||
cylB.Placement.Base = (FreeCAD.Vector(-1, 0, 0)) # move cylB to avoid co-planar faces |
|||
diff = sphere |
|||
pipe = cylA |
|||
diff = diff.difference(cylinder) |
|||
pipe = pipe.difference(cylB) |
|||
d = FreeCAD.newDocument() |
|||
pipe.flipNormals() # somehow required |
|||
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff |
|||
doc = FreeCAD.ActiveDocument |
|||
d.recompute() |
|||
obj = d.addObject("Mesh::Feature", "Pipe") |
|||
obj.Mesh = pipe |
|||
doc.recompute() |
|||
}} |
}} |
||
[[#top|top]] |
|||
=== Изучение и Тестирование === |
|||
==Примечания== |
|||
=== Создание собственного Алгоритма === |
|||
Широко применяемый, хотя и трудный в использовании, источник скриптов обработки полигональных сеток - это тестовые скрипты в модуле {{incode|Mesh}}. |
|||
<div class="mw-translate-fuzzy"> |
|||
В этих тестах модуля буквально все методы вызываются и все свойства/атрибуты перебираются. |
|||
=== Экспортирование === |
|||
Так что если вы достаточно смелы, взгляните на [https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Mesh/App/MeshTestsApp.py Unit Test module]. |
|||
Смотрите так же: [[Mesh_API/ru|Mesh API]]. |
|||
Вы также можете записать полигиональную модель как python модуль: |
|||
</div> |
|||
[[#top|top]] |
|||
{{Code|code= |
|||
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py") |
|||
{{Docnav/ru |
|||
import SavedMesh |
|||
|[[Topological_data_scripting/ru|Topological data scripting]] |
|||
m2 = Mesh.Mesh(SavedMesh.faces) |
|||
|[[Mesh_to_Part/ru|Mesh to Part]] |
|||
}} |
}} |
||
{{Powerdocnavi{{#translation:}}}} |
|||
=== Все что связано с Gui реализацией === |
|||
[[Category:Developer Documentation{{#translation:}}]] |
|||
[[Category:Python Code{{#translation:}}]] |
|||
<div class="mw-translate-fuzzy"> |
|||
{{Mesh Tools navi{{#translation:}}}} |
|||
=== Всякая всячина === |
|||
Трудно, широко использовать источники полигиональной модели связанные с сценарием, все это тестирование написания сценариев для полигионального модудя |
|||
В этих тестах модуля буквально все методы вызываются и все свойства/атрибуты вымышлены. |
|||
Так что если вы достаточно смелы, взгляните на [http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/App/MeshTestsApp.py?view=markup Unit Test module]. |
|||
</div> |
|||
See also [[Mesh_API|Mesh API]] |
|||
<div class="mw-translate-fuzzy"> |
|||
{{docnav/ru|FreeCAD Scripting Basics/ru|Topological data scripting/ru}} |
|||
</div> |
|||
{{clear}} |
{{clear}} |
||
{{Mesh Tools navi{{#translation:}}}} |
|||
{{Userdocnavi{{#translation:}}}} |
|||
[[Category:Poweruser Documentation{{#translation:}}]] |
|||
[[Category:Python Code{{#translation:}}]] |
Revision as of 10:39, 9 June 2020
Введение
Чтобы получить доступ к модулю Mesh
, вы должны сначала импортировать его:
import Mesh
Создание
Чтобы создать пустой объект сетки, просто используйте стандартный конструктор:
mesh = Mesh.Mesh()
Вы также можете создать объект из файла:
mesh = Mesh.Mesh("D:/temp/Something.stl")
Или создайте его из множества треугольников, задав их вершины:
triangles = [
# 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],
]
meshObject = Mesh.Mesh(triangles)
Mesh.show(meshObject)
Ядро Mesh заботится о создании топологического правильной структуры данных, сортируя совпадающие точки и края.
Моделирование
Для создания правильной геометрии вы можете использовать один из методов create*()
. Например, тор можно создать следующим образом:
m = Mesh.createTorus(8.0, 2.0, 50)
Mesh.show(m)
Первые два параметра определяют радиусы тороида, а третий параметр - фактор подвыборки, как много треугольников будет создано. Чем выше это значение, тем сглаженней тело.
Модуль Mesh
также предоставляет три булевых метода: union()
, intersection()
и difference()
:
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
Вот пример, который создает трубку, используя метод difference()
:
import FreeCAD, Mesh
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36)
cylB = Mesh.createCylinder(1.0, 12.0, True, 1.0, 36)
cylB.Placement.Base = (FreeCAD.Vector(-1, 0, 0)) # move cylB to avoid co-planar faces
pipe = cylA
pipe = pipe.difference(cylB)
pipe.flipNormals() # somehow required
doc = FreeCAD.ActiveDocument
obj = d.addObject("Mesh::Feature", "Pipe")
obj.Mesh = pipe
doc.recompute()
Примечания
Широко применяемый, хотя и трудный в использовании, источник скриптов обработки полигональных сеток - это тестовые скрипты в модуле Mesh
.
В этих тестах модуля буквально все методы вызываются и все свойства/атрибуты перебираются.
Так что если вы достаточно смелы, взгляните на Unit Test module.
Смотрите так же: Mesh API.
- 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
- 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