'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=
