Mesh Scripting/sv: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 4: Line 4:
=== Introduktion ===
=== Introduktion ===
Först av allt så måste du importera Nätmodulen:
Först av allt så måste du importera Nätmodulen:
{{Code|code=
<syntaxhighlight>
import Mesh
import Mesh
}}
</syntaxhighlight>
Efter det så har du åtkomst till Nätmodulen och Nätklassen Mesh class som ger åtkomst till funktionerna i FreeCAD's C++ Mesh-Kernel.
Efter det så har du åtkomst till Nätmodulen och Nätklassen Mesh class som ger åtkomst till funktionerna i FreeCAD's C++ Mesh-Kernel.


Line 14: Line 14:
</div>
</div>


{{Code|code=
<syntaxhighlight>
mesh = Mesh.Mesh()
mesh = Mesh.Mesh()
}}
</syntaxhighlight>


Du kan också skapa ett objekt från en fil
Du kan också skapa ett objekt från en fil


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


Vilka filformat du kan använda för att bygga upp ett nät är [[Feature_list/sv#IO|här]].
Vilka filformat du kan använda för att bygga upp ett nät är [[Feature_list/sv#IO|här]].
Line 28: Line 28:
Eller skapa det från ett set av trianglar, beskrivna av dess hörnpunkter:
Eller skapa det från ett set av trianglar, beskrivna av dess hörnpunkter:


{{Code|code=
<syntaxhighlight>
planarMesh = [
planarMesh = [
# triangle 1
# triangle 1
Line 37: Line 37:
planarMeshObject = Mesh.Mesh(planarMesh)
planarMeshObject = Mesh.Mesh(planarMesh)
Mesh.show(planarMeshObject)
Mesh.show(planarMeshObject)
}}
</syntaxhighlight>


Mesh-Kernel tar hand om skapandet av en topologiskt korrekt datastruktur genom att sortera sammanfallande punkter och kanter tillsammans.
Mesh-Kernel tar hand om skapandet av en topologiskt korrekt datastruktur genom att sortera sammanfallande punkter och kanter tillsammans.
Line 48: Line 48:
</div>
</div>


{{Code|code=
<syntaxhighlight>
import BuildRegularGeoms
import BuildRegularGeoms
}}
</syntaxhighlight>


Detta skript ger metoder att definiera enkla rotationskroppar som sfärer, ellipsoider, cylindrar, toroider och koner. Och det har även en metod för att skapa en enkel kub.
Detta skript ger metoder att definiera enkla rotationskroppar som sfärer, ellipsoider, cylindrar, toroider och koner. Och det har även en metod för att skapa en enkel kub.
Line 56: Line 56:
För att till exempel skapa en toroid, så kan du göra enligt följande:
För att till exempel skapa en toroid, så kan du göra enligt följande:


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


De första två parametrarna definierar toroidens radier och den tredje parametern är en sub-sampling faktor för hur många trianglar som skapas. Ju högre värde på denna faktorn, desto jämnare blir kroppen.
De första två parametrarna definierar toroidens radier och den tredje parametern är en sub-sampling faktor för hur många trianglar som skapas. Ju högre värde på denna faktorn, desto jämnare blir kroppen.
Line 65: Line 65:
Nät klassen har ett set med booleska funktioner som kan användas för modelleringsändamål. Den erbjuder förening, skärning och skillnad mellan två nätobjekt.
Nät klassen har ett set med booleska funktioner som kan användas för modelleringsändamål. Den erbjuder förening, skärning och skillnad mellan två nätobjekt.


{{Code|code=
<syntaxhighlight>
m1, m2 # are the input mesh objects
m1, m2 # are the input mesh objects
m3 = Mesh.Mesh(m1) # create a copy of m1
m3 = Mesh.Mesh(m1) # create a copy of m1
Line 75: Line 75:
m6 = Mesh.Mesh(m2)
m6 = Mesh.Mesh(m2)
m6.difference(m1) # the difference of m2 and m1, usually the result is different to m5
m6.difference(m1) # the difference of m2 and m1, usually the result is different to m5
}}
</syntaxhighlight>


Slutligen, ett komplett exempel som beräknar skärningen mellan en sfär och en cylinder som skär sfären.
Slutligen, ett komplett exempel som beräknar skärningen mellan en sfär och en cylinder som skär sfären.


{{Code|code=
<syntaxhighlight>
import Mesh, BuildRegularGeoms
import Mesh, BuildRegularGeoms
sphere = Mesh.Mesh( BuildRegularGeoms.Sphere(5.0, 50) )
sphere = Mesh.Mesh( BuildRegularGeoms.Sphere(5.0, 50) )
Line 88: Line 88:
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff
d.recompute()
d.recompute()
}}
</syntaxhighlight>


=== Undersökning och testning ===
=== Undersökning och testning ===
Line 99: Line 99:
</div>
</div>


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


=== Gränssnittsrelaterade saker ===
=== Gränssnittsrelaterade saker ===

Revision as of 09:51, 14 February 2019

FreeCAD Scripting Basics
Topological data scripting

Introduktion

Först av allt så måste du importera Nätmodulen:

import Mesh

Efter det så har du åtkomst till Nätmodulen och Nätklassen Mesh class som ger åtkomst till funktionerna i FreeCAD's C++ Mesh-Kernel.

Skapande och laddning

För att skapa ett tomt nätobjekt använd standardkonstruktören:

mesh = Mesh.Mesh()

Du kan också skapa ett objekt från en fil

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

Vilka filformat du kan använda för att bygga upp ett nät är här.

Eller skapa det från ett set av trianglar, beskrivna av dess hörnpunkter:

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)

Mesh-Kernel tar hand om skapandet av en topologiskt korrekt datastruktur genom att sortera sammanfallande punkter och kanter tillsammans.

Senare kommer du att se hur du kan testa och undersöka nät data.

Modellering

För att skapa reguljärageometrier så kan du används Python skriptet BuildRegularGeoms.py.

import BuildRegularGeoms

Detta skript ger metoder att definiera enkla rotationskroppar som sfärer, ellipsoider, cylindrar, toroider och koner. Och det har även en metod för att skapa en enkel kub.

För att till exempel skapa en toroid, så kan du göra enligt följande:

t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
m = Mesh.Mesh(t)

De första två parametrarna definierar toroidens radier och den tredje parametern är en sub-sampling faktor för hur många trianglar som skapas. Ju högre värde på denna faktorn, desto jämnare blir kroppen.

Nät klassen har ett set med booleska funktioner som kan användas för modelleringsändamål. Den erbjuder förening, skärning och skillnad mellan två nätobjekt.

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

Slutligen, ett komplett exempel som beräknar skärningen mellan en sfär och en cylinder som skär sfären.

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

Undersökning och testning

Skriv dina egna algoritmer

Exportera

Du kan även skriva nätet till en python modul:

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

Gränssnittsrelaterade saker

Special

En extensiv, fast svåranvänd, källa för Nätrelaterade skript är Nätmodulens enhetstestskript. I detta enhetstest så kallas samtliga metoder och samtliga egenskaper/attribut ändras. Så om du är tillräckligt modig, ta en titt på Unit Test module.

See also Mesh API

FreeCAD Scripting Basics/sv
Topological data scripting/sv