- Added support for uploading and compressing GLB models using Draco in the backoffice. - Implemented commands for importing and re-compressing 3D models. - Updated model resource to handle 3D model uploads and validations. - Introduced a new script for compressing GLB files with Draco. - Modified Vite configuration to remove GLB files from the build output. - Updated package dependencies to include GLTF-transform libraries for handling 3D models. - Added tests to ensure proper functionality of 3D model handling and compression.
71 lines
2.5 KiB
PHP
71 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\Modello;
|
|
use App\Support\Configuratore\Modelli3d;
|
|
use App\Support\Configuratore\Modello3dNonValido;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Number;
|
|
|
|
/**
|
|
* Migrazione una tantum: associa ai modelli i .glb che prima stavano nel frontend
|
|
* (src/assets/models/<sistema>/<file_modello>), comprimendoli come un caricamento dal backoffice.
|
|
* I modelli che hanno già un modello 3D sono saltati (salvo --forza).
|
|
*/
|
|
class ImportaModelli3d extends Command
|
|
{
|
|
protected $signature = 'modelli3d:importa
|
|
{cartella? : Cartella con le sottocartelle per sistema (default: ../src/assets/models)}
|
|
{--forza : Sostituisce anche i modelli 3D già caricati}';
|
|
|
|
protected $description = 'Importa i modelli 3D (.glb) dalla cartella del configuratore e li comprime con Draco';
|
|
|
|
public function handle(Modelli3d $modelli3d): int
|
|
{
|
|
$cartella = rtrim($this->argument('cartella') ?? base_path('../src/assets/models'), '/');
|
|
if (! is_dir($cartella)) {
|
|
$this->error("Cartella non trovata: {$cartella}");
|
|
|
|
return self::FAILURE;
|
|
}
|
|
|
|
$importati = 0;
|
|
$errori = 0;
|
|
|
|
$modelli = Modello::with('sistema')->whereNotNull('file_modello')->orderBy('sistema_id')->orderBy('ordine')->get();
|
|
foreach ($modelli as $modello) {
|
|
$etichetta = "{$modello->sistema->codice}/{$modello->codice}";
|
|
|
|
if ($modello->modello_3d_draco && ! $this->option('forza')) {
|
|
$this->line(" {$etichetta}: già presente, saltato");
|
|
|
|
continue;
|
|
}
|
|
|
|
$file = "{$cartella}/{$modello->sistema->codice}/{$modello->file_modello}";
|
|
if (! is_file($file)) {
|
|
$this->warn(" {$etichetta}: {$modello->file_modello} non trovato");
|
|
|
|
continue;
|
|
}
|
|
|
|
try {
|
|
$modelli3d->carica($modello, $file, $modello->file_modello);
|
|
$importati++;
|
|
$this->info(sprintf(' %s: %s → %s', $etichetta,
|
|
Number::fileSize($modello->modello_3d_dimensione, precision: 1),
|
|
Number::fileSize($modello->modello_3d_draco_dimensione, precision: 1)));
|
|
} catch (Modello3dNonValido $e) {
|
|
$errori++;
|
|
$this->error(" {$etichetta}: {$e->getMessage()}");
|
|
}
|
|
}
|
|
|
|
$this->newLine();
|
|
$this->info("Importati {$importati} modelli 3D".($errori ? ", {$errori} errori" : '').'.');
|
|
|
|
return $errori ? self::FAILURE : self::SUCCESS;
|
|
}
|
|
}
|