Скачать и распаковать одной командой (PowerShell) в текущую папку:
iwr "https://github.com/mrpatrickstar26/LayerCycleManager/releases/latest/download/LayerCycleManager.zip" -OutFile "lcm.zip"; Expand-Archive "lcm.zip" -DestinationPath "." -ForceCMD
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
Программа используется для визуализации связей между одноимёнными или вручную сопоставленными точками разных циклов расчёта.
Основная задача:
- выбрать слой с точками нулевого цикла;
- выбрать слой с точками последнего цикла;
- сопоставить точки между слоями автоматически или вручную (включая ручной ввод имён с клавиатуры);
- построить стрелки от точек нулевого слоя к точкам последнего слоя;
- подписать длину исходного отрезка в миллиметрах;
- разместить стрелки на целевом слое;
- назначить цвет: «по слою» (галочка) или по индексу ACI (включая выбор через родную палитру AutoCAD с HSL);
- при необходимости удалить ранее построенные стрелки с выбранного слоя.
- AutoCAD 2018 и новее (полная версия, не LT).
Релизный архив публикуется на GitHub в разделе Releases и скачивается одной командой в текущую папку — ту, в которой открыт cmd или PowerShell.
curl -L -o LayerCycleManager.zip https://github.com/mrpatrickstar26/LayerCycleManager/releases/latest/download/LayerCycleManager.zipРаспаковка в CMD (Windows 10+):
tar -xf LayerCycleManager.zipСкачивание и распаковка одной строкой:
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/... всегда указывает на последний опубликованный релиз, поэтому команда не меняется при выходе новых версий.
- Скопировать папку проекта:
в удобное место (или скачать по разделу 3.2).
LayerCycleManager - В AutoCAD выполнить:
APPLOAD - Загрузить файл:
LayerCycleManager/loader/lcm_loader.lsp - Выполнить команду:
LCMINSTALL - В появившемся окне выбора файла указать:
LayerCycleManager/lcm_main.lsp
Установщик автоматически:
- добавит папку в Support File Search Path;
- добавит папку в Trusted Locations;
- загрузит программу;
- загрузит
lcm.cuix.
После этого в Ribbon появится вкладка:
Layer Cycle Manager
Если установщик использовать не требуется или не работает, программу можно подключить вручную.
- Открыть параметры AutoCAD:
OPTIONS - На вкладке:
добавить папку программы в:
Files- Support File Search Path (путь поиска вспомогательных файлов);
- Trusted Locations (доверенные расположения).
- Выполнить команду:
_MENULOAD - В открывшемся окне нажать:
выбрать файл:
Browse / Обзори нажать:LayerCycleManager/lcm.cuixLoad / Загрузить - В Ribbon появится вкладка:
Layer Cycle Manager
- кнопка на панели:
вкладки:
СтрелкиLayer Cycle Manager - или команда:
LCM
- Выполнить:
_MENUUNLOAD - Выполнить:
и снова выбрать
_MENULOADlcm.cuix.
- Выгрузить CUIX:
выбрать
_MENUUNLOADLCMи нажать «Выгрузить / Unload». - В:
удалить папку проекта из:
OPTIONS → Files- Support File Search Path;
- Trusted Locations.
- Удалить переменные окружения в командной строке:
(setenv "LCM_PATH" nil) (setenv "LCM_CUIX_LOADED" nil)
- Переместить или удалить папку проекта.
- Перезапустить AutoCAD.
| Технология | Назначение |
|---|---|
| AutoCAD 2018+ | Среда выполнения |
| AutoLISP | Основной язык логики |
| Visual LISP | Расширенные функции AutoLISP |
| ActiveX / COM | Работа с объектами AutoCAD |
| DCL | Нативные диалоги AutoCAD |
| CUIX | Интеграция в Ribbon и меню AutoCAD |
| Текстовый конфиг | Сохранение настроек программы |
| LISP-установщик | Автономная установка без ручной настройки |
| VSCode | Среда разработки |
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
Документация проекта: назначение, установка, описание интерфейса, функций и правил работы.
Краткая инструкция для конечного пользователя: скачивание с GitHub одной командой, установка, запуск, перенос папки, удаление.
Исключает из репозитория служебные и локальные файлы:
- временные файлы AutoCAD (
*.bak,*.dwl,*.dwl2,*.tmp,*.sv$); - ресурсные файлы меню
*.mnr; - резервные копии CUIX
*.bak.cuix; - локальные настройки
settings/lcm_settings.cfg; - локальные настройки VSCode.
Главный файл программы.
Отвечает за:
- инициализацию Visual LISP COM;
- загрузку модулей:
lcm_config.lsp;lcm_data.lsp;lcm_core.lsp;lcm_ui.lsp;
- флаг загрузки главного модуля
lcm:loaded; - команду
LCM— открытие диалога; - команду
LCMRELOAD— перезагрузка модулей при разработке.
Модуль работы с данными чертежа:
- получение списка слоёв;
- поиск точек
AcDbPointна слое; - поиск текстов
AcDbText/AcDbMTextна слое; - сопоставление каждой точки с ближайшим текстом в радиусе (по умолчанию 50);
- формирование имени
Point_<Handle>, если текст не найден; - сортировка имён: числовые — по значению, строковые — лексикографически;
- автоматическое сопоставление точек двух слоёв.
Модуль геометрии, отрисовки и удаления стрелок:
- расчёт и построение одной стрелки;
- построение линии, залитого наконечника
AcDbSolid, текста длины; - назначение слоя и цвета (ByLayer / ACI);
- пакетная отрисовка с undo-блоком;
- поиск построенных стрелок на слое по тексту длины;
- удаление стрелок (текст + отрезок + наконечник) с undo-блоком;
- тестовые команды
LCMTESTDRAW,LCMTESTRUN.
Модуль настроек:
- хранение настроек в памяти (
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 |
последний слой удаления стрелок |
Модуль пользовательского интерфейса:
- открытие и заполнение 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 |
«Закрыть» |
Частичный файл пользовательского интерфейса 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;
Содержит исходник иконки кнопки:
arrow.png
размером 215×215 пикселей. Большой исходник нужен для чёткого отображения иконки в слоте большой кнопки Ribbon (32×32 логических пикселя), в том числе при масштабировании Windows и на HiDPI-мониторах.
Папка локальных настроек. Файл:
lcm_settings.cfg
- создаётся автоматически при первом нажатии «Выполнить»;
- не попадает в Git;
- при удалении файла программа возвращается к значениям по умолчанию.
Установщик программы:
lcm_loader.lsp
Команда:
LCMINSTALL
Запрашивает путь к папке программы, регистрирует пути в AutoCAD, загружает программу и lcm.cuix.
| Команда | Назначение |
|---|---|
LCM |
Основная команда: открывает диалог программы |
LCMRELOAD |
Перезагрузка модулей программы |
LCMINSTALL |
Одноразовый установщик |
APPLOAD |
Загрузка lcm_loader.lsp перед первой установкой |
_MENULOAD |
Загрузка lcm.cuix в интерфейс AutoCAD |
_MENUUNLOAD |
Выгрузка lcm.cuix при обновлении или удалении |
MENUBAR |
Включение строки меню (значение 1) для пульдаун-меню |
CUI |
Редактор пользовательского интерфейса |
LCMLAYERS |
Служебная: вывод списка слоёв |
LCMTESTDATA |
Служебная: вывод точек и имён со слоя |
LCMTESTDRAW |
Служебная: ручная тестовая стрелка |
LCMTESTRUN |
Служебная: тестовая автоотрисовка |
| Имя | Назначение |
|---|---|
lcm:load-module |
безопасная загрузка одного модуля |
lcm:load-modules |
загрузка всех модулей в правильном порядке |
lcm:start |
точка запуска: открывает диалог, если интерфейс готов |
C:LCM |
команда LCM |
C:LCMRELOAD |
команда LCMRELOAD |
| Имя | Назначение |
|---|---|
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:
- Сканирует Model Space и отбирает объекты указанного слоя.
- Собирает точки и тексты.
- Для каждой точки ищет ближайший текст в радиусе
lcm:text-search-radius. - Если текст найден — имя точки равно тексту; иначе
Point_<Handle>. - Возвращает отсортированный список пар
(имя . (x y)).
| Имя | Назначение |
|---|---|
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 - текст размещается строго в точке острия.
Поиск и удаление стрелок:
- На выбранном слое собираются тексты, отрезки и Solid.
- Текст считается «текстом длины», если его точка вставки совпадает с концом отрезка (допуск 0.001).
- К той же точке подбирается наконечник Solid по габаритному прямоугольнику.
- Количество таких текстов = количество стрелок.
- Удаление убирает все три объекта каждой стрелки и откатывается одним
Ctrl + Z.
| Имя | Назначение |
|---|---|
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 |
сохранить настройки в файл |
| Имя | Назначение |
|---|---|
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 |
запуск отрисовки после закрытия диалога |
(
("1" . (100.0 200.0))
("2" . (150.0 220.0))
("Point_1A2B" . (180.0 260.0))
)(
((from . "1") (to . "1"))
((from . "2") (to . "5"))
)Одно 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"))| Переменная | Назначение |
|---|---|
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 (установщик добавляет папку) |
Предполагается, что чертёж выполнен в метрах.
длина в мм = длина в метрах × 1000
Округление — по математическим правилам.
Программа сканирует:
ModelSpace
Объекты в Layout, блоках и XREF не обрабатываются.
- галочка «По слою» включена — цвет
ByLayer; - выключена — цвет по индексу ACI (1–255), вручную или через родной диалог выбора цвета AutoCAD.
Масштаб влияет только на визуальное удлинение линии:
конец линии = start + (end - start) * scale
Длина текста всегда считается по исходным точкам.
- сохраняются только при нажатии «Выполнить»;
- восстанавливаются при следующем открытии диалога;
- список слоёв читается заново при каждом открытии диалога, поэтому отдельная кнопка обновления слоёв не требуется;
- кнопка «В чертёж» временно закрывает диалог с сохранением текущего состояния; возврат — командой
LCMили кнопкой на ленте.
- имена точек можно выбирать из списков или вводить с клавиатуры;
- введённое имя проверяется: точка с таким именем должна существовать на соответствующем слое;
- имена сравниваются точно, с учётом регистра и пробелов.
- стрелка определяется по тексту длины, примыкающему к концу отрезка;
- удаляются текст длины, отрезок и наконечник;
- точки и их имена на слое не удаляются;
- удаление откатывается одним
Ctrl + Z.
- релизный архив публикуется на GitHub в Releases;
- скачивание одной командой в текущую папку (cmd или PowerShell) по ссылке:
https://github.com/mrpatrickstar26/LayerCycleManager/releases/latest/download/LayerCycleManager.zip - ссылка всегда указывает на последний релиз, поэтому команды у пользователей не меняются при обновлении версии.
Файл:
lcm_ui.dcl
содержит русские подписи. Если в AutoCAD они отображаются некорректно, сохраните именно этот файл в кодировке:
Windows 1251
через VSCode: правый нижний угол → «Save with Encoding» → «Windows 1251».
- Размер кнопки на ленте задаётся стилем кнопки в CUI, а не размером файла иконки.
- Используется стиль:
Большой с текстом (вертикально) - Физический предел иконки на ленте — слот большой кнопки (32×32 логических пикселя).
- Исходник иконки 215×215 нужен только для чёткости при масштабировании.
- Иконка встраивается в
lcm.cuixи работает на других компьютерах без папкиicons.
- Меню:
отображается только в классической строке меню.
Меню → Layer Cycle Manager - Строка меню включается командой:
со значением
MENUBAR1. - Если строка включена, но пункта нет, меню нужно добавить в текущее рабочее пространство:
CUI;- выбрать текущее рабочее пространство;
- «Настройка рабочего пространства»;
- отметить флажком:
LCM → Меню → Layer Cycle Manager - «Готово»;
- Применить / OK.
- Меню должно быть верхнего уровня: находиться прямо под узлом «Меню» файла
lcm.cuix.