{
"model_type_hint": "toroidal_transformer",
"bounding_box": [[x_min, y_min, z_min], [x_max, y_max, z_max]],
"slice_analysis": [
{"z": 1.0, "area_core": 150.5, "area_coil": 45.2, "has_double_winding": true},
{"z": 2.0, "area_core": 151.1, "area_coil": 44.8, "has_double_winding": true}
]
} Шаг | Действие | Детализация и корректировки | Критерий успеха |
0.1 | Изучение FEMM LUA API. | Добавить в скрипт сохранение данных поля (mo_getpointvalues) в текстовый файл. Это критично для следующего шага. | Успешный запуск из командной строки и получение файла с данными. |
0.2 | Исследование STL-парсера. | Использовать trimesh. Добавить проверку на водонепроницаемость (mesh.is_watertight) — это важно для корректной нарезки. | Корректный анализ и вывод объема, габаритов, статуса водонепроницаемости. |
0.3 | [Добавлен] Сканирование библиотеки материалов FEMM. | Написать функцию, которая читает папку .../FEMM42/materials/ и возвращает список доступных .mat файлов. | Список содержит актуальные материалы из установленной FEMM (например, "Copper", "M-19 Steel"). |
Шаг | Действие | Детализация и корректировки | Критерий успеха |
1.1 | Модуль слайсера (базовый). | Использовать trimesh.section(). Визуализировать контур поверх 3D модели для проверки. | Для цилиндра на разных Z получаются корректные окружности. |
1.2 | Генератор LUA-скриптов. | Шаблон должен включать: 1) геометрию, 2) материал из списка (Шаг 0.3), 3) воздушную область, 4) граничные условия, 5) сетку, 6) сохранение данных в указанный файл. | Автоматически сгенерированный скрипт успешно рассчитывается и создает файл с данными. |
1.3 | Интеграция "Слайсер -> Генератор -> FEMM". | Добавить обработку ошибок (например, если FEMM не запустился). Использовать фиксированный список из 5 Z-координат. | Получен набор из 5 файлов B_field_slice_Z_XX.txt для простой модели. |
1.4 | Парсер результатов FEMM. | Данные сохранять в структурированном виде: NumPy массивы X, Y, B или словарь для дальнейшей интерполяции. | Возможность построить 2D тепловую карту поля для любого среза. |
Шаг | Действие | Детализация и корректировки | Критерий успеха |
2.1 | Сегментация STL и веб-интерфейс для разметки. | 1. Использовать trimesh.split(). 2. Добавить простой Ray Casting для подсветки зазоров. 3. Веб-интерфейс (Streamlit) должен показывать раскрашенную модель и форму для ввода имени/выбора материала для каждого тела. | Для сборки "сердечник в катушке" интерфейс показывает 2 тела, позволяет задать core (сталь) и coil (медь). |
2.2 | Усовершенствованный генератор LUA-скриптов. | Генератор должен: 1. Учитывать разметку из Шага 2.1. 2. Корректно назначать материалы из выпадающего списка. 3. Создавать отдельные объекты в LUA для каждого тела. | FEMM корректно рассчитывает модель с разными материалами, что подтверждается разницей в распределении поля. |
Шаг | Действие | Детализация и корректировки | Критерий успеха |
3.1 | Подготовка "суммаризатора" геометрии. | Анализ должен включать: 1. Изменение площади сечения вдоль оси (прогрев по 10-20 пробным срезам). 2. Результаты Ray Casting (определение "однородности"). 3. Формирование компактного JSON с ключевыми метриками. | Для тела сложной формы JSON показывает неоднородность. |
3.2 | Настройка взаимодействия с DeepSeek API. | 1. Использовать модель deepseek-chat. 2. Промпт должен включать строгий запрос на вывод в JSON. 3. Обрабатывать ошибки API (таймауты, неверный формат). | Получение ответа в формате {"reasoning": "...", "optimal_slices": [z1, z2]}. |
3.3 | Связка "Суммаризатор -> ИИ -> План срезов". | Интегрировать модули. Добавить фолбэк: если API не доступен, использовать равномерную нарезку. | Для тора ИИ предлагает 1-2 среза, для неоднородного тела — 5+. Система работает с этим списком. |
Шаг | Действие | Детализация и корректировки | Критерий успеха |
4.1 | Построение 3D воксельной сетки. | Использовать scipy.interpolate.griddata с методом линейной интерполяции. Область интерполяции — bounding box модели + 20%. | Возможность запросить значение B в произвольной точке внутри области. |
4.2 | Базовая 3D визуализация. | Использовать plotly.graph_objects для интерактивного Isosurface или срезов по осям. | Пользователь может вращать, приближать 3D-график поля. |
4.3 | Инструмент "Произвольный срез" (Ray Marching). | Реализовать упрощенный вариант: для плоскости интерполировать данные из ближайших вокселей (не полноценный Ray Marching). | Возможность увидеть сечение поля в любой плоскости, не совпадающей с исходными. |
Шаг | Действие | Детализация и корректировки | Критерий успеха |
5.1 | Единый веб-интерфейс (Streamlit). | Workflow: Загрузка STL -> Автосегментация -> Разметка -> ИИ-анализ -> Запуск расчёта -> 3D Визуализация. Добавить индикатор прогресса. | End-to-end выполнение полного цикла для тестовой модели за <15 минут. |
5.2 | Валидация и тестирование. | 1. Количественное сравнение: рассчитать индуктивность соленоида через 2D FEMM и аналитически. 2. Качественное сравнение: визуально сравнить 3D реконструкцию с результатом из статьи или 3D софта (если есть). | Расхождение ключевых параметров (макс. индукция) <15% при использовании ≥5 срезов. |
5.3 | Создание документации. | 1. README.md: установка, запуск, пример. 2. ARCHITECTURE.md: описание модулей. 3. White Paper (краткое) с описанием метода, точности и ограничений. | Репозиторий на GitHub, который может собрать и запустить прототип новый пользователь. |