- µ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
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
µcad est basé sur Manifold, donc davantage centré mesh que BREP comme KCL
KCL peut aussi être étendu à d’autres noyaux
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é
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
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
Il existe aussi des projets comme Fornjot qui tentent de nouveaux noyaux
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