# Инструменты СПИС

Комплект инструментов для работы с внешними ссылками в СПИС.
AutoCAD 2020 и новее.

---

## Состав

| Файл | Назначение |
|---|---|
| `SPIS_TOOLS.lsp` | Загрузчик. Загружать его — остальные подтянутся сами |
| `SPISSETDIR` (в загрузчике) | Указать папку СПИС вручную, если автопоиск не сработал |
| `SPIS_RUN_SETS.lsp` | `SPISRUNSETS` — собрать комплект дисциплин |
| `SPIS_SYSTEM_SETS.lsp` | `SPISATTACHSETS` — подключить комплект в СПИС |
| `XRBIND.lsp` | Шесть команд обслуживания ссылок |
| `run_sets_launcher.py` | Запуск сборки: bat в нужной кодировке, старт в фоне |
| `build_discipline_sets.py` | Рабочий скрипт сборки комплекта |
| `.venv/` | Python с pywin32 — нужен для работы через COM |

Все файлы должны лежать **в одной папке**. Загрузчик определяет своё
расположение сам, при переносе папки путь править не нужно.

---

## Требования

**AutoCAD** запущен — сборка работает через COM.

**Папка скриптов** определяется автоматически (реестр → пути поддержки →
поиск в доверенных путях). Найденная папка запоминается в реестре
(`HKCU\Software\GENPRO\SPIS`) и добавляется в `TRUSTEDPATHS` — диалог
безопасности не появляется. Если автопоиск не сработал — команда `SPISSETDIR`.

**Python с pywin32.** В системном PATH может не быть Python, поэтому
рядом лежит собственное окружение `.venv`. Если папку переносят на
другую машину, окружение нужно создать заново:

```
python -m venv .venv
.venv\Scripts\python.exe -m pip install pywin32
```

Путь к интерпретатору LISP ищет сам: сначала `.venv\Scripts\python.exe`
рядом со скриптами, затем запасной вариант. Если ни один не найден —
команда сообщит об этом.

---

## Команды

### Создание комплекта

**`SPISRUNSETS`** — создаёт файлы дисциплин ЭТР/СС/ВК/ОВ рядом с АР
и подключает в каждый ссылки по схеме.

Ожидает корневую папку проекта с пятью подпапками:

```
Проект\
  АР\      АР К9.dwg       основа, ничего не подключает
  ЭТР\     ЭТР К9.dwg      содержит АР + ВК + ОВ + СС
  СС\      СС К9.dwg       содержит АР + ВК + ОВ + ЭТР
  ВК\      ВК К9.dwg       содержит АР + ОВ + СС + ЭТР
  ОВ\      ОВ К9.dwg       содержит АР + ВК + СС + ЭТР
```

Достаточно, чтобы существовал только файл АР — остальные команда создаст.

> **Почему через Python.** Операции с документами (создать, открыть,
> сохранить) из LISP блокируют AutoCAD: `vla-Open`, `_.OPEN` и `_.SAVEAS`
> внутри LISP вешают сессию — проверено на AutoCAD 2020. Поэтому команда
> запускает внешний скрипт, а AutoCAD остаётся свободен.

### Сборка СПИС

**`SPISATTACHSETS`** — подключает в открытый СПИС внешние ссылки на АР
и четыре дисциплины. Показывает список найденных файлов и запрашивает
подтверждение. При ответе, отличном от `Yes`, чертёж не изменяется.

### Работа со ссылками

| Команда | Действие |
|---|---|
| `XRLIST` | Список ссылок со статусом. Чертёж не изменяется |
| `XRBIND` | Внедрить все разрешённые ссылки |
| `XRBIND1` | Внедрить одну ссылку по имени |
| `XRPATH` | Сменить путь «переехавшей» ссылки |
| `XRUNBIND` | Отсоединить только битые (неразрешённые) ссылки |
| `XRDETACH` | Отсоединить все ссылки, с подтверждением |

Все команды работают по **активному** чертежу. Перед `XRBIND` и `XRDETACH`
проверьте, какое окно активно.

---

## Порядок работы

| Шаг | Действие |
|---|---|
| 1. Собрать комплект | `SPISRUNSETS` — указать корень проекта, ответить `Yes`. Сборка идёт в фоне |
| 2. Дождаться файлов | Следить за `%TEMP%\spis_sets_log.txt` |
| 3. Собрать СПИС | `SPISATTACHSETS` — указать тот же корень, ответить `Yes` |
| 4. Проверить | `XRLIST` — все ссылки должны быть «РАЗРЕШЕНА» |
| 5. Внедрить (если надо) | `XRBIND` — если по заданию ссылки внедряются перед сдачей |

---

## Загрузка

В командной строке AutoCAD:

```
APPLOAD
```

Выбрать `SPIS_TOOLS.lsp`, нажать «Загрузить».

### Автозагрузка при старте

`APPLOAD` → Содержимое → Добавить → `SPIS_TOOLS.lsp`.

Либо строка в `acaddoc.lsp`:

```lisp
(load "G:/Мой диск/lisp-code/SPIS/SPIS_TOOLS.lsp")
```

---

## Параметры подключения

| Параметр | Значение |
|---|---|
| Тип ссылки | Overlay (наложение) |
| Точка вставки | 0, 0, 0 |
| Масштаб | 1 : 1 по всем осям |
| Угол поворота | 0° |
| Единицы | миллиметры (INSUNITS = 4) |
| Повторное подключение | ссылка с таким именем пропускается |

**Почему Overlay, а не Attach.** Дисциплины ссылаются друг на друга,
образуя цикл СС ↔ ВК. При `Attach` циклические ссылки не загружаются,
при `Overlay` — отображаются корректно.

---

## Кодировка файлов

LISP-файлы хранятся в **Windows-1251**. AutoCAD 2020 не читает UTF-8:
кириллица превращается в мусор, загрузка падает с ошибкой
«команда не найдена».

**AutoCAD 2026** читает и cp1251, и UTF-8 — проверено живьём (кириллица
печатается верно в обоих вариантах). Для совместимости с 2020 файлы
по-прежнему держим в cp1251; `.lsp.utf8` — версия для правки.

Рядом с каждым `.lsp` лежит копия `.lsp.utf8` — та же версия для правки.
После правки перекодировать обратно:

```python
from pathlib import Path
p = Path("SPIS_TOOLS.lsp.utf8")
Path("SPIS_TOOLS.lsp").write_bytes(p.read_text(encoding="utf-8").encode("cp1251"))
```

**Отдельно про bat-файл.** Скрипт сборки запускается через `.bat`, который
пишется в **cp866 без `chcp`**. Если добавить `chcp 65001`, русские пути
внутри bat бьются и Python не находит файлы.

---

## Типовые проблемы

| Симптом | Причина и решение |
|---|---|
| «Команда не найдена» | Файл не загружен либо сохранён в UTF-8. Загрузить через `APPLOAD`, проверить кодировку. Если загрузка прошла, но подкоманд нет — выполнить `SPISSETDIR` и указать папку |
| `[НЕТ]` при загрузке | Файл не найден рядом с `SPIS_TOOLS.lsp` |
| `Не найден скрипт` | `build_discipline_sets.py` должен лежать рядом с LISP |
| Не найдено DWG | В подпапках АР, ЭТР, СС, ВК, ОВ нет файлов `.dwg` |
| Пропущено | Ссылка уже подключена, дубликат не создаётся |
| `Вызов был отклонен` | AutoCAD занят или завис. Перезапустить AutoCAD |
| Ссылка не видна | Проверить координаты и слои, выполнить `Z` → `E` |

---

## Правила работы со ссылками

- Не переименовывать и не перемещать DWG после подключения.
- Хранить папку проекта целиком, без разрыва структуры подпапок.
- Для обновления исходников — «Перезагрузить» в палитре XREF.
- Перед заменой состава ссылок сохранить резервную копию СПИС.
- Существующие DWG команда сборки не перезаписывает. Пересобрать комплект
  можно, только удалив файлы дисциплин вручную. АР не удаляется никогда.

---

GENPRO · Группа ЭТР · 2026
