2 Punkte von GN⁺ 2025-11-25 | 1 Kommentare | Auf WhatsApp teilen
  • µ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

 
GN⁺ 2025-11-25
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.

  • 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.

    • Diese Unmittelbarkeit ist OpenCSG zu verdanken, das den Stencil Buffer der GPU nutzt (opencsg.org).
      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.
    • Es scheint ein Plugin mit Vorschau für VS Code zu geben (zugehörige Dokumentation).
    • Eine separate Viewer-/Preview-Funktion ist in Entwicklung und wird offenbar vom Prototype Fund gefördert.
  • 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.

    • Die Stärke von OpenSCAD ist, dass programmatisches Modellieren möglich ist; die Schwäche ist, dass dafür mathematisches Denken nötig ist.
      Es gibt auch Projekte wie Fornjot, die neue Kernel ausprobieren.
    • Wer ein GUI-basiertes Tool möchte, dem würde ich SolveSpace oder Dune3D empfehlen.
    • Auch FreeCADs neues UI und die OpenSCAD-integrierte Version sind ziemlich ordentlich.
    • Aber aus der Sicht von jemandem, der es seit 2020 nutzt, sind die grundlegenden Probleme immer noch dieselben, nur der Renderer sieht etwas besser aus.
  • 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.

    • FreeCAD hat BIM-Funktionen (Building Information Modeling) und eignet sich deshalb für Architekturentwürfe.
    • Wenn du wiederkehrende Strukturen möchtest, könnte build123d passend sein.