URL:     https://linuxfr.org/users/yboy360/journaux/description-de-piece-en-3d-avec-cad-dsl
Title:   Description de pièce en 3D avec CAD-DSL
Authors: YBoy360
Date:    2026-10-30T09:22:02+01:00
License: CC By-SA
Tags:    cad, freecad, occt et groovy
Score:   4


Utiliser un langage pour décrire une pièce en CAO peut s’avérer efficace dans certains cas d’usage : motifs répétitifs, contours semblables, pièces procédurales, instances paramétrables … tout en fournissant la légèreté, et les possibilités de merge d’un programme textuel classique. Enfin, efficacité de l’IA pour créer ces programmes itérativement par rapport à cliquer sur une interface.

Pour [CAD DSL](https://github.com/Taack/cad-builder/tree/main) l’inspiration vient principalement de 2 projets Python :

* [PyCAO](https://linuxfr.org/users/lelama/journaux/pycao-modeleur-3d-en-python), présenté ici même, un programme en Python avec son propre noyau de CAO, qui permet de façon concise de faire des assemblages. L’exemple avec le vélo m’avait vraiment captivé ;
* [CAD Query](https://github.com/CadQuery/cadquery) qui propose un langage inédit de type sélecteur CSS (sous forme d’une String), pour sélectionner les objets à modifier. CAD Query utilise le noyau de feu Matra Datavision, OCCT.

Ces 2 projets diffèrent d’un OpenSCAD, qui me semble plus orienté “forme procédurale”.

CAD DSL a plusieurs spécificités :

* Nous utilisons un DSL statiquement typé et compilé ;
* Le noyau est au choix : FreeCAD ou OCCT ;
* Nous couvrons la création de [corp, de part](https://github.com/Taack/cad-builder/blob/main/docs/dsl.adoc) (l’instance d’un corps avec une position, une couleur), [d'assemblage](https://github.com/Taack/cad-builder/blob/main/docs/assemblies.adoc) de part (récursivement) et l’anim. 

Pour FreeCAD, nous générons un fichier Python qui est ensuite exécuté avec FreeCADCmd. Cette solution permet ensuite d’utiliser FreeCAD pour éditer l’assemblage décrit par le DSL. Il y a 2 mode, **splitted** ou chaque corps dispose de son fichier ou un seul fichier contenant tout. 

Pour OCCT, le link entre OCCT et la JVM est réalisé avec JExtract, qui permet d’appeler du C++ très simplement à partir de Java. Pour les gros modèles, la solution OCCT est plus rapide, elle est en partie multi-threadée.

Le fait d’utiliser la JVM offre également la possibilité de redistribuer des Jar compilés, portables. Groovy permet de créer des scripts gérant les dépendances de façon portable, ces avantages peuvent être importants dans le cas ou la redistribution des sources n’est pas envisageable (et offre de très bonnes performances)

Intellij CE, avec le plugin [CAD DSL](https://plugins.jetbrains.com/plugin/35532-cad-dsl?noRedirect=true) permet de visualiser, sélectionner et auto-compléter le DSL. 

Pour le moment, les artefacts ne sont pas publiés sur Maven, vous devez compiler et les installer dans maven local (je peux aider, les instructions se trouvent dans la page [usage](https://github.com/Taack/cad-builder/blob/main/docs/usage.adoc)).








