Mesh 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-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) # lista med flera tusen trianglar 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 # ä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
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.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.