Mesh Scripting/pl: Difference between revisions

From FreeCAD Documentation
(Created page with "Rozległym ''(choć trudnym w użyciu)'' źródłem skryptów związanych z siatkami są skrypty do testów jednostkowych Środowiska pracy Mesh. Podczas tych testów jednostk...")
(Updating to match new version of source page)
Line 1: Line 1:
<languages/>
<languages/>
<div class="mw-translate-fuzzy">
{{Docnav/pl
{{Docnav/pl
|[[FreeCAD_Scripting_Basics/pl|Podstawy tworzenia skryptów FreeCAD]]
|[[FreeCAD_Scripting_Basics/pl|Podstawy tworzenia skryptów FreeCAD]]
|[[Topological_data_scripting/pl|Skrypty danych topologicznych]]
|[[Topological_data_scripting/pl|Skrypty danych topologicznych]]
}}
}}
</div>


{{TOCright}}
{{TOCright}}
Line 9: Line 11:
==Wprowadzenie==
==Wprowadzenie==


<div class="mw-translate-fuzzy">
Przede wszystkim trzeba zaimportować Środowisko pracy Mesh:
Przede wszystkim trzeba zaimportować Środowisko pracy Mesh:
</div>


{{Code|code=
{{Code|code=
Line 15: Line 19:
}}
}}


<div class="mw-translate-fuzzy">
Dzięki temu masz dostęp do Środowiska Mesh i klasy Mesh, które ułatwiają korzystanie z funkcji
FreeCAD C++ Mesh-Kernel.

==Tworzenie i wprowadzanie==
==Tworzenie i wprowadzanie==
Aby utworzyć pusty obiekt siatki wystarczy użyć standardowego konstruktora:
Aby utworzyć pusty obiekt siatki wystarczy użyć standardowego konstruktora:
</div>

To create an empty mesh object just use the standard constructor:


{{Code|code=
{{Code|code=
Line 25: Line 30:
}}
}}


<div class="mw-translate-fuzzy">
Możesz również utworzyć obiekt na podstawie pliku
Możesz również utworzyć obiekt na podstawie pliku
</div>


{{Code|code=
{{Code|code=
mesh = Mesh.Mesh('D:/temp/Something.stl')
mesh = Mesh.Mesh("D:/temp/Something.stl")
}}
}}

''(Listę kompatybilnych typów plików Środowiska '''Meshes''' można znaleźć [[Feature_list/pl#Główne cechy|tutaj]])''.


Lub stwórz go z zestawu trójkątów opisanych przez ich punkty narożne:
Lub stwórz go z zestawu trójkątów opisanych przez ich punkty narożne:


{{Code|code=
{{Code|code=
planarMesh = [
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],
Line 42: Line 47:
[-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)
meshObject = Mesh.Mesh(triangles)
Mesh.show(planarMeshObject)
Mesh.show(meshObject)
}}
}}


<div class="mw-translate-fuzzy">
Jądro Mesh zajmuje się tworzeniem poprawnej topologicznej struktury danych, sortując razem zbieżne punkty i krawędzie.
Jądro Mesh zajmuje się tworzeniem poprawnej topologicznej struktury danych, sortując razem zbieżne punkty i krawędzie.

</div>
Później zobaczysz, jak możesz testować i badać dane siatki.


[[#top|na początek strony]]
[[#top|na początek strony]]
Line 54: Line 59:
==Modelowanie==
==Modelowanie==


<div class="mw-translate-fuzzy">
Do tworzenia regularnych geometrii można użyć skryptu Python {{FileName|BuildRegularGeoms.py}}.
Do tworzenia regularnych geometrii można użyć skryptu Python {{FileName|BuildRegularGeoms.py}}.
</div>


{{Code|code=
{{Code|code=
m = Mesh.createTorus(8.0, 2.0, 50)
import BuildRegularGeoms
Mesh.show(m)
}}

Ten skrypt dostarcza metod do definiowania prostych brył obrotowych takich jak kule, elipsy, cylindry, toroidy i stożki. Posiada on również metodę tworzenia prostego sześcianu.
Na przykład toroid można utworzyć w następujący sposób:

{{Code|code=
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
m = Mesh.Mesh(t)
}}
}}


<div class="mw-translate-fuzzy">
Pierwsze dwa parametry określają promienie toroidu, a trzeci parametr jest współczynnikiem podpróbkowania dla liczby utworzonych trójkątów. Im wyższa jest ta wartość, tym gładsza i niższa jest chropowatość korpusu bryły.
Pierwsze dwa parametry określają promienie toroidu, a trzeci parametr jest współczynnikiem podpróbkowania dla liczby utworzonych trójkątów. Im wyższa jest ta wartość, tym gładsza i niższa jest chropowatość korpusu bryły.
Klasa Mesh zapewnia zestaw funkcji logicznych, które można wykorzystać do celów modelowania. Zapewnia połączenie, przecięcie i różnicę dwóch obiektów siatki.
Klasa Mesh zapewnia zestaw funkcji logicznych, które można wykorzystać do celów modelowania. Zapewnia połączenie, przecięcie i różnicę dwóch obiektów siatki.
</div>

The {{incode|Mesh}} module also provides three Boolean methods: {{incode|union()}}, {{incode|intersection()}} and {{incode|difference()}}:


{{Code|code=
{{Code|code=
Line 83: Line 87:
}}
}}


<div class="mw-translate-fuzzy">
Wreszcie pełny przykład, który oblicza przecięcie kuli z walcem przecinającym tą kulę.
Wreszcie pełny przykład, który oblicza przecięcie kuli z walcem przecinającym tą kulę.
</div>


{{Code|code=
{{Code|code=
import Mesh, BuildRegularGeoms
import FreeCAD, Mesh
sphere = Mesh.Mesh(BuildRegularGeoms.Sphere(5.0, 50))
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36)
cylinder = Mesh.Mesh(BuildRegularGeoms.Cylinder(2.0, 10.0, True, 1.0, 50))
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|na początek strony]]

==Eksportowanie==
Możesz nawet zapisać siatkę do modułu Python:

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


Line 111: Line 109:
==Uwagi==
==Uwagi==


<div class="mw-translate-fuzzy">
Rozległym ''(choć trudnym w użyciu)'' źródłem skryptów związanych z siatkami są skrypty do testów jednostkowych Środowiska pracy Mesh.
Rozległym ''(choć trudnym w użyciu)'' źródłem skryptów związanych z siatkami są skrypty do testów jednostkowych Środowiska pracy Mesh.
Podczas tych testów jednostkowych wywoływane są dosłownie wszystkie metody i wszystkie właściwości/atrybuty są udoskonalane.
Podczas tych testów jednostkowych wywoływane są dosłownie wszystkie metody i wszystkie właściwości/atrybuty są udoskonalane.
Więc jeśli jesteś wystarczająco odważny, spójrz na [https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Mesh/App/MeshTestsApp.py Moduł testowy jednostek].
Więc jeśli jesteś wystarczająco odważny, spójrz na [https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Mesh/App/MeshTestsApp.py Moduł testowy jednostek].
</div>


<div class="mw-translate-fuzzy">
Zobacz również [[Mesh_API|API dla Mesh]]
Zobacz również [[Mesh_API|API dla Mesh]]
</div>


[[#top|top]]
[[#top|na początek strony]]


<div class="mw-translate-fuzzy">
{{Docnav/pl
{{Docnav/pl
|[[FreeCAD_Scripting_Basics/pl|Podstawy tworzenia skryptów FreeCAD]]
|[[FreeCAD_Scripting_Basics/pl|Podstawy tworzenia skryptów FreeCAD]]
|[[Topological_data_scripting/pl|Skrypty danych topologicznych]]
|[[Topological_data_scripting/pl|Skrypty danych topologicznych]]
}}
}}
</div>


{{Mesh Tools navi{{#translation:}}}}
{{Powerdocnavi{{#translation:}}}}
{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
{{Mesh Tools navi{{#translation:}}}}
{{clear}}
{{clear}}

Revision as of 21:56, 5 June 2020

Wprowadzenie

Przede wszystkim trzeba zaimportować Środowisko pracy Mesh:

import Mesh

Tworzenie i wprowadzanie

Aby utworzyć pusty obiekt siatki wystarczy użyć standardowego konstruktora:

To create an empty mesh object just use the standard constructor:

mesh = Mesh.Mesh()

Możesz również utworzyć obiekt na podstawie pliku

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

Lub stwórz go z zestawu trójkątów opisanych przez ich punkty narożne:

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)

Jądro Mesh zajmuje się tworzeniem poprawnej topologicznej struktury danych, sortując razem zbieżne punkty i krawędzie.

na początek strony

Modelowanie

Do tworzenia regularnych geometrii można użyć skryptu Python BuildRegularGeoms.py.

m = Mesh.createTorus(8.0, 2.0, 50)
Mesh.show(m)

Pierwsze dwa parametry określają promienie toroidu, a trzeci parametr jest współczynnikiem podpróbkowania dla liczby utworzonych trójkątów. Im wyższa jest ta wartość, tym gładsza i niższa jest chropowatość korpusu bryły. Klasa Mesh zapewnia zestaw funkcji logicznych, które można wykorzystać do celów modelowania. Zapewnia połączenie, przecięcie i różnicę dwóch obiektów siatki.

The Mesh module also provides three Boolean methods: union(), intersection() and 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

Wreszcie pełny przykład, który oblicza przecięcie kuli z walcem przecinającym tą kulę.

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()

na początek strony

Uwagi

Rozległym (choć trudnym w użyciu) źródłem skryptów związanych z siatkami są skrypty do testów jednostkowych Środowiska pracy Mesh. Podczas tych testów jednostkowych wywoływane są dosłownie wszystkie metody i wszystkie właściwości/atrybuty są udoskonalane. Więc jeśli jesteś wystarczająco odważny, spójrz na Moduł testowy jednostek.

Zobacz również API dla Mesh

na początek strony