Mesh Scripting/pl: Difference between revisions

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

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


{{TOCright}}
{{TOCright}}

First of all you have to import the Mesh module:
==Wprowadzenie==

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

{{Code|code=
{{Code|code=
import Mesh
import Mesh
}}
}}
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==

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")
}}
}}

<div class="mw-translate-fuzzy">
''(Listę kompatybilnych typów plików Środowiska '''Meshes''' można znaleźć [[Feature_list/pl#Główne cechy|tutaj]])''.
</div>


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],
#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)
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}}
==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:
Później zobaczysz, jak możesz testować i badać dane siatki.

===Modelowanie===
Do tworzenia regularnych geometrii można użyć skryptu Python 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.
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:


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

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.


{{Code|code=
{{Code|code=
Line 82: 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}}.
===Badanie i testowanie===
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].
===Napisz swoje własne Algorytmy===

===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)
}}

===Sprawy dotyczące Gui===

<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 [http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/App/MeshTestsApp.py?view=markup Moduł testowy jednostek].
</div>

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

<div class="mw-translate-fuzzy">
{{docnav/pl|FreeCAD Scripting Basics/pl|Topological data scripting/pl}}
</div>



Zobacz również: [[Mesh_API|API dla Mesh]]
{{Top}}
{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
{{Mesh Tools navi{{#translation:}}}}
{{clear}}
{{clear}}

{{Mesh Tools navi{{#translation:}}}}

{{Userdocnavi{{#translation:}}}}

[[Category:Poweruser Documentation{{#translation:}}]]

[[Category:Python Code{{#translation:}}]]

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