Kaputte STL-Files mit nicht mannigfaltigen Kanten reparieren

Ich bin in Sachen 3D-Druck-Designer inzwischen ein Fan von OpenSCAD geworden. Das mag daran liegen, dass ich wohl ein Programmierer durch und durch bin. Denn 3D-Modelle mit OpenSCAD zu entwerfen ist ein wenig wie programmieren.

Man kann in OpenSCAD auch STL-Modelle importieren und auf diese dann ändern. Wie das genau geht, habe ich in meinem Artikel Gehäuse-Design und 3D-Druck mit OpenSCAD: Gehäuse für das Cheap Yellow Display (CYD) erläutert.

Und um das in dem Artikel besprochene Modell, das Cheap Yellow Display Gehäuse von Markus, soll es auch heute wieder gehen.

Nun wollte ich nämlich auch das Oberteil verändern. Also mit
import("d:/3D-Druck/cyd/markus_cyd_box_cover.stl", convexity=3);
importiert und das Loch, das mir zu klein war, vergrößert. Das sah auch alles ganz toll in der Vorschau aus. Doch als es ans Rendern mit F6 ging, war auf einmal Markus Vorlage-Modell weg. Während die F5-Vorschau alles anzeigte.

Es war mir ein Rätsel, denn die Fehlermeldung
Compiling design (CSG Tree generation)... Rendering Polygon Mesh using CGAL... ERROR: The given mesh is not closed! Unable to convert to CGAL_Nef_Polyhedron.
übersah ich zuerst, denn diese wird nur beim ersten mal angezeigt.

Okay, irgendwie sind also Löcher in Markus' Modell. Und deswegen kann OpenSCAD nicht damit arbeiten, denke ich mir.

Betrachten im Slicer ideaMaker

Also lade ich das Modell in den nächstbesten 3D-Viewer, der mir einfällt: meinen Slicer ideaMaker. Und der zeigt mir folgendes an:



Nicht-Mannigfaltigkeit-Kanten: 1
Nicht-Mannigfaltigkeit-Kanten? Was zur Hölle soll das denn sein?

Mannigfaltigkeit von Kanten

Nein, "Mannigfaltigkeit" ist kein Begriff aus der Esoterik sondern ist im Bezug auf 3D-Modelle sehr genau definiert. Der Begriff kommt aus der Mathematik/Topologie. Und im 3D-Design bedeutet er im Grunde:

Eine mannigfaltige Kante ist eine Kante, die genau zwei Flächen verbindet – nicht mehr und nicht weniger.

Was im Zusammenhang mit dem 3D-Mesh eines 3D-Modells bedeutet: Ein Mesh ist manifold ("wasserdicht"), wenn ... Das bedeutet im Umkehrschluss, dass nicht-mannigfaltige Kanten z. B. entstehen durch: Ich habe also das Modell von allen Seiten in ideaMaker angeschaut, aber nirgends ein Loch entdecken können. Okay, da scheint eine Wand beim Lichtsensor-Loch zu fehlen und die andere Wand ist ein bisschen komisch. Aber die Fehlerursache finde ich nicht.

IdeaMaker hat eine Auto-Reparatur-Funktion. Die findet man im Menü Reparatur. Die habe ich natürlich versucht und das "reparierte" Modell wieder als STL exportiert. Dann neu importiert. Aber der Fehler war noch da. Dachte ich. Denn bei einem zweiten Versuch viel später hat es dann doch geklappt. Es ist also auf jeden Fall einen Versuch wert.

Aber hätte die Reparatur auf Anhieb geklappt, dann wären mir zwei coole Tools entgangen, die ich euch hier vorstellen möchte.

MeshLab 3D-Tool

Meshlab ist ein 3D-Visualisierungs- und Reparatur-Werkzeug, mit dem man sehr viel machen kann. Es benötigt aber ein klein bisschen Einarbeitung und man muss die verwendeten Begriffe googlen, um zu wissen, was man tut. Denn es gibt so viele Funktionen, dass es schwierig ist, einfach alle durchzuprobieren. Denn eine Funktion habe ich schmerzlich vermisst: CTRL+Z für Rückgängig. Hat man sich das Modell verhunzt, weil man einfach mal mal kurz was ausprobieren wollte, dann gibt es kein zurück, man muss das Modell neu laden.

Beeindruckend fand ich auch die Renderer, inbesondere "Glass" und das man Punkte, Kanten, Gitterlinien an- und ausschalten kann. Hier sieht man viel mehr - und auch schneller, wie ein Modell aussieht und was es ausmacht:



Ich habe mit den vielen Reparatur-Funktionen herum gespielt, aber keine gefunden, die das Modell automatisch repariert. Das hat das Modell sogar verschlimmert und aus einer nicht mannigfaltigen Kante wurden vier in ideaMaker.

Mir wurde bewusst, dass es nicht bringt, als blutiger Anfänger einfach Dinge auszuprobieren, von denen ich keine Ahnung habe. Ich musste zuerst den Fehler finden und damit die Ursache: warum war die Kante nicht mannigfaltig?

Also wagte ich mich an die vielen Filter und Anzeigemodi, die MeshLab zu bieten hat und mit der Zeit bekam ich ein Gefühl dafür, das Tool zu benutzen und mir wurde klar, wie mächtig es doch ist.

So habe ich einfach mal den Selection-Filter auf "not manifold edges" gesetzt und rechts im Seiten-Tab "Project_1" alles ausgewählt und das ganz rechte Icon mehrmals angeklickt, bis folgende Switch-Box erschien:



Was zu folgenden Info-Boxen links führte:



Zudem änderten sich die Farben an einer eh schon mir verdächtige Stelle:



Jetzt wusste endlich was los und wo der Fehler war: Die eine Ecke von dem Ende der quaderförmigen Wand ragte sehr ungünstig in die Zylinder-Kanten der Rundung für die Schraube hinein. Entwieder durchstieß der Quader den Zylinder und war nicht verschmolzen oder mehrere Flächen teilte sich einen Eckpunkt. Beides geht nicht und führt zu eine ungültigen Mesh.

Ich habe dann probiert, den Fehler händisch zu korrgieren, indem ich Flächen gelöscht habe, die sich überlappten. Dann fehlte mir aber die Endfläche für den Wandquader. Und kein Zurück. Kein CTR+Z. Nach ein paar vergeblichen Versuche und mit dem Wissen, das MeshLab ein sehr cooles und mächtiges Werkzeug zum Anschauen von 3D-Modellen und zum Auffinden von Mesh-Fehlern ist. Bestimmt kann man damit auch toll reparieren, aber mein bisher erworbenes Wissen mit MeshLab reichte dazu nicht aus. Und irgendwie hatte ich gerade keine Lust, mich noch mehr reinzufuchsen.

Also nach weiteren Tools gesucht und auf MeshMixer von Autodesk gestoßen.

Autodesk Meshmixer

Mein erster Eindruck von Meshmixer war: "Na, das sieht ja aufgeräumt aus. Ob der was kann?". Kein Wunder, ich kam ja auch gerade von vor Funktionen strotzenden MeshLab.

Aber lasst euch nicht täuschen: das Ding kann viel in Sachen Reparieren und Mesh-Fehler finden. Nur geht das fast alles komplett automatisch und darum braucht es gar nicht so viele Menüs und Knöpfe.

Die Magie verbirgt sich hinter dem Button Analysis. Aber zuerst das Modell über Import (+) importieren. Dann Analysis und danach Inspector anklicken und schließlich auf Inspect and Repair Mesh Defects.

Und Simsalabim erscheint ein gut sicherbarer roter Punkt, der zeigt, wo der Fehler steckt:



Sofort ist klar, dass es einen Fehler gibt und wo genau der ist. Ich brauche nicht lange suchen, sondern kann schnell den Fehler hereinzoomen:



Ein Klick auf Auto Repair All löst den Fehler dann auf, indem die Überlappung entfernt wird. Die geschieht dadurch, dass die fehlerhafte Kante entfernt wird und dann die dadurch geöffneten Flächen wieder geschlossen werden. Das sieht jetzt nicht schön aus, aber es behebt den Fehler.

So können wir das reparierte Modell exportieren und dann auch in OpenSCAD tadellos importieren und weiter bearbeiten. Dort können wir mit einem eigenen Quader ja die Wand wieder gerade und länger oder kürzer machen, so dass es wieder gut aussieht und sich leichter drucken lässt.

Youtube-Video

Ich habe zu dem Thema auch ein Video gemacht und bei Youtube veröffentlicht:



Quellen, Literaturverweise und weiterführende Links