projet crepp_git/crepp-projects/tracker-solaire/hardware/v2_cms · branche main
render3D.sh Voir sur GitLab
#!/bin/bash
# ==========================================================
# Script : génération automatique des exports KiCad
# - Génère le PDF du schéma (.kicad_sch)
# - Génère les vues 3D (.png) à partir du PCB (.kicad_pcb)
# - Place tout dans un dossier "_export/"
# - Soulève un warning s'il y a plusieurs schémas à la racine
# ==========================================================

set -e  # Arrêt en cas d’erreur critique

# --- Recherche des fichiers KiCad ---
sch_files=($(ls *.kicad_sch 2>/dev/null))
pcb_file=$(ls *.kicad_pcb 2>/dev/null | head -n 1)

# --- Vérification des fichiers trouvés ---
if [ ${#sch_files[@]} -eq 0 ] && [ -z "$pcb_file" ]; then
    echo "❌ Aucun fichier .kicad_sch ni .kicad_pcb trouvé dans le répertoire courant."
    exit 1
fi

echo "🧩 Fichiers détectés :"
[ ${#sch_files[@]} -gt 0 ] && for f in "${sch_files[@]}"; do echo "   • Schéma : $f"; done
[ -n "$pcb_file" ] && echo "   • PCB : $pcb_file"
echo

# --- Warning si plusieurs schémas ---
if [ ${#sch_files[@]} -gt 1 ]; then
    echo "🟠 ATTENTION : plusieurs fichiers schéma détectés à la racine !"
    for f in "${sch_files[@]}"; do
        echo "   - $f"
    done
    echo "   → Seuls les fichiers listés seront exportés individuellement."
    echo
fi

# --- Préparation du dossier d'export ---
EXPORT_DIR="_export"
GALLERY_DIR="$EXPORT_DIR/3D_Gallery"
mkdir -p "$GALLERY_DIR"

# --- Génération du PDF pour chaque schéma ---
if [ ${#sch_files[@]} -ge 1 ]; then
    for sch_file in "${sch_files[@]}"; do
        pdf_name="${sch_file%.kicad_sch}.pdf"
        pdf_path="$EXPORT_DIR/$pdf_name"
        echo "🧾 Génération du PDF → $pdf_path"
        if kicad-cli sch export pdf "$sch_file" -o "$pdf_path"; then
            echo "   ✅ PDF généré avec succès"
        else
            echo "   ❌ Erreur lors de la génération du PDF pour $sch_file"
        fi
        echo
    done
fi

# --- Génération des rendus 3D ---
if [ -n "$pcb_file" ]; then
    echo "🎥 Génération des rendus 3D..."
    declare -A views=(
        [Top]="0,0,0"
        [Bottom]="180,0,0"
        [Side]="270,0,0"
        [Left]="270,0,90"
        [Right]="270,0,-90"
        [Front]="270,0,180"
        [Iso_1]="315,0,45"
        [Iso_2]="225,0,45"
        [Iso_3]="135,0,45"
        [Iso_4]="45,0,45"
    )

    for name in "${!views[@]}"; do
        output_file="${GALLERY_DIR}/${name}.png"
        rotation="${views[$name]}"
        echo "   🖼️  Vue $name..."
        if kicad-cli pcb render --floor --quality high --zoom 1.0 --rotate "$rotation" -o "$output_file" "$pcb_file"; then
            echo "      ✅ $output_file"
        else
            echo "      ❌ Erreur lors du rendu $name"
        fi
    done
    echo
fi

echo "🏁 Terminé ! Tous les exports sont disponibles dans : $EXPORT_DIR"