- ruff profile in pyproject (E/W/F/I/B/RUF); clean src/ + tests/ - remove dead code: threaded_len/s/d/coat/first_rec_for_size, self.cat in gui - 59 public re-exports added to __all__ (sorted) - renamed l->ln (E741), zip(strict=True), split long lines, [*list, x] (RUF005) - CI: quality job (ruff), test runs tests/ -k 'not gen_all' w/ coverage - README rewritten (commands, API modules, tests/lint/coverage, CI) - docs/tasks.md: P4 recorded - 136 passed, 3 deselected (regen); ruff: all checks passed
6.2 KiB
6.2 KiB
fastengen
Генератор параметрического крепёжа со сравнительной базой и STEP-библиотекой.
Self-contained Python-решение — ** без КОМПАСА и других CAD-систем**: каталог изделий и генерация 3D-моделей в STEP через CadQuery. Адапирован под ГОСТ (болты, гайки, шайбы, шпильки, саморезы, винты).
Что делает
Создаёт:
- Каталог (
catalog.json) с параметрами изделий — обозначение, стандарт, материал, атрибуты, имя STEP-модели, ОКПД2. - STEP-модели (
out/*.step) — параметрическая геометрия болтов, гаек, шайб, шпильк, саморезов, винтов. Масса 1 шт. считается из геометрии (OCCBRepGProp). - Ведомость изделий по ГОСТ 2.119 (.md/.csv/.txt/.xlsx).
- KOMPAS-контейнеры (.con XML) для импорта в КОАПАС через его API.
Установить
pip install cadquery # тяжёлый пакет (OCP/OCCT), ставится ~1-2 мин
pip install -e .
Применение
Сгенерировать одну деталь
fastengen bolt-gen M10 40 --dir out
fastengen nut-gen M12 --dir out
fastengen washer-gen M8 --dir out
fastengen stud-long-gen M12 200 --dir out
fastengen self-tacker-gen 4 16 --dir out
Сгенерировать всё семейство (базовые + расширенные)
fastengen gen-all-extended --dir out --catalog catalog.json
В каталоге ~780 изделий по 13 стандартам ГОСТ:
- Болты ГОСТ 7805-70 — M6..M30 × 20..300 мм.
- Гайки ГОСТ 5915-70 (и повышенные/стопорные).
- Шайбы ГОСТ 11371-78, увеличенные 11372-78, гровер 6402-70, стопорные 13463-77.
- Шпильки ГОСТ 25709-84, саморезы Р 51472-99, винты потайные 1149-80, bolt-set 1170-84.
Просмотр каталога
fastengen list --catalog catalog.json
fastengen show bolt_M10_40 --catalog catalog.json
fastengen gui --catalog catalog.json --dir out
Ведомость изделий (ГОСТ 2.119)
fastengen vedomost --dir out --format md # Markdown
fastengen vedomost --dir out --format csv # CSV (UTF-8, № в заголовках)
fastengen vedomost --full --format xlsx --output ved.xlsx
- Группирует записи по (наименование, ГОСТ, материал) → одна позиция на тип изделия,
Кол-во= число конкретных размеров. - Автоматически заполняет графики ОКПД2 по типу и product_type для ВЗ.
Масса,г— из реальной геометрии STEP.
Экспорт в КОАПАС (.con)
fastengen kompas --outdir komp --dir out
Генерит валидные .con XML (Gost, ОКПД2 по типу). Реальный импорт геометрии в КОАПАС
делает сам КОАПАС через API (на Linux-хосте КОАПАС обычно не установлен).
Каталог (JSON-схема)
{
"id": "bolt_M10_40",
"designation": "Болт M10x40 ГОСТ 7805-70",
"type": "bolt",
"category": "Крепёж",
"standard": "ГОСТ 7805-70",
"material": "Сталь 8.8",
"model_file": "bolt_M10_40.step",
"attributes": {
"диаметр": "10",
"длина": 40,
"шаг_резьбы": 1.5,
"размер_под_ключ": 16.0,
"высота_головки": 6.4
}
}
API
from fastengen import PortableCatalog, get_bolt, __version__
cat = PortableCatalog("catalog.json", models_dir="out")
rec = cat.add_bolt(get_bolt("M12", 45))
print(rec.designation, rec.model_file)
cat.save()
Модули:
standard.py— ГОСТ/ISO размеры и спецификации (get_bolt,get_nut,iter_bolts, …).model.py— генерация 3D → STEP (generate_bolt,generate_nut_high, …).catalog.py— каталог (JSON),ProductRecord.mass.py— масса 1 шт. из геометрии STEP (ГОСТ 24705, плотность стали).validate_geom.py— проверка размеров сгенерированной геометрии по ГОСТ (±4%).vedomost.py— ведомость изделий (ГОСТ 2.119).kompas.py— экспорт в KOMPAS.con.gui.py— tkinter-просмотр каталога.cli.py— командная строка (fastengen <command>).
Структура
fastengen/
├── pyproject.toml
├── src/fastengen/ # standard, model, catalog, mass, validate_geom, vedomost, kompas, gui, cli
├── tests/ # pytest (specs, geometry, boltgen, mass, validate, vedomost, kompas, gui, packaging)
├── out/ # STEP-модели
├── docs/tasks.md # roadmap и прогресс между сессиями
└── catalog.json
Тесты
PYTHONPATH=src python3 -m pytest -q # полный (переренерация всех STEP, ~5-8 мин)
PYTHONPATH=src python3 -m pytest -q -k "not gen_all" # быстрый (без regen)
Покрытие и чистота кода:
PYTHONPATH=src python3 -m ruff check src/ tests/ # ruff (конфиг в pyproject.toml)
PYTHONPATH=src python3 -m pytest --cov=fastengen --cov-report=term-missing
Прогон в CI: .github/workflows/ci.yml (specs + geometry по Python 3.10/3.11/3.12, сборка пакета).
Окружение
- Python 3.10+. В исходниках без эма-диз (U+2014) в коде — на этом Python UTF-8-режим в исходниках отключён. Кириллица допустима только в строковых значениях и комментариях.