Skip to content

Repository files navigation

Layer Cycle Manager — AutoCAD plugin для геодезии, геомониторинга

Скачать и распаковать одной командой (PowerShell) в текущую папку:

iwr "https://github.com/mrpatrickstar26/LayerCycleManager/releases/latest/download/LayerCycleManager.zip" -OutFile "lcm.zip"; Expand-Archive "lcm.zip" -DestinationPath "." -Force

CMD

curl -L -o LayerCycleManager.zip https://github.com/mrpatrickstar26/LayerCycleManager/releases/latest/download/LayerCycleManager.zip && tar -xf LayerCycleManager.zip

Нативная программа для AutoCAD, предназначенная для автоматического построения стрелок между точками, расположенными на разных слоях чертежа.
Реализована полностью на технологиях AutoCAD: AutoLISP / Visual LISP + ActiveX / COM, с нативным DCL-интерфейсом, интеграцией в ленту через CUIX, сохранением настроек и автономной установкой.
Версия: 1.0.0


1. Назначение программы

Программа используется для визуализации связей между одноимёнными или вручную сопоставленными точками разных циклов расчёта.

Основная задача:

  • выбрать слой с точками нулевого цикла;
  • выбрать слой с точками последнего цикла;
  • сопоставить точки между слоями автоматически или вручную (включая ручной ввод имён с клавиатуры);
  • построить стрелки от точек нулевого слоя к точкам последнего слоя;
  • подписать длину исходного отрезка в миллиметрах;
  • разместить стрелки на целевом слое;
  • назначить цвет: «по слою» (галочка) или по индексу ACI (включая выбор через родную палитру AutoCAD с HSL);
  • при необходимости удалить ранее построенные стрелки с выбранного слоя.

2. Установка и удаление

2.1. Требования

  • AutoCAD 2018 и новее (полная версия, не LT).

2.2. Скачивание программы с GitHub одной командой

Релизный архив публикуется на GitHub в разделе Releases и скачивается одной командой в текущую папку — ту, в которой открыт cmd или PowerShell.

CMD

curl -L -o LayerCycleManager.zip https://github.com/mrpatrickstar26/LayerCycleManager/releases/latest/download/LayerCycleManager.zip

Распаковка в CMD (Windows 10+):

tar -xf LayerCycleManager.zip

PowerShell

Скачивание и распаковка одной строкой:

iwr "https://github.com/mrpatrickstar26/LayerCycleManager/releases/latest/download/LayerCycleManager.zip" -OutFile "lcm.zip"; Expand-Archive "lcm.zip" -DestinationPath "." -Force

После распаковки в текущей папке появляется:

LayerCycleManager/

Далее выполняется установка по разделу 3.3 или 3.4.

Примечание: ссылка releases/latest/download/... всегда указывает на последний опубликованный релиз, поэтому команда не меняется при выходе новых версий.


2.3. Способ 1 — установщик

  1. Скопировать папку проекта:
    LayerCycleManager
    
    в удобное место (или скачать по разделу 3.2).
  2. В AutoCAD выполнить:
    APPLOAD
    
  3. Загрузить файл:
    LayerCycleManager/loader/lcm_loader.lsp
    
  4. Выполнить команду:
    LCMINSTALL
    
  5. В появившемся окне выбора файла указать:
    LayerCycleManager/lcm_main.lsp
    

Установщик автоматически:

  • добавит папку в Support File Search Path;
  • добавит папку в Trusted Locations;
  • загрузит программу;
  • загрузит lcm.cuix.

После этого в Ribbon появится вкладка:

Layer Cycle Manager

2.4. Способ 2 — вручную через параметры AutoCAD и _MENULOAD

Если установщик использовать не требуется или не работает, программу можно подключить вручную.

  1. Открыть параметры AutoCAD:
    OPTIONS
    
  2. На вкладке:
    Files
    
    добавить папку программы в:
    • Support File Search Path (путь поиска вспомогательных файлов);
    • Trusted Locations (доверенные расположения).
  3. Выполнить команду:
    _MENULOAD
    
  4. В открывшемся окне нажать:
    Browse / Обзор
    
    выбрать файл:
    LayerCycleManager/lcm.cuix
    
    и нажать:
    Load / Загрузить
    
  5. В Ribbon появится вкладка:
    Layer Cycle Manager
    

2.5. Запуск программы

  • кнопка на панели:
    Стрелки
    
    вкладки:
    Layer Cycle Manager
    
  • или команда:
    LCM
    

2.6. Обновление CUIX

  1. Выполнить:
    _MENUUNLOAD
    
  2. Выполнить:
    _MENULOAD
    
    и снова выбрать lcm.cuix.

2.7. Полное удаление программы

  1. Выгрузить CUIX:
    _MENUUNLOAD
    
    выбрать LCM и нажать «Выгрузить / Unload».
  2. В:
    OPTIONS → Files
    
    удалить папку проекта из:
    • Support File Search Path;
    • Trusted Locations.
  3. Удалить переменные окружения в командной строке:
    (setenv "LCM_PATH" nil)
    (setenv "LCM_CUIX_LOADED" nil)
  4. Переместить или удалить папку проекта.
  5. Перезапустить AutoCAD.

3. Стек проекта

Технология Назначение
AutoCAD 2018+ Среда выполнения
AutoLISP Основной язык логики
Visual LISP Расширенные функции AutoLISP
ActiveX / COM Работа с объектами AutoCAD
DCL Нативные диалоги AutoCAD
CUIX Интеграция в Ribbon и меню AutoCAD
Текстовый конфиг Сохранение настроек программы
LISP-установщик Автономная установка без ручной настройки
VSCode Среда разработки

4. Структура проекта

LayerCycleManager/
│
├── README.md               ; документация проекта
├── INSTALL.txt             ; краткая инструкция по установке и удалению
├── .gitignore              ; файлы и папки, исключаемые из Git
│
├── lcm_main.lsp            ; точка входа, команды LCM и LCMRELOAD
├── lcm_data.lsp            ; работа с данными чертежа
├── lcm_core.lsp            ; геометрия, отрисовка и удаление стрелок
├── lcm_config.lsp          ; настройки программы
├── lcm_ui.lsp              ; логика DCL-интерфейса
├── lcm_ui.dcl              ; описание DCL-диалога
├── lcm.cuix                ; частичный файл интерфейса AutoCAD
│
├── docs/
│   └── demo.gif            ; GIF-демонстрация работы
│
├── icons/
│   └── arrow.png           ; исходник иконки кнопки (215×215)
│
├── settings/
│   └── lcm_settings.cfg    ; создаётся автоматически, не попадает в Git
│
└── loader/
    └── lcm_loader.lsp      ; установщик, команда LCMINSTALL

5. Описание файлов проекта

5.1. README.md

Документация проекта: назначение, установка, описание интерфейса, функций и правил работы.


5.2. INSTALL.txt

Краткая инструкция для конечного пользователя: скачивание с GitHub одной командой, установка, запуск, перенос папки, удаление.


5.3. .gitignore

Исключает из репозитория служебные и локальные файлы:

  • временные файлы AutoCAD (*.bak, *.dwl, *.dwl2, *.tmp, *.sv$);
  • ресурсные файлы меню *.mnr;
  • резервные копии CUIX *.bak.cuix;
  • локальные настройки settings/lcm_settings.cfg;
  • локальные настройки VSCode.

5.4. lcm_main.lsp

Главный файл программы.

Отвечает за:

  • инициализацию Visual LISP COM;
  • загрузку модулей:
    • lcm_config.lsp;
    • lcm_data.lsp;
    • lcm_core.lsp;
    • lcm_ui.lsp;
  • флаг загрузки главного модуля lcm:loaded;
  • команду LCM — открытие диалога;
  • команду LCMRELOAD — перезагрузка модулей при разработке.

5.5. lcm_data.lsp

Модуль работы с данными чертежа:

  • получение списка слоёв;
  • поиск точек AcDbPoint на слое;
  • поиск текстов AcDbText / AcDbMText на слое;
  • сопоставление каждой точки с ближайшим текстом в радиусе (по умолчанию 50);
  • формирование имени Point_<Handle>, если текст не найден;
  • сортировка имён: числовые — по значению, строковые — лексикографически;
  • автоматическое сопоставление точек двух слоёв.

5.6. lcm_core.lsp

Модуль геометрии, отрисовки и удаления стрелок:

  • расчёт и построение одной стрелки;
  • построение линии, залитого наконечника AcDbSolid, текста длины;
  • назначение слоя и цвета (ByLayer / ACI);
  • пакетная отрисовка с undo-блоком;
  • поиск построенных стрелок на слое по тексту длины;
  • удаление стрелок (текст + отрезок + наконечник) с undo-блоком;
  • тестовые команды LCMTESTDRAW, LCMTESTRUN.

5.7. lcm_config.lsp

Модуль настроек:

  • хранение настроек в памяти (lcm:settings);
  • чтение и запись файла:
    settings/lcm_settings.cfg
    
  • автоматическое создание папки settings;
  • заполнение отсутствующих ключей значениями по умолчанию;
  • применение сохранённого радиуса поиска текста.

Сохраняемые ключи:

Ключ Назначение
LAYER_ZERO последний выбранный нулевой слой
LAYER_LAST последний выбранный последний слой
BY_LAYER галочка «По слою» (0/1)
ACI последний использованный индекс ACI
TEXT_HEIGHT последняя высота текста
SCALE последний масштаб
TEXT_SEARCH_RADIUS радиус поиска текста около точки
DEL_LAYER последний слой удаления стрелок

5.8. lcm_ui.lsp

Модуль пользовательского интерфейса:

  • открытие и заполнение DCL-диалога;
  • восстановление сохранённых настроек и состояния сессии;
  • обработка всех элементов диалога;
  • проверка введённых данных;
  • запуск отрисовки и удаления стрелок.

5.9. lcm_ui.dcl

Описание главного диалога:

lcm_main_dlg

Ключевые элементы:

Key Назначение
layer_zero выбор нулевого слоя
layer_last выбор последнего слоя
by_layer галочка «По слою»
aci поле ввода цвета ACI
pick_aci кнопка «Выбрать цвет...» — родной диалог AutoCAD с палитрой HSL
text_height высота текста
scale масштаб стрелок
del_layer слой удаления стрелок
del_count счётчик найденных стрелок
delete_arrows кнопка «Удалить»
info информационная строка с количеством точек
map_from_edit / map_to_edit ручной ввод имён точек с клавиатуры
map_from / map_to выбор точек из списков
mappings список сопоставлений
add_map / update_map / remove_map добавить / обновить / удалить сопоставление
auto_map / clear_map авто-сопоставление / очистить все
accept «Выполнить»
minimize «В чертёж» — временно закрыть диалог с сохранением состояния
cancel «Закрыть»

5.10. lcm.cuix

Частичный файл пользовательского интерфейса AutoCAD.

Содержит:

  • вкладку Ribbon:
    Layer Cycle Manager
    
  • панель:
    Стрелки
    
  • кнопку запуска со стилем:
    Большой с текстом (вертикально)
    
  • встроенную иконку кнопки (исходник 215×215);
  • пульдаун-меню:
    Меню → Layer Cycle Manager
    

Макрос кнопки:

^C^C^P(if (not lcm:loaded)(progn (if (findfile "lcm_main.lsp")(load "lcm_main.lsp")(alert "LCM: файл lcm_main.lsp не найден. Добавьте папку LayerCycleManager в Support File Search Path."))));LCM;

5.11. icons/

Содержит исходник иконки кнопки:

arrow.png

размером 215×215 пикселей. Большой исходник нужен для чёткого отображения иконки в слоте большой кнопки Ribbon (32×32 логических пикселя), в том числе при масштабировании Windows и на HiDPI-мониторах.


5.12. settings/

Папка локальных настроек. Файл:

lcm_settings.cfg
  • создаётся автоматически при первом нажатии «Выполнить»;
  • не попадает в Git;
  • при удалении файла программа возвращается к значениям по умолчанию.

5.13. loader/

Установщик программы:

lcm_loader.lsp

Команда:

LCMINSTALL

Запрашивает путь к папке программы, регистрирует пути в AutoCAD, загружает программу и lcm.cuix.


6. Используемые команды AutoCAD

Команда Назначение
LCM Основная команда: открывает диалог программы
LCMRELOAD Перезагрузка модулей программы
LCMINSTALL Одноразовый установщик
APPLOAD Загрузка lcm_loader.lsp перед первой установкой
_MENULOAD Загрузка lcm.cuix в интерфейс AutoCAD
_MENUUNLOAD Выгрузка lcm.cuix при обновлении или удалении
MENUBAR Включение строки меню (значение 1) для пульдаун-меню
CUI Редактор пользовательского интерфейса
LCMLAYERS Служебная: вывод списка слоёв
LCMTESTDATA Служебная: вывод точек и имён со слоя
LCMTESTDRAW Служебная: ручная тестовая стрелка
LCMTESTRUN Служебная: тестовая автоотрисовка

7. Подробное описание функций

7.1. lcm_main.lsp

Имя Назначение
lcm:load-module безопасная загрузка одного модуля
lcm:load-modules загрузка всех модулей в правильном порядке
lcm:start точка запуска: открывает диалог, если интерфейс готов
C:LCM команда LCM
C:LCMRELOAD команда LCMRELOAD

7.2. lcm_data.lsp

Имя Назначение
lcm:get-layers отсортированный список слоёв чертежа
lcm:get-points-with-names точки слоя с именами: {имя: (x y)}
lcm:get-object-coords координаты объекта (Coordinates / InsertionPoint)
lcm:get-object-handle handle объекта
lcm:is-numeric проверка, является ли строка числом
lcm:name< сравнение имён для сортировки
lcm:sort-points сортировка списка точек по имени
lcm:add-or-replace-point добавление или замена точки в списке
lcm:get-point-names только имена точек
lcm:auto-mappings авто-сопоставление по одинаковым именам

Алгоритм lcm:get-points-with-names:

  1. Сканирует Model Space и отбирает объекты указанного слоя.
  2. Собирает точки и тексты.
  3. Для каждой точки ищет ближайший текст в радиусе lcm:text-search-radius.
  4. Если текст найден — имя точки равно тексту; иначе Point_<Handle>.
  5. Возвращает отсортированный список пар (имя . (x y)).

7.3. lcm_core.lsp

Имя Назначение
lcm:deg2rad градусы в радианы
lcm:pt3 2D-точка в 3D-точку ActiveX
lcm:is-string проверка строкового типа
lcm:distance-2d расстояние только по X и Y
lcm:ensure-layer создание слоя при отсутствии
lcm:set-object-properties назначение слоя и цвета (ByLayer / ACI)
lcm:draw-arrow отрисовка одной стрелки
lcm:run пакетная отрисовка по сопоставлениям
lcm:get-line-point координаты вершины отрезка
lcm:get-bbox габаритный прямоугольник объекта
lcm:point-in-bbox проверка попадания точки в прямоугольник
lcm:find-arrows поиск стрелок на слое по тексту длины
lcm:delete-by-handle удаление объекта по handle
lcm:delete-arrows удаление всех стрелок на слое

Геометрия стрелки:

  • линия рисуется от start до:
    start + (end - start) * scale
    
  • длина текста считается по исходным точкам без учёта scale;
  • длина переводится в миллиметры:
    длина в мм = длина в метрах × 1000
    
    с математическим округлением;
  • наконечник — залитый треугольник AcDbSolid;
  • угол при вершине — 20° (по 10° от оси);
  • длина крыла:
    0.2 × длина × scale
    
  • текст размещается строго в точке острия.

Поиск и удаление стрелок:

  1. На выбранном слое собираются тексты, отрезки и Solid.
  2. Текст считается «текстом длины», если его точка вставки совпадает с концом отрезка (допуск 0.001).
  3. К той же точке подбирается наконечник Solid по габаритному прямоугольнику.
  4. Количество таких текстов = количество стрелок.
  5. Удаление убирает все три объекта каждой стрелки и откатывается одним Ctrl + Z.

7.4. lcm_config.lsp

Имя Назначение
lcm:config-defaults настройки по умолчанию
lcm:config-path путь к settings/lcm_settings.cfg
lcm:config-ensure-folder создание папки settings
lcm:list-assoc-set обновление значения в association list
lcm:config-get получить значение настройки
lcm:config-set установить значение настройки в памяти
lcm:config-load загрузить настройки из файла и объединить с дефолтами
lcm:config-save сохранить настройки в файл

7.5. lcm_ui.lsp

Имя Назначение
lcm:show-main-dialog открывает главный диалог
lcm:ui-fill-layers заполняет списки слоёв (список читается заново при каждом открытии диалога)
lcm:ui-fill-del-layer заполняет список слоя удаления
lcm:ui-refresh-points читает точки с выбранных слоёв
lcm:ui-fill-point-combos заполняет списки и поля ввода точек
lcm:ui-fill-mappings обновляет список сопоставлений
lcm:ui-add-map добавляет сопоставление (с проверкой существования точек)
lcm:ui-update-map обновляет выбранное сопоставление
lcm:ui-remove-map удаляет выбранное сопоставление
lcm:ui-auto-map авто-сопоставление; ненайденные помечаются <not found>
lcm:ui-clear-map очищает все сопоставления
lcm:ui-on-mapping-select при клике по строке подставляет значения в поля ввода
lcm:ui-popup-sync копирует выбранное из списка значение в поле ввода
lcm:ui-update-by-layer включает/отключает поля ACI по галочке «По слою»
lcm:ui-pick-aci открывает родной диалог выбора цвета AutoCAD (вкладка «Вся палитра» HSL) и подставляет ближайший ACI
lcm:ui-update-del-count считает стрелки на выбранном слое удаления
lcm:ui-delete-arrows удаляет все стрелки на слое удаления
lcm:ui-valid-mappings возвращает только корректные сопоставления
lcm:num->str число в аккуратную строку для полей ввода
lcm:ui-save-session сохраняет текущее состояние диалога в памяти сессии
lcm:ui-apply-session восстанавливает состояние после «В чертёж»
lcm:ui-apply-settings восстанавливает сохранённые настройки из файла
lcm:ui-accept проверка данных, сохранение настроек, запуск выполнения
lcm:ui-execute запуск отрисовки после закрытия диалога

8. Форматы данных

8.1. Список точек

(
  ("1" . (100.0 200.0))
  ("2" . (150.0 220.0))
  ("Point_1A2B" . (180.0 260.0))
)

8.2. Список сопоставлений

(
  ((from . "1") (to . "1"))
  ((from . "2") (to . "5"))
)

8.3. Файл настроек

Одно LISP-выражение, например:

(("LAYER_ZERO" . "Уч.4 Цикл 0") ("LAYER_LAST" . "Уч.4 Цикл 51") ("BY_LAYER" . 0) ("ACI" . 3) ("TEXT_HEIGHT" . 3.0) ("SCALE" . 70.0) ("TEXT_SEARCH_RADIUS" . 50.0) ("DEL_LAYER" . "Уч.4 Цикл 51"))

9. Ключевые глобальные переменные

Переменная Назначение
lcm:version версия программы ("0.3.0")
lcm:debug вывод служебных сообщений
lcm:loaded флаг загрузки главного модуля
lcm:ui-loaded флаг готовности интерфейса
lcm:settings текущие настройки (association list)
lcm:text-search-radius радиус поиска текста около точки
lcm:unnamed-point-prefix префикс для точек без текста ("Point_")
lcm:placeholder метка ненайденных точек ("<not found>")
lcm:session-* состояние диалога для «В чертёж» / возврата

Переменные окружения и системные переменные установщика:

Имя Назначение
LCM_PATH сохранённый путь к папке программы
LCM_CUIX_LOADED флаг того, что lcm.cuix загружался установщиком
ACAD Support File Search Path (установщик добавляет папку)
TRUSTEDPATHS Trusted Locations (установщик добавляет папку)

10. Важные допущения и правила

10.1. Единицы чертежа

Предполагается, что чертёж выполнен в метрах.

длина в мм = длина в метрах × 1000

Округление — по математическим правилам.

10.2. Пространство объектов

Программа сканирует:

ModelSpace

Объекты в Layout, блоках и XREF не обрабатываются.

10.3. Цвет объектов

  • галочка «По слою» включена — цвет ByLayer;
  • выключена — цвет по индексу ACI (1–255), вручную или через родной диалог выбора цвета AutoCAD.

10.4. Масштаб

Масштаб влияет только на визуальное удлинение линии:

конец линии = start + (end - start) * scale

Длина текста всегда считается по исходным точкам.

10.5. Настройки

  • сохраняются только при нажатии «Выполнить»;
  • восстанавливаются при следующем открытии диалога;
  • список слоёв читается заново при каждом открытии диалога, поэтому отдельная кнопка обновления слоёв не требуется;
  • кнопка «В чертёж» временно закрывает диалог с сохранением текущего состояния; возврат — командой LCM или кнопкой на ленте.

10.6. Сопоставления

  • имена точек можно выбирать из списков или вводить с клавиатуры;
  • введённое имя проверяется: точка с таким именем должна существовать на соответствующем слое;
  • имена сравниваются точно, с учётом регистра и пробелов.

10.7. Удаление стрелок

  • стрелка определяется по тексту длины, примыкающему к концу отрезка;
  • удаляются текст длины, отрезок и наконечник;
  • точки и их имена на слое не удаляются;
  • удаление откатывается одним Ctrl + Z.

10.8. Распространение

  • релизный архив публикуется на GitHub в Releases;
  • скачивание одной командой в текущую папку (cmd или PowerShell) по ссылке:
    https://github.com/mrpatrickstar26/LayerCycleManager/releases/latest/download/LayerCycleManager.zip
    
  • ссылка всегда указывает на последний релиз, поэтому команды у пользователей не меняются при обновлении версии.

11. Примечания

11.1. Кодировка DCL

Файл:

lcm_ui.dcl

содержит русские подписи. Если в AutoCAD они отображаются некорректно, сохраните именно этот файл в кодировке:

Windows 1251

через VSCode: правый нижний угол → «Save with Encoding» → «Windows 1251».

11.2. Ribbon и иконки

  1. Размер кнопки на ленте задаётся стилем кнопки в CUI, а не размером файла иконки.
  2. Используется стиль:
    Большой с текстом (вертикально)
    
  3. Физический предел иконки на ленте — слот большой кнопки (32×32 логических пикселя).
  4. Исходник иконки 215×215 нужен только для чёткости при масштабировании.
  5. Иконка встраивается в lcm.cuix и работает на других компьютерах без папки icons.

11.3. Пульдаун-меню

  1. Меню:
    Меню → Layer Cycle Manager
    
    отображается только в классической строке меню.
  2. Строка меню включается командой:
    MENUBAR
    
    со значением 1.
  3. Если строка включена, но пункта нет, меню нужно добавить в текущее рабочее пространство:
    • CUI;
    • выбрать текущее рабочее пространство;
    • «Настройка рабочего пространства»;
    • отметить флажком:
      LCM → Меню → Layer Cycle Manager
      
    • «Готово»;
    • Применить / OK.
  4. Меню должно быть верхнего уровня: находиться прямо под узлом «Меню» файла lcm.cuix.

About

Layer Cycle Manager - плагин для AutoCAD на AutoLISP. Автоматически строит стрелки-отклонений между точками разных циклов измерений.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages