Mesh Scripting/pl: Difference between revisions

From FreeCAD Documentation
No edit summary
(Updating to match new version of source page)
 
(25 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
{{Docnav/pl
|[[FreeCAD_Scripting_Basics/pl|Podstawy tworzenia skryptów FreeCAD]]
|[[Topological_data_scripting/pl|Skrypty danych topologicznych]]
}}


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


Aby uzyskać dostęp do modułu {{incode|Mesh}} musisz go najpierw zaimportować:
Przede wszystkim trzeba zaimportować Środowisko pracy Mesh:


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


==Tworzenie==
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==
Aby utworzyć pusty obiekt siatki wystarczy użyć standardowego konstruktora:
Aby utworzyć pusty obiekt siatki wystarczy użyć standardowego konstruktora:


Line 25: Line 19:
}}
}}


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


{{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 34:
[-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)
}}
}}


Jądro Mesh zajmuje się tworzeniem poprawnej topologicznej struktury danych, sortując razem zbieżne punkty i krawędzie.
Jądro Mesh zapewnia utworzenie topologicznie poprawnej struktury danych, poprzez sortowanie zbieżnych punktów i krawędzi.
{{Top}}

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

[[#top|top]]

==Modelowanie==
==Modelowanie==


Do tworzenia regularnych geometrii można użyć jednej z metod {{incode|create*()}}. Torus, na przykład, może być utworzony w następujący sposób:
To create regular geometries you can use the Python script {{FileName|BuildRegularGeoms.py}}.


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


Pierwsze dwa parametry określają promienie torusa, a trzeci parametr jest współczynnikiem podpróbkowania dla liczby utworzonych trójkątów. Im wyższa jest ta wartość, tym gładsza jest siatka.
<div class="mw-translate-fuzzy">
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.
Aby utworzyć na przykład toroid, można postępować następujący sposób:
</div>


Moduł {{incode|Mesh}} dostarcza również trzy logiczne metody do modelowania: {{incode|union()}}, {{incode|intersection()}} i {{incode|difference()}}:
{{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.
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>


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


Wreszcie pełny przykład, który oblicza przecięcie kuli z walcem przecinającym kulę.
Oto przykład, który tworzy rurę za pomocą metody {{incode|difference()}}:


{{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}}
==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 {{incode|Mesh}}.
[[#top|top]]
Podczas tych testów jednostkowych wywoływane są dosłownie wszystkie metody i wszystkie właściwości/atrybuty są udoskonalane.

<div class="mw-translate-fuzzy">
===Eksportowanie===
Możesz nawet zapisać siatkę do modułu Python:
</div>

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

[[#top|top]]

<div class="mw-translate-fuzzy">
===Możliwości i zakończenie===
Rozległym ''(choć trudnym w użyciu)'' źródłem skryptów związanych z siatkami są skrypty testów jednostkowych Środowiska pracy Mesh.
W testach jednostkowych dosłownie wszystkie metody są wywoływane, i wszystkie właściwości / atrybuty są modyfikowane.
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>


Zobacz również: [[Mesh_API|API dla Mesh]]
An extensive (though hard to use) source of Mesh related scripting are the unit test scripts of the Mesh-Module.
{{Top}}
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 [https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Mesh/App/MeshTestsApp.py Unit Test module].

Zobacz również [[Mesh_API|API dla Mesh]]

[[#top|top]]

{{Docnav/pl
|[[FreeCAD_Scripting_Basics/pl|Podstawy tworzenia skryptów FreeCAD]]
|[[Topological_data_scripting/pl|Skrypty danych topologicznych]]
}}

{{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}}

Latest revision as of 08:28, 5 September 2021

Wprowadzenie

Aby uzyskać dostęp do modułu Mesh musisz go najpierw zaimportować:

import Mesh

Tworzenie

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

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 zapewnia utworzenie topologicznie poprawnej struktury danych, poprzez sortowanie zbieżnych punktów i krawędzi.

Przewiń na górę strony

Modelowanie

Do tworzenia regularnych geometrii można użyć jednej z metod create*(). Torus, na przykład, może być utworzony w następujący sposób:

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

Pierwsze dwa parametry określają promienie torusa, a trzeci parametr jest współczynnikiem podpróbkowania dla liczby utworzonych trójkątów. Im wyższa jest ta wartość, tym gładsza jest siatka.

Moduł Mesh dostarcza również trzy logiczne metody do modelowania: union(), intersection() i 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

Oto przykład, który tworzy rurę za pomocą metody 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()

Przewiń na górę 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

Przewiń na górę strony