3D Konstruktion mit OpenSCAD – Einführung

  • Hi.
    Da hier noch so gut wie gar nichts zu OpenSCAD zu finden ist und ich das Programm einfach genial und genial einfach finde, dachte ich, ich stelle den Einsteigerkurs, den ich eigentlich für ein Modellbahn- Forum geschrieben habe, hier auch mal ein. Wenn es also ein paar zu viele Bezüge zur Modellbahn gibt, bitte nicht wundern. Aber das hier Gezeigte lässt sich 1 zu 1 auch in anderen Bereichen gebrauchen. Also los geht's.

    Ich möchte euch einen kleinen Schnupperkurs in 3D Konstruktion mit dem Open Source Tool OpenSCAD geben. Ich bin selbst auch noch keine Leuchte, aber vielleicht ist gerade das ein Vorteil. Für jemand, der tagtäglich mit einem Programm arbeitet ist es oft sehr schwer, Probleme zu sehen, die ein Einsteiger vielleicht haben könnte. Da ich selbst noch Einsteiger bin, stolpere ich bestimmt über alle denkbaren und auch einige undenkbare Fallstricke…
    Es gibt sehr viele Tools, um 3D Objekte am PC zu konstruieren. Von fast schon “kindertauglichen” Geschichten wie Tinkercad bis hin zu Hochprofessionellen Tools wie AutoCAD oder Solidworks. Darunter sind auch einige, die man, zumindest als Privatperson, kostenlos nutzen kann. Das trifft z.B. auf FreeCAD oder Fusion 360 zu, Auch OpenSCAD gehört als OpenSource Software natürlich zu den kostenlosen Programmen. Im Gegensatz etwa zu Fusion 360 darf man OpenSCAD auch im professionellen Umfeld kostenlos verwenden, wenn man mag.

    Was unterscheidet OpenSCAD von dem wesentlich bekannteren FreeCAD? Nun, in FreeCAD hat man ein aufwändiges GUI in dem man auf unzähligen “Workbenches” unglaublich viele komplizierte Sachen machen kann. Die meisten anderen Tools, auch die Professionellen, sind da ganz ähnlich gestrickt.

    OpenSCAD ist einfach anders und dadurch zumindest für mich viel einfacher und leichter zu verstehen. In OpenSCAD gibt es zwar auch ein GUI, das dient aber vorrangig dazu die eigene Arbeit ansehen zu können. Das eigentliche Konstruieren geschieht in einem Text Editor. Ein entsprechender Editor ist eingebaut. Man kann aber auch extern, z.B. mit Notepad++ arbeiten. Mir hat der interne Editor bisher immer gereicht. Auch hier erschafft man sein Modell aus Grundkörpern, die skaliert, verschoben, addiert, subtrahiert,…. werden. Das Grundprinzip ist in vielen derartigen Programmen ganz ähnlich. Allerdings werden die Manipulationen an den Körpern in der GUI und nicht in Formeln durchgeführt. Mir behagt das klare Tippen von exakten Positionen und Abmessungen einfach mehr, als etwa ein Körper mit der Maus so zu verändern, wie ich ihn benötige. OpenSCAD ist so eine Art Programmieren, aber mit wenigen, leicht zu verstehenden Befehlen und Funktionen.
    Da man wie in “richtigen” Programmiersprachen auch mit Variablen arbeiten kann, hat OpenSCAD ein Alleinstellungsmerkmal, die freie Parametrierbarkeit. Nicht umsonst sind nahezu alle parametrierbaren Designs auf Thingiverse mit OpenSCAD hergestellt worden. Was bedeutet diese freie Paramtrierbarkeit nun genau?. Dazu werden wir in unserem ersten Beispiel eines Servo- Halters für verschiedene RC Servos noch mal genauer anschauen. Für jetzt so viel… Man legt am Anfang einige Variablen fest und weist ihnen Werte zu. Sagen wir mal:

    $l = 7;

    Wenn wir nun irgendwo in unserem “Programm” nun $l (für Länge) einfügen wird hier immer der Wert 7 genutzt, wie wir es festgelegt haben. Durch dieses Definieren am Anfang kann man nur durch anpassen dieses einen Wertes das Objekt in ganz unterschiedlichen Größen und Formen erstellen.

    Da ich sonst in AutoIt programmiere und hier alle Variablen ein $ vorangestellt haben müssen, habe ich mir auch in OpenSCAD angewöhnt, eine Variable mit dem vorangestellten $ zu kennzeichnen. Das ist bei OpenSCAD nicht nötig. Man kann hier die Variablen völlig frei benennen, ganz nach eigenem Geschmack. Also eben auch mit einem voran gestellten $… Das erhöht die Übersicht, zumindest für mich…

    Für unser erstes Übungsobjekt, einen Halter für RC Servos zum Weichen schalten, Tore öffnen, Signale stellen usw… ist die Parametrierbarkeit schon fast zwingend. Schließlich gibt es Dutzende von verschiedenen Größen für RC Servos. Und selten kommt man mit nur einer Größe aus. Wenn wir nun von vorne herein ein Auge darauf haben, müssen wir nur noch, wenn uns eine neue Servo- Größe unter kommt, die Abmessungen in den Anfang unseres Designs übertragen und der Halter sollte sofort wieder passen.

    Doch bevor wir unseren Servo Halter konstruieren, müssen wir einige ganz elementare Basics lernen. Das lässt sich leider nicht vermeiden. Auf der nächsten Seite stelle ich zuerst die GUI von OpenSCAD vor und zeige den Umgang mit Grundkörpern.

    -------------------------------------
    Danke fürs lesen, Claus

  • Nun geht es um die Grundlagen, um das GUI und die ersten einfachen Objekte.

    Ich gehe davon aus, das OpenSCAD bereits installiert worden ist. Also starten wir das Programm einfach mal:

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Links ist der schon erwähnte Editor zu finden, in dem wir später unsere Modelle kreieren. Rechts ist oben die Vorschau unserer Konstruktion und darunter ein oder zwei Boxen, die Informationen anzeigen. Zum einen die Konsole, in der alle Ausgaben von OpenSCAD anzeigt und eventuell (kann man ein- und ausschalten) eine Fehlerbox, in der explizit Fehler aufgelistet werden. Mir reicht die Ausgabe in der Konsole, weswegen ich die Fehlerbox in der Regel ausblende. Das geht oben im Menü unter „Fenster“.

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Oberhalb des Editors und unterhalb der 3D Ansicht gibt es je eine Menüleiste mit verschiedenen Knöpfen. Die werde ich dann erklären, wenn wir sie brauchen. Nun können wir beginnen, unser Objekt zu konstruieren. Aber halt, bevor wir anfangen, noch ein kleiner Exkurs zum Thema „Kommentare“. Ein Kommentar ist etwas, das es in jeder Programmier- oder Skript- Sprache gibt. Allerdings macht ein Kommentar absolut gar nichts. Alle Kommentare werden in allen Sprachen vollständig ignoriert. Also wozu gibt es sie überhaupt? Nun, das ist ganz einfach zu erklären. Kommentare dienen dazu, den Code leichter lesbar und für andere Leute verständlicher zu machen. Auf diese Art kann man also bestimmte Abschnitte mit einer Art „Überschrift“ versehen oder auch z.B. Copyright- Notizen im Code verewigen. Außerdem kann man so bestimmte Bereiche vorübergehend deaktivieren, wenn man am Testen ist… Kommentare werden bei OpenSCAD mit // eingeleitet. Alles, was in einer Zeile nach einem Doppelslash // steht, wird einfach ignoriert.

    Wir geben also eine Überschrift in den Editor ein:

    // OpenSCAD Tutorial

    und drücken anschließend die Enter Taste. Nun gibt es eine zweite Zeile, was man an der 2 erkennen kann.

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Jetzt werden wir endlich unseren ersten Körper erzeugen. Machen wir z.B. mal einen Würfel mit exakt 10 mm Kantelänge. Das geht so:

    cube(10);

    cube ist der Befehl zum erzeugen eines Kubus. In den Klammern stehen die Maße und das Semikolon schließt den Befehl ab. Darauf muss man achten, denn wenn auch nur ein Semikolon am Ende fehlt (wird viel zu gerne vergessen, kann ich euch sagen), funktioniert gar nichts mehr.

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Man kann sofort sehen, das unterschiedliche Farben für den Text verwendet werden. Das nennt sich „Syntax- Hervorhebung“ und ist ein elementarer Bestandteil eine guten Editors. Auf diese Art kann man sofort sehen, um was es sich bei dem Code handelt. Türkis ist ein Kommentar, Blau ein Befehl und Rot ein Wert. Andere Editoren verwenden andere Farben, aber der Effekt ist stets derselbe. Man kann die einzelnen Teile leichter auseinander halten, was ungemein hilfreich ist.

    Damit haben wir unseren Würfel erzeugt. Aber wir sehen noch gar nichts in der Vorschau. Dazu müssen wir die Vorschau aktualisieren. Das geschieht nicht automatisch, um nicht ständig Fehlermeldungen zu bekommen, während man noch am Tippen ist. Um das zu machen, muss man nur auf den „Vorschau“ Knopf klicken. Den gibt es sowohl oberhalb des Editors als auch unterhalb der 3D Ansicht. Es ist der Knopf mit dem >> und dem gestrichelten Würfel drauf, der Knopf ganz links unter der 3D Ansicht. Wenn euch die Funktion eines Knopfes nicht klar ist, einfach mal die Maus darüber fahren und einen Moment warten. Dann bekommt man eine kurze Erklärung. Falls es euch lieber ist, die Vorschau lässt sich auch durch die Taste F5 ausführen. Egal wie ausgelöst, der Effekt ist immer derselbe. Wir sehen endlich unser erstes Objekt.

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Wir sehen nun in der 3D Ansicht eine Würfel mit exakt 10 mm Kantenlänge.

    Apropos STL Export. Wenn wir wollen, können wir den Würfel jetzt schon als STL exportieren und ausdrucken. Vor dem Export muss das Objekt aber noch gerendert werden, denn die Vorschau ist nur eine grobe Skizze, nicht aber das fertige Objekt. Das geht mit dem Knopf direkt rechts neben dem Vorschau Knopf in beiden Menüleisten oder mit F6. Bei komplexen Objekten kann das durchaus mal eine Weile dauern, hier geht es aber genau so schnell wie die Vorschau. Auf meinem, nicht sehr starken PC dauert das Rendern genau 4/100 Sekunden…

    Das Rendern ist erledigt und wir exportieren spaßeshalber den Würfel mal als STL Datei, wie man sie zum Drucken benötigt.

    Dazu klicken wir auf den Export Knopf. Das ist der, auf dem STL steht und der sich in der Menüzeile über dem Editor direkt rechts neben dem Rendern Knopf befindet. Nun können wir einen Namen und den Speicherort für unsere STL Datei festlegen. Ich habe die Datei unter „Würfel_10“ abgespeichert. Diese STL Datei können wir direkt in unser Slicer Programm (ist immer beim 3D Drucker dabei) einlesen. Bei meinem Elegoo Mars ist das Programm Chitubox dabei. Bei eurem Drucker könnte auch ein ganz anderes Programm dabei sein. Die Aufgaben dieser Programme sind aber eigentlich immer dieselben.

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Das war es dann auch schon. Wir haben ein 3D Objekt erstellt, welches man direkt ausdrucken oder zu einem Dienstleister senden kann.

    Eigentlich könnten wir jetzt aufhören, oder? Spaß beiseite, das war erst der Anfang. Aber zumindest haben wir den kompletten Prozess einmal durchgespielt…

    In der Zeit, die ich brauche, um in FreeCAD die passende Workbench auszuwählen, habe ich in OpenSCAD den Würfel schon im 3D Drucker…

    Das zu lesen dauert 1000 mal länger als es zu machen, von daher…


    Im nächsten Teil geht es dann um das verändern der verschiedenen Grundkörper.

    -------------------------------------
    Danke fürs lesen, Claus

  • Im dritten Teil werden wir verschiedene Grundkörper erzeugen und verändern.

    Den Würfel haben wir ja mit dem Befehl „cube“ erzeugt. Cube kann aber mehr als Würfel erzeugen. Dazu müssen wir statt der Kantenlänge eben drei Werte, Länge, Breite und Höhe angeben…

    cube([10,10,10]);

    Die eckigen Klammern gruppieren zusammengehörende Werte. Sie dürfen auch nicht fehlen, da sonst ebenfalls nichts mehr geht. Die Werte oben ergeben einen Würfel mit 10 mm Kantenlänge. Das hatten wir doch schon… Ja, aber nun können wir statt einem Würfel einen Kubus mit unterschiedlichen Kantenlängen erzeugen. Dazu müssen wir nur einen oder mehrere der Werte in der eckigen Klammer verändern. Also z.B.

    cube([20,10,10]);

    Das ergibt einen Kubus von 20 x 10 x 10 mm Abmessungen.

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Durch verschiedene Werte kann man ganz unterschiedliche Objekte erzeugen, ganz wie man sie braucht. Spielt mal ein wenig mit unterschiedlichen Werten herum, um eine Gefühl dafür zu bekommen. Falls ihr eine genauere Größenangabe als 1 mm benötigt, könnt ihr auch Nachkommastellen angeben. Allerdings darf dafür kein Komma, sondern wie im Angelsächsischen Raum üblich, muss ein Punkt verwendet werden.

    cube([20,15,0.5]);

    Sonst würde es ja ein Durcheinander mit den verschiedenen Achsen geben, die ja durch Kommata getrennt werden. Obige Werte ergeben eine Art Platte mit 0,5 mm Dicke und 20 x 15 mm Abmessungen.

    Es gibt noch einige andere Grundkörper, die wir uns nun anschauen wollen. Andere Grundkörper benötigen natürlich auch andere Parameter als ein Kubus, der mit Länge, Breite und Höhe vollständig beschrieben ist.

    Das nächste Objekt was wir uns anschauen wollen, ist eine Kugel (englisch Sphere). Die benötigt entweder den Durchmesser oder den Radius, um vollständig beschrieben zu sein. In OpenSCAD kann man beides verwenden, also r = 5 oder d = 10 liefert dasselbe Ergebnis. Der genaue Befehl lautet also

    sphere(d = 10);

    und ergibt folgendes:

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Was zum einen auffällt, ist das die Kugel mit dem Mittelpunkt auf dem Nullpunkt des Koordinatensystems liegt, wohingegen der Würfel mit eine Ecke auf dem Nullpunkt positioniert wurde. Beim Würfel (und Zylinder) kann man das umstellen, sofern gewünscht. Dazu muss man hinter den Werten für die Abmessungen mit einem Komma getrennt „true“ oder „center = true“ einfügen.

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Doch zurück zur Kugel. Wenn wir uns die Vorschau genauer anschauen, so sieht das eher wie eine 1970er Jahre Diskokugel aus als eine schöne glatte Kugel. Das liegt daran, das alle 3D Programme intern mit Dreiecken rechnen. Daraus lässt sich mit dem geringsten Aufwand fast jede Form erzeugen. Nur alles, was wirklich rund ist, erfordert extrem kleine und extrem viele „Dreiecke“, bis wir das als „echte“ Rundung akzeptieren können. Da das aber viel Rechenaufwand viel Zeit und viel Speicherplatz bedeutet, kann man die „Glattheit“ der Rundungen selbst festlegen. Je glatter das Objekt wird, desto mehr Dreiecke sind nötig. Bei einer Kugel gibt es deswegen zusätzliche Parameter, um die Oberfläche im Detail zu beeinflussen. Wir verwenden der Einfachheit halber vorrangig nur die „Auflösung“, welche mit $fn = xxx festgelegt wird. Also

    sphere(d = 10, $fn = 300);

    ergibt dann das:

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    So sieht die Kugel schon eher nach Kugel aus. Um mal eine Vorstellung vom Rechenaufwand zu bekommen. Die „Diskokugel“ hat 18 tausendstel Sekunden für die Vorschau benötigt, die glattere Version immerhin schon 133 Tausendstel, also fast 8 mal so lange. Je größer der Wert für $fn, desto glatter wird die Kugel, desto länger dauert das Rendern und desto größer wird die STL Datei. Aus Erfahrung heraus weiß ich, das Werte zwischen 100 und 300 gute Ergebnisse bei vertretbarem Aufwand bedeuten.

    Neben Kugel und Kubus gibt es in OpenSCAD noch zwei weitere Grundkörper, Zylinder (englisch cylinder) und Polyeder (Englisch polyhedron). Ein Polyeder kann wirklich jede beliebige Form annehmen und ist der universellste Grundkörper überhaupt. Leider ist er deswegen auch extrem kompliziert. Bisher hatte ich es noch nie nötig, mich damit zu beschäftigen. Womit wir uns hier aber unbedingt noch beschäftigen müssen, ist der Zylinder. Ein ebenfalls sehr nützlicher und vielseitiger Grundkörper.

    Beim Zylinder benötigt man den Durchmesser (d) oder Radius (r), wie bei der Kugel. Zusätzlich muss man aber auch die Höhe (h) angeben:

    cylinder(h=10, d=10);

    Ergibt dann das:

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Genau wie bei der Kugel können wir mit $fn die Seiten glätten.

    cylinder(h=10, d=10, $fn = 300);

    ergibt

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Der Zylinder kann aber noch viel mehr. Man kann auch zwei verschiedene Radien bzw. Durchmesser angeben.

    cylinder(h=10, d1=10, d2=0, $fn=300);

    Damit bekommt man einen Kegel:

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Man kann für d2 auch Werte größer als 0 verwenden,

    cylinder(h=10, d1=10, d2=5, $fn=300);

    das ergibt

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Im Falle des Zylinders kann man mit der Glattheit $fn aber auch ganz andere Effekte erzielen, Wählen wir spaßeshalber mal 4 als Wert für $fn:

    cylinder(h=10, d1=20, d2=0, $fn=4);

    und schon haben wir…

    Externer Inhalt modellbahnblog.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    eine Pyramide.

    Das soll es mit den Grundkörpern gewesen sein. Ihr habt hoffentlich eine Einblick bekommen, was es alles so gibt. Im nächsten Kapitel werden wir die Körper verschieben und modifizieren lernen.

    -------------------------------------
    Danke fürs lesen, Claus

  • Irgendwie klappt das mit den Bildern nicht. In der Vorschau werden sie noch angezeigt aber hier stehen dann nur noch die BBCodes... Ist das in der Software deaktiviert? Ich habe nämlich keine Lust, hier "tausend" Bilder noch mal hoch zu laden, die alle schon auf meinem Blog online sind... Und ohne die Bilder ist der Kurs ziemlich witzlos.

    -------------------------------------
    Danke fürs lesen, Claus

  • Das Verlinken von Bildern auf fremden Sourcen ist deaktiviert. DSGVO lässt grüßen...

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Danke, auch wenn das keine guten Nachrichten sind.
    In keinem anderen Forum, in dem ich unterwegs bin, ist das so wie hier. Wird von der DSVGO auch ganz sicher nicht verlangt. Wäre dem so, würde die DSVGO eine ganze Branche ausrotten. Denn 90% aller Foren hat ja nicht mal eigenen Speicherplatz für Bilder. Da muss man sowieso externe Bild- Hoster verwenden. Wäre das nicht erlaubt, würde das einem Berufsverbot für die Bilder- Hoster gleichkommen.

    So macht es keinen Sinn, hier solche Beiträge einzustellen, Davon hätte ich noch einige, speziell hier im Maker- Bereich. Aber so bringt das nichts.

    Wer sich trotzdem für den OpenSCAD Kurs interessiert, er ist hier zu finden:

    https://modellbahnblog.de/3d-konstruktio…ad-einfuehrung/

    -------------------------------------
    Danke fürs lesen, Claus

  • Es ist nicht nur nicht DSGVO Konform, sondern Hotlinking, was ich persönlich nur ungern unterstützen möchte.
    Bindet man beispielsweise Bilder von der Domain "anderedomain.com" mit dem [img] bzw. <img>-Tag ein,
    so erhält der Server von "anderedomain.com" die IP-Adresse, Browser-Kennung und weitere Daten über den Besucher der eigenen Webseite.
    Gerade erstes, also die IP-Adresse, stellt ein Problem dar.
    Laut DSGVO ist die IP-Adresse personenbezogen und darf daher nur bedingt an Drittanbieter gesendet werden.
    Was nen Witz ist, keine Frage.

    Ist die Quellseite nicht mehr verfügbar, ist auch hier nix mehr zu sehen.
    Oder es kommt oft zum "hotlink" Motiv statt des gewünschten Contents.

    Wer den Opera-Browser verwendet, kann dennoch mit C&P arbeiten.
    Rechte Maustaste, Bild kopieren und dann unter "Dateianhänge" aus Zwischenablage hinzufügen.
    Nicht mehr Klicks als vorher :)

    Ja, ist lästig, wenn man es anders kennt.
    Ist eher eine Frage von Sorgfalt und "wirklich Bock drauf".
    Die Hürde ist ja nun wirklich nur ein bis zwei Klicks mehr.

    Aber selbst das ist rechtlich nicht 100% in Ordnung, weil fremder Content verwendet wird.
    Rechtlich sicherer ist es nur, wenn die Quelle mit angegeben wird.
    Und Safe ist es nur, wenn entweder die Auflösung und Größe extrem schlecht ist und/oder eine Genehmigung eingeholt wurde.
    Wobei die beiden Punkte nicht DSGVO sondern aktuelles Urheberrecht sind.

    Daher geht es hier sogar noch :P

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!