'application/dxf', 'dxf' => 'application/octet-stream', 'dxf' => 'text/plain']; // Функции для обработки DXF require_once 'dxf_parser.php'; // Обработка загрузки файла if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['dxf_file'])) { $file = $_FILES['dxf_file']; // Проверка ошибок загрузки if ($file['error'] !== UPLOAD_ERR_OK) { $error = "Ошибка загрузки файла: " . $file['error']; } // Проверка типа файла elseif (!in_array($file['type'], $allowedTypes) && pathinfo($file['name'], PATHINFO_EXTENSION) !== 'dxf') { $error = "Допустимы только файлы формата DXF"; } // Проверка размера файла elseif ($file['size'] > MAX_FILE_SIZE) { $error = "Файл слишком большой. Максимальный размер: " . (MAX_FILE_SIZE/1024/1024) . "MB"; } else { // Создаем папку для загрузки, если ее нет if (!file_exists(UPLOAD_DIR)) { mkdir(UPLOAD_DIR, 0777, true); } // Генерируем уникальное имя файла $filename = uniqid() . '_' . basename($file['name']); $destination = UPLOAD_DIR . $filename; // Перемещаем загруженный файл if (move_uploaded_file($file['tmp_name'], $destination)) { // Анализируем DXF файл $analysisResult = analyzeDXF($destination); // Сохраняем результаты для отображения $success = true; $totalLength = $analysisResult['total_length']; $maxDimensions = $analysisResult['max_dimensions']; } else { $error = "Не удалось сохранить файл на сервер"; } } } // Функция анализа DXF (вынесена в отдельный файл dxf_parser.php) function analyzeDXF($filepath) { // Здесь будет реализован парсинг DXF файла // Это упрощенная реализация - в реальном проекте нужно использовать библиотеку или более сложный парсер $content = file_get_contents($filepath); $totalLength = 0; $minX = $minY = PHP_FLOAT_MAX; $maxX = $maxY = PHP_FLOAT_MIN; // Упрощенный парсинг (для примера) // В реальном проекте нужно учитывать все особенности DXF формата preg_match_all('/LINE.*?10\s*([\d\.-]+).*?20\s*([\d\.-]+).*?11\s*([\d\.-]+).*?21\s*([\d\.-]+)/s', $content, $lines, PREG_SET_ORDER); foreach ($lines as $line) { $x1 = (float)$line[1]; $y1 = (float)$line[2]; $x2 = (float)$line[3]; $y2 = (float)$line[4]; // Рассчитываем длину отрезка $length = sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2)); $totalLength += $length; // Обновляем границы $minX = min($minX, $x1, $x2); $minY = min($minY, $y1, $y2); $maxX = max($maxX, $x1, $x2); $maxY = max($maxY, $y1, $y2); } return [ 'total_length' => $totalLength, 'max_dimensions' => [ 'width' => $maxX - $minX, 'height' => $maxY - $minY, 'min_x' => $minX, 'min_y' => $minY, 'max_x' => $maxX, 'max_y' => $maxY ] ]; } ?> Анализатор DXF файлов .container { max-width: 800px; margin: 0 auto; padding: 20px; } .upload-form { border: 2px dashed #ccc; padding: 20px; text-align: center; } .results { margin-top: 20px; padding: 15px; background: #f5f5f5; } .error { color: red; } .success { color: green; }

Анализатор DXF файлов

Загрузите файл DXF для анализа длины реза и размеров элементов

Результаты анализа:

Общая длина реза: мм

Максимальные размеры элемента:

  • Ширина: мм
  • Высота: мм

Границы:

  • Минимальные координаты: X=, Y=
  • Максимальные координаты: X=, Y=