2 points par GN⁺ 2025-11-25 | 1 commentaires | Partager sur WhatsApp
  • µcad est un langage de programmation pour la CAO open source implémenté en Rust, ainsi qu’un système de géométrie textuel qui définit des esquisses 2D et des objets 3D en code et les exporte en STL et SVG
  • Au cœur du langage se trouvent des objets géométriques paramétriques ; il combine des formes de base via des opérations booléennes pour créer des géométries complexes, puis les rend dans des formats destinés à l’impression 3D et à l’usinage CNC
  • Il utilise un système de types statique et des littéraux Quantity basés sur les unités pour définir des modèles avec des valeurs comme 50mm, 10°, 50%, et fournit un système de types où le type Models construit un arbre de modèles géométriques
  • Grâce aux modules, fonctions, à l’atelier part, à l’instruction use, aux bibliothèques standard comme std::geo2d et std::geo3d, ainsi qu’à la fonctionnalité std::import pour importer des données TOML, il permet de mettre en place du code de conception réutilisable et une modélisation pilotée par les données
  • C’est un projet à suivre pour les utilisateurs qui recherchent un workflow CAO programmatique, avec exemples, documentation et ressources de live coding

Présentation de µcad

  • µcad est un langage de programmation CAO open source qui permet de définir et de générer en code des esquisses 2D et des objets 3D
    • Son concept central est la modélisation géométrique paramétrique
  • Il permet de combiner des formes de base pour créer des géométries complexes, puis de rendre le résultat en STL et SVG afin de l’utiliser pour l’impression 3D ou le travail CNC

Conception du langage et approche de modélisation

  • µcad est un langage de modélisation paramétrique qui structure les modèles autour de définitions géométriques avec paramètres
    • Les formes sont déclarées en code, et de nombreuses variantes peuvent être générées simplement en modifiant les paramètres
  • Il assemble Sphere, Cube, Cylinder et autres par combinaison booléenne, puis crée des formes 3D via la révolution, les répétitions et les transformations
  • Des exemples comme CsgCube, Spirograph, Gears et Dome montrent différents motifs de modélisation : génération 3D à partir d’esquisses 2D, structures répétitives, profils d’engrenages, etc.

Système de types et littéraux d’unités

  • µcad utilise un système de types statique et les variables y sont immuables
  • Le type Quantity permet d’utiliser directement les unités mm, °, % dans la construction des modèles
    • Des notations comme 10°, 4m², 50% peuvent être employées telles quelles comme paramètres de modèle
  • Le type Models est une structure qui représente un arbre de modèles géométriques et contient la structure en nœuds d’un modèle de CAO basé sur le code

Système de modules et bibliothèque standard

  • La composition modulaire à l’aide de mod, use, fn, part permet de diviser de grands conceptions en plusieurs unités de code
  • Des bibliothèques standard comme std::geo2d, std::geo3d, std::math et std::ops prennent en charge les opérations géométriques, les mathématiques, les matrices et la construction d’esquisses
  • part est utilisé comme unité pour créer et transformer des esquisses et des pièces 3D

Import de données et débogage

  • std::import permet d’importer des paramètres depuis des fichiers TOML pour les répercuter dans le modèle
    • Une manière simple d’injecter dans le modèle les spécifications de pièces existantes
  • Des outils comme std::debug::assert_eq permettent de valider les valeurs importées

Chaîne d’outils et installation

  • Le CLI Rust microcad-cli permet d’exécuter et de rendre les modèles
    • Installation avec cargo install microcad-cli
    • Le projet est actuellement en phase alpha et continue d’ajouter des fonctionnalités
  • microcad-viewer permet de visualiser les rendus
  • Le développement du dépôt se fait sur codeberg.org et la distribution via crates.io

Exemples et ressources de live coding

  • De nombreux exemples, comme Spirograph, Lego Bricks, Gears et Dome, sont publiés sur le blog officiel
    • Ils montrent des usages de la CAO programmatique, comme la génération de profils d’engrenages, la modélisation de spirographes ou la création de structures en dôme
  • Tous les exemples sont fournis avec leur code et des vidéos de live coding, ce qui permet de comprendre progressivement la manière d’utiliser le langage

État du projet

  • Le projet est encore à un stade précoce et continue de s’étendre
  • Le travail de documentation autour de « The µcad book » est en cours pour structurer l’ensemble du langage

1 commentaires

 
GN⁺ 2025-11-25
Avis Hacker News
  • Il faudrait retirer la mention de LEGO du site web et des exemples
    LEGO est très strict sur la protection de sa marque et ne veut pas que des tiers utilisent son nom
    L’entreprise craint que la marque ne devienne un nom générique et perde ainsi sa protection juridique
    Article lié : "Lego sues Dutch firm over anti-terror blocks using name and shape" (lien archive)

  • Ce serait bien d’afficher directement sur la page d’accueil un exemple de code simple et le croquis généré

  • J’ai utilisé zoo et son langage KCL pour écrire de la CAO basée sur la représentation par frontières (BREP)
    µcad semble poursuivre le même objectif
    Personnellement, je préfère l’approche par pipeline de KCL
    En revanche, zoo impose un noyau cloud-only, ce qui crée une forte dépendance fournisseur que je trouve frustrante
    On ne voit pas encore clairement comment µcad résout ce problème

  • Le meilleur aspect d’OpenSCAD, c’est qu’on peut enregistrer le code puis voir immédiatement le résultat dans la vue 3D
    Je me demande si ucad permet un workflow avec ce même niveau d’immédiateté

    • Cette immédiateté vient d’OpenCSG, qui utilise le stencil buffer du GPU (opencsg.org)
      Le principe consiste à dessiner rapidement en 2D à l’écran sans calcul réel d’intersection 3D
      OpenSCAD a abstrait cette architecture sous forme d’AST pour pouvoir l’envoyer à différents moteurs comme OpenCSG, CGAL ou Manifold
      En théorie, n’importe quel logiciel de CAO pourrait l’implémenter, mais c’est difficile à réaliser
    • Il semble exister un plugin avec prévisualisation dans VS Code (documentation liée)
    • Une fonction de visualiseur/prévisualisation distincte est en cours de développement et aurait reçu le soutien du Prototype Fund
  • J’ai essayé OpenSCAD et CadQuery, mais c’était pénible à cause des limitations de l’UI et du noyau
    Par rapport à Onshape ou Fusion 360, les fonctionnalités restent limitées
    FreeCAD a beaucoup progressé, mais reste encore difficile à prendre en main pour les débutants et intermédiaires
    J’espère qu’un jour la CAO open source deviendra une vraie alternative

    • L’avantage d’OpenSCAD, c’est la possibilité de modéliser par programmation ; l’inconvénient, c’est que cela demande une vraie aisance en maths
      Il existe aussi des projets comme Fornjot qui tentent de nouveaux noyaux
    • Si vous voulez un outil orienté GUI, je recommande SolveSpace ou Dune3D
    • La nouvelle UI de FreeCAD et sa version intégrée avec OpenSCAD sont aussi plutôt réussies
    • Mais pour quelqu’un qui l’utilise depuis 2020, les problèmes de fond restent les mêmes ; seul le moteur de rendu est un peu plus agréable visuellement
  • Ce projet n’a pas de solveur de contraintes (Constraint), ou du moins aucun plan n’est documenté à ce sujet
    J’aimerais éviter d’avoir à maintenir manuellement des formules trigonométriques pour des contraintes simples

  • C’est dommage qu’il n’existe pas de version exécutable directement dans un environnement de notebook web, comme le tutoriel Lego brick peut le laisser espérer
    Une expérience sans installation, comme le crash course SCAD de MachineBlocks, serait appréciable

  • Je me demande si c’est plus proche d’un remplaçant d’AutoCAD
    J’aimerais aussi savoir s’il y a une compatibilité de formats de fichiers pour l’import dans Revit, etc.

  • Projet vraiment intéressant
    En tant que programmeur qui déteste manipuler la CAO à la main, cette approche me paraît bien plus intuitive
    Cela dit, en regardant l’exemple d’engrenage, j’ai l’impression qu’il faut lire la documentation attentivement pour comprendre les primitives de base de la bibliothèque
    Si la communauté grandit, il y aura sans doute davantage de formes disponibles

  • Je cherchais un langage de CAO qui gère bien les itérations
    En concevant ma maison, je me suis dit qu’il serait pratique d’automatiser les détails de fabrication des murs avec du code à base de boucles
    Mais sans boucle for, ce genre de travail devient trop difficile, donc j’ai fini par abandonner

    • FreeCAD a des fonctions BIM (modélisation des informations du bâtiment) adaptées à la conception architecturale
    • Si vous cherchez des structures répétitives, build123d pourrait être plus approprié