Files
OpenClaw Coder e407d59b13
CI / quality (push) Canceled after 0s
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
chore(P4): ruff lint, coverage/CI, README overhaul
- 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
2026-11-11 16:30:07 +10:00

6.2 KiB
Raw Permalink Blame History

fastengen

Генератор параметрического крепёжа со сравнительной базой и STEP-библиотекой.

Self-contained Python-решение — ** без КОМПАСА и других CAD-систем**: каталог изделий и генерация 3D-моделей в STEP через CadQuery. Адапирован под ГОСТ (болты, гайки, шайбы, шпильки, саморезы, винты).

Что делает

Создаёт:

  • Каталог (catalog.json) с параметрами изделий — обозначение, стандарт, материал, атрибуты, имя STEP-модели, ОКПД2.
  • STEP-модели (out/*.step) — параметрическая геометрия болтов, гаек, шайб, шпильк, саморезов, винтов. Масса 1 шт. считается из геометрии (OCC BRepGProp).
  • Ведомость изделий по ГОСТ 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-режим в исходниках отключён. Кириллица допустима только в строковых значениях и комментариях.