projet crepp_git/crepp-projects/tracker-solaire/hardware/v2_cms · branche main
diag3d.sh Voir sur GitLab
#!/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."