3d to 2d
-
Hallo zusammen
Ich (Lehrling) arbeite in meiner Lehrfirma mit einigen kollegen an einem Lehrlingsprojekt wobei ich als einziger für die Software verantwortlich bin.
Wir bauen einen RepRap (3d Drucker). Nun hat mir mein Lehrmeister die Aufgabe gestellt ich soll erklären wie die Software die 3d STL Grafiken in 2D umrechnet.
Da die, denen ich es erklären muss nicht viel- gar nichts von Software verstehen muss ich ihnen das einfach Aufzeichnen (Ich verstehe es auch nicht ganz wie das umrechnen funktioniert, xD). Hat jemand eine Idee wie ich das Anhand einer Grafik oder einem Beispiel erklären könnte?
Danke
-
Binggi schrieb:
Wir bauen einen RepRap (3d Drucker).
1. Cool.
Binggi schrieb:
ich soll erklären wie die Software die 3d STL Grafiken in 2D umrechnet.
Eigentlich ist das so nicht möglich. Ein 3D-Drucker muss wissen, wo Materie im Raum sein soll und wo nicht. Das geben STL-Dateien nicht her. Die beinhalten nämlich nur eine Menge von Dreiecken. Das Programm muss intern irgendwo überprüfen, ob eine erlaubte Oberfläche beschrieben wird und muss festlegen, wo innen und wo außen ist. Dann wird es wohl ein Volumen rastern, das ganze also in eine Art Voxelgrafik übertragen und die dann Schicht für Schicht ausdrucken. Es kann sein, dass die sogar nur Schicht für Schicht erzeugt wird. Die Frage ist, wie das Rastern funktioniert. Nun, in 2D kann man das in jedem Computergrafikbuch nachlesen. Wo man das im 3D-Fall herkriegt, kann ich Dir nicht sagen, wird aber vermutlich ähnlich funktionieren. Guck Dir das am Besten erstmal in 2D an. Vielleicht findest Du dann selbst raus, wie es in 3D funktionieren könnte.
Ich kenne mich damit nicht aus, aber so stelle ich es mir ungefähr vor.
-
Das mit der VoxelGrafik ist keine schlechte Idee. Nur noch zum anmerken, das Projekt ist opensource und in java geschreiben, ich bin jedoch C Programmierer... habe z.T verständigungsprobleme. Ich habe jedoch die Stelle gefunden in denen es berechnet wird:
STLSlice:
Class to hold all the STL objects in the scene and to compute slices through them.
The slices are computed by dividing a rectangle (box) in a quad tree down to the point where each quad contains two ends of different line segments. These ends are then assumed to join together.RrCSGPolygonList:
build a 2D polygon list of all edges in the plane z from all the objects in shapeList then turn it in CSG form.Ev ist das Hilfreich...
-
Mir ist unklar, wie genau ein 3D-Drucker funktioniert. Klingt auf jeden Fall nach einem tollen Projekt. Deine Frage ist übrigens unabhängig von der Programmiersprache des Projekts. Solche Algorithmen sind meistens auch nicht direkt aus dem Quellcode abzulesen, wenn man kein Profi ist, egal, ob man die Sprache versteht oder nicht.
Ich vermute mal, deinem Lehrer gehts vor allem darum, dass ihr ein Grundverständnis für die technik bekommt? Oder sollt ihr sowas tatsächlich auch selber programmieren?
Zu deinem Zitat: Das Dreiecksgitter wird anscheinend in Scheiben (slices) geschnitten. Damit wird das Problem auf 2D vereinfacht. Darüber wird ein Raster aus Rechtecken (Quads) gelegt, das lokal verfeinert wird, um den Umriss des Schnitts aufzulösen.
Stell dir (vereinfacht) einfach ein Karopapier mit kleinen Liniensegmenten vor. Das Kästchenpapier ist so gemalt, dass jeweils in einem Kästchen die Endpunkte von zwei einzelnen Liniensegmenten liegen. Diese werden dann als Zusammenhängend betrachtet. So wird aus den einzelnen Liniensegmenten, die sich aus dem Schnitt ergeben, ein Umriss hergestellt. Wahrscheinlich kann der 3D-Drucker dann so einen Umriss verarbeiten.
Im Programm wird dann kein regelmäßiges Karopapier benutzt, sondern die Rechtecke werden nur dort verfeinert, wo auch wirklich Liniensegmente liegen.Schwer zu beschreiben ohne Zettel und Papier...
-
Danke Mups
Ich muss das natürlich nicht selber Programmieren... Ich stecke ja noch mittendrin in der Ausbildung. Ich hatte nie vor den Quellcode zu studien, da mir die Progrmmierfähigkeiten, und viel wichtiger die Mathefähigkeiten fehlen,(und ich erlich gesagt nur Bahnhof verstand) daher bin ich auf die Kommentare angewiesen. Aber das recht wohl kaum aus, da ich das noch irgendwie jemandem "erklären" soll...
Ich werde mir das nach deiner Beschreibung mal Aufzeichnen.
-
Guck hier nochmal: http://de.wikipedia.org/wiki/Quadtree
Das Bild mit den Blitzen und dem Quadtree gibt dir vielleicht schon mal ne Idee. Bloß dass hier in deinem Quadtree eben noch die ganzen Liniensegmente rumfliegen.
-
Hallo Binggi,
ich unterstelle mal, dass es sich bei dem 3D Drucker um so ein Gerät handelt und die STL-Daten dieses Format haben.
Dann reduziert sich das Problem von der Umrechnung von 3D (STl-format) auf 2D (Verfahrwege des Druckers für eine Schicht) auf das Bestimmen der Schnittstrecke eines Dreiecks im Raum mit einer Ebenen (der Schicht). Da in den STL-Daten für jedes Dreieck auch die Flächennormale gegeben ist, so ist auch klar, wo 'innen' und 'außen' des Dreiecks ist. Damit kann bestimmt werden, wo 'innen' und 'außen' von der zugehörigen Schnittstrecke ist. Fügt man alle Schnittstrecke zusammen, so erhält man ein (oder mehrere) Polygon(n) das vom RepRap für diese Schicht ausgefüllt werden muss (bzw. müssen).Sind Dir Kreuzprodukt oder Hessesche Normalform ein Begriff?
.. und auf welchem Level sollst Du es denn erklären?
Gruß
Werner
-
Sind Dir Kreuzprodukt oder Hessesche Normalform ein Begriff?
Nein noch nie gehört...
.. und auf welchem Level sollst Du es denn erklären?
Ich müsste es erklären, dass auch Leeien das Verstehen können. Am Besten mit einfacher Geometrie. Es kann auch ein bisschen abstrakt erklärt sein und muss nicht in die Detais gehen. Ich habe als Beispielform eine Pyramide gewält.
Ich dab auserdem das folgende Bild gefunden:
http://www.emeraldinsight.com/content_images/fig/1560150107005.png
Gruss Binggi
-
Dein Beispiel mit der Pyramide sieht ja sehr verständlich aus. Weiter oben haben wir uns über Quadtrees etc unterhalten. So, wie mir scheint, geht das schon fast ein bisschen zu weit ins Detail für deine Aufgabe. Vielleicht ist die folgende Zusammenfassung besser:
Eine STL-Datei speichert Dreiecke, die wissen, wo aussen und innen ist. Die drei Punkte des Dreiecks werden in einer bestimmten Reiehnfolge abgelegt. Je nachdem, von welcher Seite du drauf guckst, siehst du die Punkte im Uhrzeigersinn oder entgegen dem Uhrzeigersinn --> drinnen und draussen. Die Dreiecke speichern auch ihren Normalenvektor (weisst du, was das ist?!) Das ist für die Software ein alternativer Weg, um drinnen und draussen zu bestimmen.
Das Dreiecksgitter wird von der Software in Streifen geschnitten. Die Dreiecke werden jeweils mit einer Ebene geschnitten. Dabei entstehen ganz viele kleine Liniensegmente, die dann von der Software aneinandergehängt werden, um einen (oder mehrere) Umrisse zu generieren.
Problem: Die Dreiecke können sich in schlechten Computermodellen überlappen, oder es kann Löcher zwischen den Dreiecken geben. Das ist unschön, weil dann auch die Schnitte mit den Ebenen nicht mehr zusammenhängende Umrisse ergeben müssen. Deswegen braucht es Algorithmen, die das verhindern. Und dafür braucht man dann zb Quadtrees und ein großes Arsenal an Computergeometrie. Aber das geht wahrscheinlich weiter als nötig.
Je nachdem, wie umfangreich deine Arbeit werden soll, kannst du ja auch noch ein bisschen was über STL-Dateien reinnehmen. Das ist relativ leicht verdaulich (das schwierigste ist der Normalenvektor), aber für den Anwender vielleicht wichtig: Wenn die STL-Datei zu "schlecht" wird, kann ich mir vorstellen, dass der Drucker nicht mehr gut funktioniert. Wenn man ein bisschen versteht, was STL-Dateien sind, kann man auch verstehen, was eine "schlechte" und was eine "gute" STL-Datei ist.
-
Danke euch allen...
Hat mir wirklich geholfen!!!
Gruss Binggi