From 8bb23ee563393b970c90c9b39cb2e30fbf648cc8 Mon Sep 17 00:00:00 2001 From: solocla Date: Tue, 16 Jun 2026 09:23:40 +0200 Subject: [PATCH] cad area --- .gitignore | 1 + ..._add_roi_fields_to_cad_area_jobs_table.php | 68 + ...t_detail_fields_to_cad_area_jobs_table.php | 46 + ..._tracing_fields_to_cad_area_jobs_table.php | 115 ++ ...ual_hole_fields_to_cad_area_jobs_table.php | 37 + public/userarea/cad-area.php | 1377 +++++++++++++++-- public/userarea/cad_area_process.php | 510 +++--- public/userarea/cad_area_save_manual_area.php | 297 ++++ public/userarea/cad_area_save_roi.php | 124 ++ .../20260610_153032_d130b438_2_Zodiac.pdf | Bin 203469 -> 0 bytes .../20260610_153032_ef4401b3_1_Givi.pdf | Bin 122345 -> 0 bytes .../cad_vector_area.cpython-314.pyc | Bin 12044 -> 26425 bytes python-cad-area/app.py | 58 +- python-cad-area/cad_area_save_roi.php | 124 ++ python-cad-area/cad_vector_area.py | 955 ++++++++---- 15 files changed, 3101 insertions(+), 611 deletions(-) create mode 100644 db/migrations/20260611153946_add_roi_fields_to_cad_area_jobs_table.php create mode 100644 db/migrations/20260612075051_add_result_detail_fields_to_cad_area_jobs_table.php create mode 100644 db/migrations/20260612081753_add_manual_tracing_fields_to_cad_area_jobs_table.php create mode 100644 db/migrations/20260612083548_add_manual_hole_fields_to_cad_area_jobs_table.php create mode 100644 public/userarea/cad_area_save_manual_area.php create mode 100644 public/userarea/cad_area_save_roi.php delete mode 100644 public/userarea/uploads/cad_area/originals/20260610_153032_d130b438_2_Zodiac.pdf delete mode 100644 public/userarea/uploads/cad_area/originals/20260610_153032_ef4401b3_1_Givi.pdf create mode 100644 python-cad-area/cad_area_save_roi.php diff --git a/.gitignore b/.gitignore index 8643f60..abc1720 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ public/userarea/last_url.txt public/userarea/class/curl_auth_debug.log public/userarea/class/curl_request_debug.log +public/userarea/uploads/cad_area/originals/* # Ignora tutti i log *.log diff --git a/db/migrations/20260611153946_add_roi_fields_to_cad_area_jobs_table.php b/db/migrations/20260611153946_add_roi_fields_to_cad_area_jobs_table.php new file mode 100644 index 0000000..acc518c --- /dev/null +++ b/db/migrations/20260611153946_add_roi_fields_to_cad_area_jobs_table.php @@ -0,0 +1,68 @@ +table('cad_area_jobs'); + + if (!$table->hasColumn('roi_x')) { + $table->addColumn('roi_x', 'decimal', [ + 'precision' => 12, + 'scale' => 6, + 'null' => true, + 'after' => 'file_size', + ]); + } + + if (!$table->hasColumn('roi_y')) { + $table->addColumn('roi_y', 'decimal', [ + 'precision' => 12, + 'scale' => 6, + 'null' => true, + 'after' => 'roi_x', + ]); + } + + if (!$table->hasColumn('roi_width')) { + $table->addColumn('roi_width', 'decimal', [ + 'precision' => 12, + 'scale' => 6, + 'null' => true, + 'after' => 'roi_y', + ]); + } + + if (!$table->hasColumn('roi_height')) { + $table->addColumn('roi_height', 'decimal', [ + 'precision' => 12, + 'scale' => 6, + 'null' => true, + 'after' => 'roi_width', + ]); + } + + if (!$table->hasColumn('roi_page')) { + $table->addColumn('roi_page', 'integer', [ + 'null' => true, + 'default' => 1, + 'after' => 'roi_height', + ]); + } + + if (!$table->hasColumn('calculation_mode')) { + $table->addColumn('calculation_mode', 'string', [ + 'limit' => 50, + 'null' => true, + 'default' => 'auto_roi', + 'after' => 'roi_page', + ]); + } + + $table->update(); + } +} diff --git a/db/migrations/20260612075051_add_result_detail_fields_to_cad_area_jobs_table.php b/db/migrations/20260612075051_add_result_detail_fields_to_cad_area_jobs_table.php new file mode 100644 index 0000000..2333a32 --- /dev/null +++ b/db/migrations/20260612075051_add_result_detail_fields_to_cad_area_jobs_table.php @@ -0,0 +1,46 @@ +table('cad_area_jobs'); + + if (!$table->hasColumn('width_mm')) { + $table->addColumn('width_mm', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('height_mm')) { + $table->addColumn('height_mm', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('scale_used')) { + $table->addColumn('scale_used', 'decimal', [ + 'precision' => 12, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('strategy_used')) { + $table->addColumn('strategy_used', 'string', [ + 'limit' => 100, + 'null' => true, + ]); + } + + $table->update(); + } +} diff --git a/db/migrations/20260612081753_add_manual_tracing_fields_to_cad_area_jobs_table.php b/db/migrations/20260612081753_add_manual_tracing_fields_to_cad_area_jobs_table.php new file mode 100644 index 0000000..c400ec9 --- /dev/null +++ b/db/migrations/20260612081753_add_manual_tracing_fields_to_cad_area_jobs_table.php @@ -0,0 +1,115 @@ +table('cad_area_jobs'); + + if (!$table->hasColumn('width_mm')) { + $table->addColumn('width_mm', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('height_mm')) { + $table->addColumn('height_mm', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('scale_used')) { + $table->addColumn('scale_used', 'decimal', [ + 'precision' => 12, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('strategy_used')) { + $table->addColumn('strategy_used', 'string', [ + 'limit' => 100, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_calibration_px')) { + $table->addColumn('manual_calibration_px', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_calibration_mm')) { + $table->addColumn('manual_calibration_mm', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_mm_per_px')) { + $table->addColumn('manual_mm_per_px', 'decimal', [ + 'precision' => 18, + 'scale' => 10, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_polygon_json')) { + $table->addColumn('manual_polygon_json', 'text', [ + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_area_mm2')) { + $table->addColumn('manual_area_mm2', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_area_cm2')) { + $table->addColumn('manual_area_cm2', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_width_mm')) { + $table->addColumn('manual_width_mm', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_height_mm')) { + $table->addColumn('manual_height_mm', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_status')) { + $table->addColumn('manual_status', 'string', [ + 'limit' => 50, + 'null' => true, + ]); + } + + $table->update(); + } +} diff --git a/db/migrations/20260612083548_add_manual_hole_fields_to_cad_area_jobs_table.php b/db/migrations/20260612083548_add_manual_hole_fields_to_cad_area_jobs_table.php new file mode 100644 index 0000000..93e4203 --- /dev/null +++ b/db/migrations/20260612083548_add_manual_hole_fields_to_cad_area_jobs_table.php @@ -0,0 +1,37 @@ +table('cad_area_jobs'); + + if (!$table->hasColumn('manual_outer_area_mm2')) { + $table->addColumn('manual_outer_area_mm2', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_holes_area_mm2')) { + $table->addColumn('manual_holes_area_mm2', 'decimal', [ + 'precision' => 18, + 'scale' => 6, + 'null' => true, + ]); + } + + if (!$table->hasColumn('manual_holes_json')) { + $table->addColumn('manual_holes_json', 'text', [ + 'null' => true, + ]); + } + + $table->update(); + } +} diff --git a/public/userarea/cad-area.php b/public/userarea/cad-area.php index 758b500..8120c2c 100644 --- a/public/userarea/cad-area.php +++ b/public/userarea/cad-area.php @@ -5,7 +5,7 @@ $pdo = $db->getConnection(); $iduser = $iduserlogin ?? null; -if ($iduser === null) { +if ($iduser === null || $iduser === '') { $stmt = $pdo->prepare(" SELECT * FROM cad_area_jobs @@ -23,6 +23,7 @@ if ($iduser === null) { ':iduser' => $iduser ]); } + $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC); ?> @@ -33,6 +34,7 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC); + Calcolo Area CAD - <?= htmlspecialchars($titlewebsite, ENT_QUOTES, 'UTF-8'); ?> @@ -42,6 +44,11 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC); + + + @@ -212,8 +294,10 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC);
-
Calcolo Area da PDF CAD
- Upload PDF vettoriali e calcolo automatico della superficie del profilo +
Calcolo Area 2D da PDF CAD
+ + Modalità affidabile: calibrazione quota + tracciamento manuale del profilo. +
-
📐
Trascina qui uno o più PDF CAD
@@ -237,21 +320,18 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC); - -
-
-
Risultati Elaborazione
- +
+
Risultati
+ + Per PDF scansionati/sporchi usa “Traccia Manuale”. + +
@@ -259,14 +339,12 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC); - + - + @@ -275,7 +353,7 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC); Completato"; @@ -289,16 +367,12 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC); $areaMm2 = $job['area_mm2'] !== null ? number_format((float)$job['area_mm2'], 3, ',', '.') : '-'; $areaCm2 = $job['area_cm2'] !== null ? number_format((float)$job['area_cm2'], 4, ',', '.') : '-'; - $scale = $job['scale_detected'] ?: '-'; + $method = $job['strategy_used'] ?: '-'; $confidence = $job['confidence'] ?: '-'; $fileUrl = htmlspecialchars($job['file_url'] ?? '', ENT_QUOTES, 'UTF-8'); ?> - + - - + + @@ -345,8 +422,100 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC);
-
Elaborazione in corso
-

Invio dei PDF al servizio di calcolo area...

+
Operazione in corso
+

Attendere...

+
+
+ + @@ -354,18 +523,51 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC);
- - # Nome PDF Stato Area mm² Area cm²ScalaMetodo Confidenza Azioni
- - - - @@ -307,25 +381,28 @@ $jobs = $stmt->fetchAll(PDO::FETCH_ASSOC); - - - 📄 Apri PDF - - +
+ + + 📄 Apri + - - + + + - - - +