3D Konstruktion mit OpenSCAD

  • Hallo Stefan,


    Bevor ich es noch vergesse, hier ist nochmal ein einfaches und langweiliges Ergebnis aus meiner Projektesammlung gezeigt, wenn man mit primitiven geometrischen Formen in OpenSCAD programmatisch spielt. Also Kugeln mit wenigen Befehlen dehnen, schrumpfen und aushöhlen, um geschmeidige gekrümmte Oberflächen für einen kugelförmigen Führerstand zu erzeugen. Eine gute Übung wäre, die Form eines Hühnereis mittels einer mathematischen Formel in OpenSCAD exakt zu definieren und der Rest ist wirklich einfach. Dabei wären u.a. diese wichtigen Grundbefehle sphere(...) und scale([...]) so wie die erweiterten Befehle hull(...) und minkowski(...) zu benutzen, worüber sehr viel Dokumentation und Tutorials auch als Videos im Internet gibt.


    Gruss,


    Johannis

  • Hallo liebe openSCAD-Freunde,


    Ich wollte mich kurz mal ueber die Wichtigkeit des unsinnig erscheinenden Befehls cube(0); auseinandersetzen. Dieser Befehl symbolisiert den Urknall bei der Geburt eines komplizierten 3D-Modells, was sich sehr dramatisch anhört, aber der Beweis folgt weiter unten, denn "Grosse Dinge haben einen kleinen Anfang", wie es frei uebersetzt im SciFi-Film Prometheus zu hören war. Dieser Befehl dient als Platzhalter fuer noch nicht im Kopf des Kontrukteurs ausgereifte Teilkomponenten, so dass dieser Platzhalter zum geeigneten Zeitpunkt durch komplexen SCAD-Code ersetzt werden kann. Man könnte statt cube(0); auch sphere(0); bzw. cylinder(0); schreiben, aber cube(0); ist viel kuerzer in der Schreibweise und stellt einen unsichtbaren und unendlich kleinen Wuerfel dar. Also man fängt mit dem Programmieren sehr abstract an und spezifiziert später schrittweise bis zum Detail, ohne dass das Testen der Teilkomponenten in der Zwischenschritte gestört wird. Hier ein Beispiel im eigenen primitiven Programmierstil, um das Thema der Abstrahierung dem openSCAD-Einsteiger verständlicher zu machen:

    Code
    // Phase I
    
    LOK_TYP="Vectron";
    
    dasModell(LOK_TYP);
    
    module dasModell(welches){
     cube(0);
    };

    Bei jeder Programmierphase wächst der Code, zuerst langsam und dann schnell, ohne die Uebersicht zu verlieren. Der Befehl cube(0); erscheint immer wieder, aber rueckt weiter runter zu den untergeordneten Unterroutinen, wo man schrittweise von der Abstrahierung zur Konkretisierung uebergeht.

    Die Unterteilung in mehrere Unterroutienen module abc(u,v,w,...,x,y,z){...}; und deren Benennung sollte die Logik der Montage des später 3D-gedruckten Modells aus zerlegbaren Teilkomponenten folgen. Es wäre klug eine eigene erweiterbare Bibliothek von Unteroutienen zu sammeln, die dann bei Bedarf abgerufen werden können. Die Benennung der Unterroutinen und der variablen Uebergabeparameter sollten beschreibend sein, so dass auch nach langer Unterbrechung der Programmiercode lesbar und verständlich ist. So entwickelt der Konstrukteur einen "sprechenden" Programmiercode, der ihm hilft, evtl. Fehler aufzudecken und zu korrigieren, um letztendlich die gewuenschte Modellform zu optimieren.

    Die Abhängigkeitshierarchie der Unterroutinen untereinander muss wegen der besseren Uebersicht sinnvoll ueberlegt sein. Man kann Unterroutinen auch in späterer Programmierphase in der Hierarchie nach oben oder nach unten verschieben, falls es einen besseren Sinn macht. Der uebergebene Wert +1 oder -1 indiziert die Richtung zur Orientierung und evtl. Rotation der betreffenden Teilkomponente um die Z-Achse, z.B. vorderes oder hinteres Drehgestell, vorderer oder hinterer Stromabnehmer, linkes oder rechtes Fuehrerstandsfenster, linke oder rechte Pufferbohle, oberer oder unterer Seitenlueftungsschacht, obere oder untere Zierleiste, usw.

    ...und wo weiter, die Codezeilen wachsen und wachsen mit mehr vordefinierten Konstanten verfeinert bis zur allerletzten Programmierphase mit wiederholenden Zwischentests. Auch wenn man noch nichts vom 3D-Modell sieht, trotzdem ist das abstrakte virtuelle Geruest so ungefähr fertig durchdacht, um dannach mit der genauen Definition und Positionierung der kleineren und kleinsten Teilkomponenten auf Detailebene in den nächsten Programmierphasen anzufangen.


    Fazit: das abstrakte Programmieren von mehreren 3D-Modellen mit ähnlicher Körperanatomie mittels openSCAD lohnt sich auf langer Sicht, wobei der Platzhalter cube(0); eine wichtige Rolle spielt, falls man effizient konstruieren und sich unnötige Wiederholungen bei jedem neuen Projekt ersparen will.


    Gruss,


    Johannis

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!