Présentation

Six agents IA, pilotés par Claude Opus 5, ont été confrontés à trois tâches de modélisation : un support d’étagère (T1), un boîtier à encliquetage pour PCB (T2) et un adaptateur à filetage hélicoïdal (T3). Chaque agent a utilisé soit CadQuery 2.8.0 (Python 3.14) soit OpenSCAD 2026.06.12, tous deux exécutés sur un Mac M‑series. Les fichiers générés mesuraient 12,4 KB (OpenSCAD) et 13,1 KB (CadQuery). Chaque exécution était limitée à 12 versions et les STL finales ont été validées par un parseur indépendant mesurant comptage de triangles, boîte englobante, volume, étanchéité, arêtes non‑manifold et composantes connectées.

Architecture et flux de travail

OpenSCAD repose sur un moteur CSG (Constructive Solid Geometry) et possède un rendu CLI natif. CadQuery s’appuie sur le kernel B‑rep d’OpenCascade, ne disposant pas de rendu CLI ; un rendu hors‑écran a donc été développé spécifiquement. Cette différence impose à CadQuery de calculer des métriques de validité B‑rep (ex. BRep_API: command not done) à la place du statut CSG d’OpenSCAD. La chaîne de paramètres de CadQuery, entièrement dérivée, évite la duplication de valeurs, alors que le script OpenSCAD utilise un bloc de constantes sans mécanisme de propagation automatique.

module corner_mask() {
    translate([0, 0, -eps]) linear_extrude(vert_h + 2*eps)
        offset(r = corner_r) offset(delta = -corner_r) square([plate_w, horiz_d]);
}

Dans OpenSCAD, la fonction corner_mask() crée un profil 2D arrondi puis l’extrude, sans référence explicite aux arêtes. CadQuery nécessite de sélectionner les arêtes avant d’appliquer un congé (.fillet()) :

result = result.edges("|Z").edges(
    BoxSelector((-WIDTH, -EPS, -EPS), (WIDTH, EPS, V_HEIGHT + EPS))
    + BoxSelector((-WIDTH, H_DEPTH - EPS, -EPS), (WIDTH, H_DEPTH + EPS, V_HEIGHT + EPS))
).fillet(R_OUTER)

Cette étape a généré une erreur B‑rep, obligeant l’agent à diagnostiquer manuellement la cause (rayon trop grand pour une paroi de 4 mm).

Analyse des résultats par tâche

T1 – Support d’étagère : les deux outils ont produit des STL étanches en 11 itérations. OpenSCAD a atteint la solution en deux versions, tandis que CadQuery a perdu une itération à cause de l’erreur de congé mentionnée. La différence réside dans la visibilité du diagnostic : OpenSCAD signale l’échec au moment du rendu, CadQuery ne fournit qu’un message générique B‑rep.

T2 – Boîtier à encliquetage : CadQuery a nécessité cinq versions contre huit pour OpenSCAD. La chaîne paramétrique de CadQuery a permis de modifier simultanément profondeur du rebord, rainures et barbes, réduisant le nombre de corrections manuelles. En outre, CadQuery utilise assert pour interrompre la génération dès qu’une interférence est détectée, alors qu’OpenSCAD ne fait qu’écrire des echo que l’opérateur doit lire. Trois des huit versions d’OpenSCAD ont servi uniquement à nettoyer des géométries tangentes ou coïncidentes, ce qui n’est pas requis avec les assertions de CadQuery.

T3 – Adaptateur à filetage hélicoïdal : OpenSCAD a généré le modèle en une seule version (43 ms) en écrivant directement les sommets d’une polyèdre hélicoïdale :

module helical_thread(turns, z0) {
    prof = [ [r_in, -flank_hz], [r_maj, -crest_hz],
             [r_maj, crest_hz], [r_in, flank_hz] ];
    n = round(turns * STEPS);
    pts = [ for (i = [0:n]) let(a = i * 360 / STE…
}

Cette approche ne bénéficie d’aucune protection contre un ordre de winding inversé, mais le parseur a confirmé l’étanchéité. CadQuery, en revanche, a dû implémenter un balayage (sweep) sur le kernel B‑rep, ce qui a entraîné des itérations supplémentaires et des ajustements de tolérance pour garantir la vraie géométrie hélicoïdale.

Limites et perspectives

Le benchmark se limite à des modèles de moins de 15 KB et à un environnement Mac M‑series ; les performances sur des assemblages plus volumineux ou sur des plateformes Linux/Windows restent inconnues. De plus, l’absence de rendu CLI natif pour CadQuery impose une surcharge de développement (off‑screen renderer). Enfin, la dépendance à des messages d’erreur B‑rep peu explicites complique le diagnostic automatisé, un point que les futures versions d’OpenCascade devront adresser pour améliorer l’intégration IA.