- µcad ist eine in Rust implementierte Open-Source-Programmiersprache für CAD und ein textbasiertes Geometriesystem, mit dem sich 2D-Skizzen und 3D-Objekte per Code definieren und als STL oder SVG exportieren lassen
- Im Zentrum der Sprache stehen parametrische Geometrieobjekte; einfache Formen werden per booleschen Operationen kombiniert, um komplexe Geometrien zu erzeugen und in Formate für 3D-Druck und CNC-Bearbeitung zu rendern
- Mit einem statischen Typsystem und einheitenbasierten Quantity-Literalen lassen sich Modelle mit Werten wie
50mm, 10°, 50% definieren; zusätzlich gibt es ein Typsystem, das mit dem Typ Models Geometriemodell-Bäume aufbaut
- Über Module, Funktionen, die
part-Workbench, die use-Anweisung, Standardbibliotheken wie std::geo2d und std::geo3d sowie die std::import-Funktion zum Einlesen von TOML-Daten lassen sich wiederverwendbarer Design-Code und datengetriebenes Modellieren umsetzen
- Das Projekt ist eine interessante Referenz für Nutzer, die einen programmatischen CAD-Workflow suchen; Beispiele, Dokumentation und Live-Coding-Materialien werden ebenfalls bereitgestellt
Überblick über µcad
- µcad ist eine Open-Source-CAD-Programmiersprache, mit der sich 2D-Skizzen und 3D-Objekte per Code definieren und erzeugen lassen
- Das zentrale Konzept ist parametrische Geometriemodellierung
- Grundformen lassen sich zu komplexen Geometrien kombinieren, und das Ergebnis kann als STL oder SVG gerendert werden, um es für 3D-Druck oder CNC-Arbeiten zu nutzen
Sprachdesign und Modellierungsansatz
- µcad ist eine parametrische Modellierungssprache, deren Modellstruktur sich um geometrische Definitionen mit Parametern aufbaut
- Formen werden im Code deklariert, und durch bloße Änderung der Parameter lassen sich verschiedene Varianten erzeugen
Sphere, Cube, Cylinder und weitere Formen werden durch boolesche Kombinationen zusammengesetzt; über Rotationen (revolve), Arrays und Transformationen entstehen 3D-Geometrien
- Beispiele wie
CsgCube, Spirograph, Gears und Dome zeigen unterschiedliche Modellierungsmuster, darunter 3D-Erzeugung auf Basis von 2D-Skizzen, wiederholte Strukturen und Zahnradprofile
Typsystem und Einheitenliterale
- µcad verwendet ein statisches Typsystem, und Variablen sind unveränderlich
- Über den Typ Quantity können Einheiten wie
mm, ° und % direkt im Modell verwendet werden
- Schreibweisen wie
10°, 4m² oder 50% lassen sich direkt als Modellparameter einsetzen
- Der Typ
Models ist eine Struktur zur Darstellung von Geometriemodell-Bäumen und bildet die Knotenstruktur codebasierter CAD-Modelle ab
Modulsystem und Standardbibliothek
- Mit Modulen auf Basis von
mod, use, fn und part lassen sich größere Entwürfe in mehrere Codeeinheiten aufteilen
- Standardbibliotheken wie
std::geo2d, std::geo3d, std::math und std::ops unterstützen Geometrieoperationen, Mathematik, Matrizen und den Aufbau von Skizzen
part wird als Einheit zum Erstellen und Transformieren von Skizzen und 3D-Teilen verwendet
Datenimport und Debugging
- Mit
std::import lassen sich Parameter aus TOML-Dateien einlesen und in Modelle übernehmen
- So können etwa Normdaten vorhandener Bauteile einfach in ein Modell eingebunden werden
- Mit
std::debug::assert_eq und ähnlichen Funktionen lassen sich importierte Werte prüfen
Toolchain und Installation
- Das Rust-basierte CLI-Tool
microcad-cli dient zur Ausführung und zum Rendering von Modellen
- Installation mit
cargo install microcad-cli
- Aktuell befindet sich das Projekt noch in der Alpha-Phase, und es kommen laufend neue Funktionen hinzu
- Mit
microcad-viewer lassen sich gerenderte Ergebnisse visualisieren
- Die Entwicklung des Repositories findet auf codeberg.org statt, die Distribution erfolgt über crates.io
Beispiele und Live-Coding-Materialien
- Verschiedene Beispiele wie Spirograph, Lego Bricks, Gears und Dome sind im offiziellen Blog veröffentlicht
- Sie zeigen programmatische CAD-Anwendungsfälle wie das Erzeugen von Zahnradprofilen, Spirograph-Modellierung und den Aufbau von Kuppelstrukturen
- Alle Beispiele werden zusammen mit dem Code und Live-Coding-Videos bereitgestellt, sodass sich die Nutzung der Sprache Schritt für Schritt nachvollziehen lässt
Projektstatus
- Das Projekt befindet sich noch in einem frühen Stadium und wird weiter ausgebaut
- Mit der Dokumentation „The µcad book“ wird die Sprache derzeit systematisch aufbereitet
1 Kommentare
Hacker-News-Kommentare
Die Erwähnung von LEGO sollte von der Website und aus den Beispielen entfernt werden.
LEGO ist beim Markenschutz sehr streng und möchte nicht, dass Dritte den Namen verwenden.
Der Grund ist die Sorge, dass die Marke zu einem Gattungsbegriff wird und dadurch Markenrechte verloren gehen.
Verwandter Artikel: "Lego sues Dutch firm over anti-terror blocks using name and shape" (archive-Link)
Es wäre gut, wenn auf der Startseite direkt ein einfaches Codebeispiel und die daraus erzeugte Skizze zu sehen wären.
Ich habe mit zoo und dessen Sprache KCL CAD auf Basis von Boundary Representation (BREP) geschrieben.
µcad scheint dasselbe Ziel zu verfolgen.
Persönlich gefällt mir der Pipeline-Ansatz von KCL besser.
Mein Problem mit zoo ist allerdings, dass dort ein reiner Cloud-Kernel erzwungen wird, was zu starker Vendor-Lock-in führt.
Wie µcad dieses Problem löst, ist noch nicht ganz klar.
µcad basiert auf Manifold und ist deshalb mesh-zentriert, also anders als das BREP-basierte KCL.
KCL kann auch auf andere Kernel erweitert werden.
Das Beste an OpenSCAD ist, dass man nach dem Speichern des Codes das Ergebnis sofort direkt in der 3D-Ansicht prüfen kann.
Ich frage mich, ob in ucad ebenfalls so ein unmittelbarer Workflow möglich ist.
Es rendert schnell auf einem 2D-Bildschirm, ohne echte 3D-Schnittberechnungen durchzuführen.
OpenSCAD hat diese Struktur als AST abstrahiert, sodass sie an verschiedene Engines wie OpenCSG, CGAL oder Manifold weitergereicht werden kann.
Theoretisch lässt sich damit jede Art von CAD umsetzen, praktisch ist die Implementierung aber schwierig.
Ich habe OpenSCAD und CadQuery verwendet, fand sie aber wegen der Einschränkungen bei UI und Kernel unpraktisch.
Im Vergleich zu Onshape oder Fusion 360 fehlt es ihnen an Funktionen.
FreeCAD hat sich ebenfalls stark verbessert, ist für Einsteiger und fortgeschrittene Einsteiger aber weiterhin nicht leicht zu bedienen.
Ich hoffe, dass Open-Source-CAD irgendwann eine wirklich brauchbare Alternative wird.
Es gibt auch Projekte wie Fornjot, die neue Kernel ausprobieren.
In diesem Projekt gibt es keinen Constraint-Solver, oder zumindest ist kein entsprechender Plan dokumentiert.
Ich würde es gern vermeiden, für einfache Constraints ständig Trigonometrie von Hand pflegen zu müssen.
Schade ist auch, dass es keine Version gibt, die sich wie das Lego-Brick-Tutorial direkt in einer Web-Notebook-Umgebung ausführen lässt.
Etwas, das sich wie der SCAD-Crash-Kurs von MachineBlocks ohne Installation ausprobieren lässt, wäre wünschenswert.
Ich frage mich, ob das eher in Richtung eines AutoCAD-Ersatzes geht.
Interessant wäre auch, ob es kompatible Dateiformate für den Import in Revit und Ähnliches gibt.
Das ist wirklich ein spannendes Projekt.
Als Programmierer, der es hasst, CAD von Hand zu bedienen, wirkt dieser Ansatz viel intuitiver.
Beim Gear-Beispiel hatte ich allerdings den Eindruck, dass man die Dokumentation sehr genau lesen muss, um die grundlegenden Primitiven der Bibliothek zu verstehen.
Wenn die Community wächst, werden wahrscheinlich auch mehr Formen hinzukommen.
Ich war auf der Suche nach einer CAD-Sprache mit guter Unterstützung für Wiederholungen (Iteration).
Beim Entwurf eines Einfamilienhauses dachte ich, es wäre hilfreich, Details der Wandkonstruktion mit schleifenbasiertem Code zu automatisieren.
Aber ohne for-Schleifen ist so etwas zu schwierig, deshalb habe ich es am Ende aufgegeben.