Retour aux articles • MATÉRIEL • Mis à jour en 2026 • 5 min de lecture

FreeCAD & OpenSCAD : CAO 3D par IA

Comment combiner FreeCAD 1.0+ (noyau B-Rep Python) et OpenSCAD (CSG) avec un agent IA pour générer des pièces 3D paramétriques prêtes à imprimer.

FreeCAD & OpenSCAD : CAO 3D par IA
Logo officiel FreeCAD Logo officiel OpenSCAD
FreeCAD (B-Rep Python) : github.com/FreeCAD/FreeCAD • freecad.org
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 :

  1. 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.
  2. Atelier Assembly & VarSets intégrés : Le solveur géométrique Ondsel permet de valider les liaisons mécaniques réelles, tandis que les VarSets centralisent toutes les cotes paramétriques (epaisseur_paroi, jeu_impression, insert_M3).

2. MàJ 2026 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)    │
└────────────────────────────────────────────────────────────────────────────┘
Animation exécution CLI dans le terminal

Quand choisir FreeCAD Python vs OpenSCAD avec un agent IA ?

CritèreOpenSCAD (.scad + Manifold)FreeCAD 1.0+ (freecadcmd Python)
ParadigmeCSG déclaratif (difference(), union(), hull())B-Rep analytique (Part, Sketcher, PartDesign)
Concision du codeExtrême (15 à 30 lignes pour un support complet)Modérée (40 à 70 lignes avec assertions topologiques)
Congés & ChanfreinsComplexes 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éalPièces imprimées en 3D (FDM/SLA), grilles, adaptateursPiè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 .scad et 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.


Si vous voulez plus d’information sur l’infrastructure vous pouvez voir mon repo à ce sujet : https://github.com/ravindrajob/InfraAtHome