OpenSCAD (CSG Code-First) : github.com/openscad/openscad • openscad.org
Pour concevoir un boîtier électronique sur-mesure (coordinateur Zigbee/Thread PoE, support rail DIN, entretoise mécanique ou pièce de rechange en impression 3D), les logiciels de CAO propriétaires imposent souvent des abonnements Cloud restrictifs et des centaines de clics à la souris.
À l’inverse, l’écosystème open-source offre aujourd’hui deux moteurs complémentaires pilotables 100 % par le code et par un agent IA : FreeCAD 1.0+ (modélisation exacte B-Rep OpenCASCADE en Python) et OpenSCAD (géométrie constructive CSG déclarative avec le nouveau moteur Manifold ultra-rapide).
1. FreeCAD 1.0+ : le tournant B-Rep
La sortie de FreeCAD 1.0 a levé les deux verrous historiques de la CAO libre :
- Résolution du Topological Naming Problem (TNP) : Modifier une cote tout en haut de l’arbre de construction ne casse plus les chanfreins ni les congés (fillets) situés dix étapes plus bas.
- Atelier Assembly & VarSets intégrés : Le solveur géométrique Ondsel permet de valider les liaisons mécaniques réelles, tandis que les
VarSetscentralisent toutes les cotes paramétriques (epaisseur_paroi,jeu_impression,insert_M3).
2. Le duo FreeCAD + OpenSCAD piloté par IA
En 2026, combiner FreeCAD, OpenSCAD (avec son backend géométrique Manifold 100× plus rapide que l’ancien moteur CGAL) et un agent de code autonome (Antigravity, Argon 4, Claude Code) change radicalement la conception mécanique :
┌────────────────────────────────────────────────────────────────────────────┐
│ WORKFLOW CAO 3D PAR IA : PROMPT ➔ CODE (PY / SCAD) ➔ PIÈCE 3D │
│ │
│ 1. SPÉCIFICATION MÉCANIQUE │
│ "Boîtier rail DIN 120×80 mm, 4 entraxes M4 (100×60 mm) et alésage Ø24" │
│ │ │
│ ┌───────────────┴───────────────┐ │
│ ▼ ▼ │
│ 2A. VOIE FREECAD PYTHON (`freecadcmd`) 2B. VOIE OPENSCAD (`openscad`) │
│ • Noyau exact B-Rep OpenCASCADE • CSG déclaratif ultra-concis│
│ • Congés/chanfreins analytiques • Backend Manifold multi-CPU │
│ • Contrôle `solid.isValid()` • Export direct `.STL`/`.3MF`│
│ │ │ │
│ └───────────────┬───────────────┘ │
│ ▼ │
│ 3. LIVRAISON PRÊTE À USINER / IMPRIMER (.STEP ISO 10303 + .STL / .3MF) │
└────────────────────────────────────────────────────────────────────────────┘
Quand choisir FreeCAD Python vs OpenSCAD avec un agent IA ?
| Critère | OpenSCAD (.scad + Manifold) | FreeCAD 1.0+ (freecadcmd Python) |
|---|---|---|
| Paradigme | CSG déclaratif (difference(), union(), hull()) | B-Rep analytique (Part, Sketcher, PartDesign) |
| Concision du code | Extrême (15 à 30 lignes pour un support complet) | Modérée (40 à 70 lignes avec assertions topologiques) |
| Congés & Chanfreins | Complexes en CSG pur (nécessite BOSL2) | Natifs et exacts (solid.makeFillet, makeChamfer) |
| Formats d’export | .STL, .3MF, .OFF, .DXF (maillage facettisé) | .STEP (ISO 10303 industriel), .FCStd, .STL, .3MF |
| Cas d’usage idéal | Pièces imprimées en 3D (FDM/SLA), grilles, adaptateurs | Pièces usinées CNC, tôlerie, boîtiers avec congés et assemblages .STEP |
3. Exemple concret : la même pièce en OpenSCAD et en Python FreeCAD
Voici comment générer exactement le même support de capteur industriel (120 × 80 mm, alésage Ø 24 mm, 4 perçages M4) avec les deux outils en ligne de commande :
3.1. Version OpenSCAD (support_capteur.scad) : 22 lignes
// Exécution headless : openscad --backend=Manifold -o support_capteur.stl support_capteur.scad
$fn = 96;
base_l = 120; base_w = 80; base_h = 6;
flange_t = 12; flange_h = 65;
bore_d = 24; m4_hole_d = 4.4;
difference() {
union() {
cube([base_l, base_w, base_h]);
translate([(base_l - flange_t) / 2, 0, base_h])
cube([flange_t, base_w, flange_h]);
}
// 4 perçages de fixation M4 (entraxe 100 x 60 mm)
for (x = [10, base_l - 10], y = [10, base_w - 10])
translate([x, y, -1]) cylinder(h = base_h + 2, d = m4_hole_d);
// Alésage horizontal Ø 24 mm
translate([(base_l - flange_t) / 2 - 1, base_w / 2, base_h + flange_h * 0.6])
rotate([0, 90, 0]) cylinder(h = flange_t + 2, d = bore_d);
}
3.2. Version FreeCAD Python B-Rep (generate_support.py) avec export .STEP et validation
#!/usr/bin/env freecadcmd
"""Exécution headless : freecadcmd generate_support.py"""
import FreeCAD as App
import Mesh
import Part
BASE_L, BASE_W, BASE_H = 120.0, 80.0, 6.0
FLANGE_T, FLANGE_H = 12.0, 65.0
BORE_R, HOLE_R = 12.0, 2.2
doc = App.newDocument("Support_Capteur")
base = Part.makeBox(BASE_L, BASE_W, BASE_H)
flange = Part.makeBox(FLANGE_T, BASE_W, FLANGE_H, App.Vector((BASE_L - FLANGE_T) / 2.0, 0.0, BASE_H))
solid = base.fuse(flange).removeSplitter()
for x in (10.0, BASE_L - 10.0):
for y in (10.0, BASE_W - 10.0):
solid = solid.cut(Part.makeCylinder(HOLE_R, BASE_H + 2.0, App.Vector(x, y, -1.0)))
bore = Part.makeCylinder(
BORE_R, FLANGE_T + 4.0,
App.Vector((BASE_L - FLANGE_T) / 2.0 - 2.0, BASE_W / 2.0, BASE_H + FLANGE_H * 0.6),
App.Vector(1.0, 0.0, 0.0),
)
solid = solid.cut(bore).removeSplitter()
assert solid.isValid() and solid.Volume > 10000.0, "Géométrie B-Rep invalide"
part_obj = doc.addObject("Part::Feature", "Support")
part_obj.Shape = solid
doc.recompute()
Part.export([part_obj], "support_capteur.step")
Mesh.export([part_obj], "support_capteur.stl")
doc.saveAs("support_capteur.FCStd")
[!TIP] Pont natif OpenSCAD ➔ FreeCAD : FreeCAD intègre un atelier OpenSCAD Workbench capable d’importer directement un fichier
.scadet de convertir son arbre CSG en solides B-Rep OpenCASCADE exportables en.STEP!
4. Conclusion & Références
En associant la vitesse d’écriture d’OpenSCAD et la rigueur industrielle B-Rep de FreeCAD 1.0+ sous le contrôle d’un agent IA, la création d’une pièce mécanique passe de plusieurs heures de clics à un script versionné dans Git, reproductible et vérifié géométriquement en moins d’une seconde.
- FreeCAD Officiel : https://www.freecad.org/ • GitHub FreeCAD
- OpenSCAD Officiel : https://openscad.org/ • GitHub OpenSCAD
- Documentation Python FreeCAD : https://wiki.freecad.org/Power_users_hub
Si vous voulez plus d’information sur l’infrastructure vous pouvez voir mon repo à ce sujet : https://github.com/ravindrajob/InfraAtHome
