https://github.com/caisilus/masters_diploma
https://github.com/caisilus/masters_diploma
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/caisilus/masters_diploma
- Owner: caisilus
- Created: 2025-02-08T20:38:18.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-07-12T14:29:53.000Z (12 months ago)
- Last Synced: 2025-07-27T08:46:26.520Z (11 months ago)
- Language: Python
- Size: 46.9 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# О проекте
Цель проекта - автоматическая генерация полигональных сеток представительных объемов заданной структуры с гибкой настройкой параметров. Для интеграции с расчетными системами на основе метода конечных элементов модуль генерации сеток выделен в микросервис, но возможно использование также и в виде CLI-утилиты
# Установка зависимостей
```bash
pip install -r requirements.txt
```
Для запуска через Procfile:
```bash
gem install foreman
```
Также для работы celery нужен Redis. Устанавливать по [гайду из документации Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/)
# Использование
## CLI-утилита
### Ветвистая структура
```bash
python generate_mesh.py [опции]
```
#### ⚙️ Основные параметры:
| Параметр | Описание | По умолчанию |
|------------------------|-----------------------------------------------|--------------------------|
| `--r-root` | Радиус корня | `0.5` |
| `--h-root` | Высота корня | `4.0` |
| `--r-branch` | Радиус ветвей | `0.4` |
| `--h-branch` | Высота ветвей | `3.0` |
| `--num-branches` | Кол-во ветвей | `4` |
| `--angle` | Угол между ветвями (в градусах) | `30` |
| `--mesh-size` | Размер элементов сетки | `1.0` |
| `--output` | Имя выходного `.msh` файла | `branch_element.msh` |
| `--export-formats` | Экспорт в доп. форматы (`stl,obj,vtk,...`) | _не указано_ |
| `--no-gui` | Не запускать GUI Gmsh | _false_ |
| `--log-file` | Путь к лог-файлу | _не указано_ |
| `--config` | Конфигурационный файл `.yaml` или `.json` | _не указано_ |
#### 📝 Пример конфигурации (config.yaml)
```yaml
r_root: 0.6
h_root: 5.0
num_branches: 6
angle: 25
mesh_size: 0.8
output: "cool_branch.msh"
export_formats: "stl,obj"
no_gui: true
log_file: "generation.log"
```
#### 🧪 Примеры запуска
Запуск с параметрами из командной строки:
```bash
python branching_element_cli.py --r-root 0.6 --num-branches 6 --angle 45 --no-gui --output result.msh
```
Запуск с конфигурационным файлом:
```bash
python branching_element_cli.py --config config.yaml
```
### Пористый материал
#### ⚙️ Основные параметры:
| Параметр | Описание | По умолчанию |
|------------------------|-----------------------------------------------|--------------------------|
| `--spheres_count` | Кол-во сфер | *не указано*
| `--r` | радиус сферы | *не указано* |
| `--allowance` | Минимальное расстояние между границами сфер | *не указано* |
| `--mesh-size` | Размер элементов сетки | `1.0` |
| `--output` | Имя выходного `.msh` файла | `porous.msh` |
| `--no-gui` | Не запускать GUI Gmsh | _false_ |
| `--config` | Конфигурационный файл `.yaml` или `.json` | _не указано_ |
#### 📝 Пример конфигурации (config.yaml)
```yaml
spheres_count: 15
r: 0.1
allowance: 0.02
mesh_size: 0.8
output: "cool_branch.msh"
no_gui: true
```
#### 🧪 Примеры запуска
Запуск с параметрами из командной строки:
```bash
python porous_material_cli.py --r 0.1 --speheres_count 6 --allowance 0.1 --no-gui --output result.msh
```
Запуск с конфигурационным файлом:
```bash
python porous_material_cli.py --config config.yaml
```
## Микросервис
> `localhost:8080/docs` - API-документация HTTP-сервиса для генерации сеток
В проекте используется аутентификация по токену в хедере API-KEY, поэтому для тестов необходимо добавлять этот токен во все запросы.
Корректное значение задается переменной окружения API_KEY, поэтому её необходимо устанавливать перед запуском сервера
### Запуск через Docker
Можно просто запустить docker-compose со стандартными настройками. Корректный API-KEY в этом случае `123` (поменять для production !)
```bash
docker-compose up
```
При необходимости проверить webhook, можно отдельно запустить test_webhook сервер(тут процесс через Docker не налажен пока):
```bash
python -m uvicorn test_webhook:app --reload --port=8001
```
Тогда в запросе `/generate` нужно будет указывать webhook_url: http://localhost:8001/webhook
### Запуск без Docker
#### Запуск через foreman
Если установлен `foreman`, можно запускать все сервисы через
```bash
API_KEY=<ваш ключ> foreman start
```
#### Запуск команд вручную
Альтернативно, можно запускать их по одному:
1. Запуск основного сервера
```bash
API_KEY=<ваш ключ> python -m uvicorn main:app --reload
```
2. Запуск celery
```bash
celery -A tasks.celery_app worker --loglevel=info
```
3. (Опционально) запуск сервера для тестового веб-хука на порту 8001
```bash
python -m uvicorn test_webhook:app --reload --port=8001
```