Mesh Scripting/sv: Difference between revisions

From FreeCAD Documentation
(Created page with "=== 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 åtko...")
 
(Updating to match new version of source page)
(32 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>

{{TOCright}}

<div class="mw-translate-fuzzy">
=== Introduktion ===
=== Introduktion ===
Först av allt så måste du importera Nätmodulen:
Först av allt så måste du importera Nätmodulen:
</div>


To get access to the {{incode|Mesh}} module you have to import it first:
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.



{{Code|code=
import Mesh
}}


<div class="mw-translate-fuzzy">
=== Skapande och laddning ===
=== Skapande och laddning ===
För att skapa ett tomt nätobjekt använd standardkonstruktören:
För att skapa ett tomt nätobjekt använd standardkonstruktören:
</div>


To create an empty mesh object just use the standard constructor:
mesh = Mesh.Mesh()


{{Code|code=
mesh = Mesh.Mesh()
}}

<div class="mw-translate-fuzzy">
Du kan också skapa ett objekt från en fil
Du kan också skapa ett objekt från en fil
</div>


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

}}
Vilka filformat du kan använda för att bygga upp ett nät är [[Feature_list/sv#IO|här]].




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

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


<div class="mw-translate-fuzzy">
Mesh-Kernel tar hand om skapandet av en topologiskt korrekt datastruktur genom att sortera sammanfallande punkter och kanter tillsammans.
</div>


[[#top|top]]


<div class="mw-translate-fuzzy">
=== Modellering ===
=== Modellering ===
För att skapa reguljärageometrier så kan du används Python skriptet BuildRegularGeoms.py.
För att skapa reguljärageometrier så kan du används Python skriptet BuildRegularGeoms.py.
</div>


To create regular geometries you can use one of the {{incode|create*()}} methods. A torus, for instance, can be created as follows:
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) # lista med flera tusen trianglar
m = Mesh.mesh(t)



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


<div class="mw-translate-fuzzy">
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.


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.
</div>


The {{incode|Mesh}} module also provides three Boolean methods: {{incode|union()}}, {{incode|intersection()}} and {{incode|difference()}}:
m1, m2 # är de inmatade nätobjekten
m3 = Mesh.mesh(m1) # Skapa en kopia av m1
m3.unite(m2) # Förening av m1 och m2, resultatet lagras i m3
m4 = Mesh.mesh(m1)
m4.intersect(m2) # skärning av m1 och m2
m5 = Mesh.mesh(m1)
m5.difference(m2) # Skillnaden mellan m1 och m2
m6 = Mesh.mesh(m2)
m6.difference(m1) # skillnaden mellan m2 och m1, resultatet skiljer sig vanligtvis till m5


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

<div class="mw-translate-fuzzy">
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.
</div>


{{Code|code=
import Mesh, BuildRegularGeoms
import FreeCAD, Mesh
sphere = Mesh.mesh( BuildRegularGeoms.Sphere(5.0, 50) )
cylinder = Mesh.mesh( BuildRegularGeoms.Cylinder(2.0, 10.0, True, 1.0, 50) )
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36)
cylB = Mesh.createCylinder(1.0, 12.0, True, 1.0, 36)
diff = sphere
cylB.Placement.Base = (FreeCAD.Vector(-1, 0, 0)) # move cylB to avoid co-planar faces
diff.difference(cylinder)
pipe = cylA
d = FreeCAD.newDocument()
pipe = pipe.difference(cylB)
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff
pipe.flipNormals() # somehow required
d.recompute()
doc = FreeCAD.ActiveDocument

obj = d.addObject("Mesh::Feature", "Pipe")

obj.Mesh = pipe

doc.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 ===



[[#top|top]]


<div class="mw-translate-fuzzy">
=== Special ===
=== Special ===

En extensiv, fast svåranvänd, källa för Nätrelaterade skript är Nätmodulens enhetstestskript.
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.
I detta enhetstest så kallas samtliga metoder och samtliga egenskaper/attribut ändras.
Så om du är tillräckligt modig, ta en titt på [http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/App/MeshTestsApp.py?view=markup Unit Test module].
Så om du är tillräckligt modig, ta en titt på [http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/App/MeshTestsApp.py?view=markup Unit Test module].
</div>


An extensive, though hard to use, source of mesh related scripting are the unit test scripts of the {{incode|Mesh}} module.
In these 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].


See also: [[Mesh_API|Mesh API]].


[[#top|top]]
{{docnav/sv|FreeCAD Scripting Basics/sv|Topological data scripting/sv}}

{{languages/sv | {{en|Mesh Scripting}} {{es|Mesh Scripting/es}} {{fr|Mesh Scripting/fr}} {{it|Mesh Scripting/it}} {{ru|Mesh Scripting/ru}} }}


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

Revision as of 21:12, 23 August 2020

Introduktion

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

To get access to the Mesh module you have to import it first:

import Mesh

Skapande och laddning

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

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

mesh = Mesh.Mesh()

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

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

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

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-Kernel tar hand om skapandet av en topologiskt korrekt datastruktur genom att sortera sammanfallande punkter och kanter tillsammans.

top

Modellering

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

To create regular geometries you can use one of the create*() methods. A torus, for instance, can be created as follows:

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

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.

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

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

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

top

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.

An extensive, though hard to use, source of mesh related scripting are the unit test scripts of the Mesh module. In these unit tests literally all methods are called and all properties/attributes are tweaked. So if you are bold enough, take a look at the Unit Test module.

See also: Mesh API.

top