#!/usr/bin/env bash
# Diagnostic : pourquoi les composants n'apparaissent pas dans les exports 3D.
# Usage (depuis la racine du repo-carte) : ./scripts/diag3d.sh
set -uo pipefail
IMG="kicad/kicad:10.0.0"
PCB="$(find . -maxdepth 1 -name '*.kicad_pcb' | head -1)"
if [ -z "$PCB" ]; then
echo "Aucun .kicad_pcb à la racine. Lance ce script depuis la racine du repo-carte." >&2
exit 1
fi
echo "=============================================="
echo "1) Les modèles 3D sont-ils présents dans l'image ?"
echo "=============================================="
docker run --rm "$IMG" bash -c '
for d in /usr/share/kicad/3dmodels /usr/share/kicad/modules/packages3d; do
if [ -d "$d" ]; then
n=$(find "$d" -name "*.wrl" -o -name "*.step" -o -name "*.stp" 2>/dev/null | wc -l)
echo " TROUVÉ : $d ($n modèle(s))"
else
echo " ABSENT : $d"
fi
done
echo " --- variables d'\''environnement 3D ---"
env | grep -i "3dmodel\|KISYS3D" || echo " (aucune variable 3D définie)"
'
echo
echo "=============================================="
echo "2) Comment TON pcb référence-t-il ses modèles ?"
echo "=============================================="
grep -o '(model "[^"]*"' "$PCB" | sed 's/(model "//; s/"$//' | sort -u | head -15
echo " ..."
echo " Total de références de modèles : $(grep -c '(model ' "$PCB")"
echo
echo "=============================================="
echo "3) Test d'export GLB dans le conteneur (verbeux)"
echo "=============================================="
docker run --rm --user root -v "$(pwd)":/work -w /work "$IMG" bash -c "
kicad-cli version
echo '--- export ---'
kicad-cli pcb export glb --output /tmp/test.glb --subst-models --force '$PCB' 2>&1 | tail -20
echo '--- taille du fichier produit ---'
ls -lh /tmp/test.glb 2>/dev/null || echo 'aucun fichier produit'
"
echo
echo "Interprétation :"
echo " - Si (1) dit ABSENT partout → l'image n'a pas les modèles 3D : c'est LA cause."
echo " - Si (2) montre des chemins en \${KICAD*_3DMODEL_DIR} mais que la variable"
echo " correspondante n'existe pas dans (1) → KiCad ne sait pas où chercher."
echo " - Si (2) montre des chemins absolus type /home/nico/... → ils n'existent"
echo " pas dans le conteneur, donc les modèles sont introuvables."
echo " - Un .glb de quelques dizaines de Ko = carte nue ; plusieurs Mo = composants inclus."