31 июля, 2025

nanoCAD. Регистрация своих команд

Warning

Этот текст не претендует на полную полноту и абсолютную абсолютность.
Информация собрана из разных источников, как правило противоречащих друг другу.
Несмотря на это, статья написана
При появлении новых источников информации чуть менее чем совсем отрицающих предыдущий опыт
Текст будет переработан.
Но не точно

Команды [\configman\commands...]

Ключевые слова

Рассмотрим на примере регистрации команды:

[\configman\commands\drz_block_home_link]
weight=i10
cmdtype=i0
InterName=sdrz_block_home_link
DispName=sО программе
StatusText=sДомашняя страница blockFix
ToolTipText=sДомашняя страница программы
LocalName=sОбсуждение_PlotSPDS
RealCommandName=sshell_exec
Keyword=sopen,https://doctorraz.blogspot.com/2022/10/PlotSPDS.NET.html
BitmapDll=snewbtns.dll
Icon=sAbout

Note

буковки после знака равно (в значении параметра)
ни что иное как Венгерская нотация 😎
i - integer, число
s - string, строка
f - bool, булево, встречается в назначении видимости (панелей, контролов, вкладок или групп ленты и т.п.)

Note

ниже по тексту: по умолчанию , относится только к утилите MenuFilesGen (fork)

MenuMacroID - [\configman\commands\DRZ_BLOCK_HOME_LINK]

В ленту (ribbon) можно подключить только те кнопки, которые описаны в разделе [\configman\commands].
Привязка кнопок к ленте осуществляется через параметр MenuMacroID, который указывается в файле с расширением .cui.
Значение параметра MenuMacroID в файле .cui должно соответствовать имени команды в файле меню (.cfg).
Например:

Если [\configman\commands\DRZ_BLOCK_HOME_LINK]
тогда MenuMacroID="DRZ_BLOCK_HOME_LINK".

weight - вес команды

по умолчанию 10 (не знаю на , что влияет, надо будет у разработки поинтересоваться 💌

cmdtype - контекст выполнения команды

по умолчанию 1

  • 0 - контекст приложения
  • 1- контекст документа

InterName - Имя выполняемой команды

Может быть внутренним именем команды или определенным в dll, nrx, lsp

Important

InterName не обязательно команда загруженная из dll, nrx, lsp и т.п.
к пунктам меню, панелям команды, привязываются по значению параметра InterName,
в примере выше значение параметра InterName - внутренняя команда создается/регистрируется в момент загрузки файла конфигурации
т.е. если не загрузить *.cfg команда будет недоступна для вызова
по InterName команду можно вызвать из ком строки.
Если определены параметры RealCommandName и Keyword, значениеInterName может быть произвольным (см. ниже)

Warning

InterName - nanoCAD не принимает значение на кириллице!!!
Допустимы символы латинского алфавита и (или) цифры без пробелов
Название может начинаться или состоять из одних цифр
Кириллица в значении параметра приводит к невозможности регистрации в UI, соответственно не будет показываться в меню, панелях на кнопках ленты.
Если команда с символами кириллицы загружена из dll, nrx, lsp... (CommandMethod), то команду можно вызвать из ком строки, но зарегистрирована она не будет.
Локализованное имя команды прописывается в параметре LocalName

Костылик привязки команды на кириллице описан в Keyword

DispName - Имя команды, как оно будет показываться в меню

Отображаемое имя обязательный параметр

;
DispName=sDispName
;
МенюЛента
DispNameDispName
[\menu\...
;для меню задан параметр
name=sDispName

StatusText - Описание команды, показываемое в качестве всплывающей подсказки

Надпись при наведении мышью

;
DispName=sDispName
StatusText=sStatusText
;
ПанельЛента
StatusTextStatusText

ToolTipText - Описание команды, показываемое в качестве всплывающей подсказки

Надпись при наведении мышью

;
DispName=sDispName
ToolTipText=sToolTipText
;
ПанельЛента
ToolTipTextToolTipText

Important

если заданы одновременно StatusText и ToolTipText, то в всплывающей подсказке DispName показан не будет \

;
DispName=sDispName
StatusText=sStatusText
ToolTipText=sToolTipText
;
ToolTipText

BitmapDll - Ресурсная библиотека.dll или имя иконки

в значении параметра задается имя ресурсной dll
или имя иконки с расширением *.BMP, *.ICO
подробнее о BitmapDll

Icon - Название иконки из ресурсной библиотеки

в значении параметра задается имя иконки в ресурсной dll. подробнее о Icon

Note

Icon - используется только если задано значение для BitmapDll (*.dll)

LocalName - локализованное имя команды,

Фактически это второе необязательное название команды (alias)
произвольное уникальное значение в любой раскладке, буквы и (или) цифры без пробелов


Warning

при использовании RealCommandName и (или) Keyword
InterName это не реальная команда!!!
Это произвольное уникальное значение латинскими буквами и (или) цифрами без пробелов
В этом случае задавать для InterName реальную команду нельзя, nanoCAD'у может сильно поплохеть 💀

RealCommandName - реальное имя загруженной команды

в любой раскладке, допустимы цифры
всегда применяется совместно с Keyword
InterName произвольное уникальное значение латинскими буквами и (или) цифрами без пробелов

;откроет URL в браузере
InterName=sdrz_block_home_link
LocalName=sОбсуждение_PlotSPDS
RealCommandName=sshell_exec
Keyword=sopen,https://doctorraz.blogspot.com/2022/10/PlotSPDS.NET.html
;

Keyword - ключевое слово

в любой раскладке, допустимы цифры

Применяется:

  1. Как параметр команды, в этом случае используется совместно с RealCommandName
примеры и не спрашивайте меня что они делают и как это работает)

[\configman\commands\UCSX]
weight=z40,30
cmdtype=i1
intername=sUCSX
RealCommandName=sUCS
Keyword=sX
DispName=sX
StatusText=sПоворот пользовательской системы координат вокруг оси X
BitmapDll=snewbtns.dll
LocalName=sПскx
[\configman\commands\1111]
weight=i10
cmdtype=i1
intername=s1111
DispName=sDispName
StatusText=sStatusText
ToolTipText=sToolTipText
RealCommandName=sshell_exec
LocalName=s`00000000
Keyword=s"open,regedit"
BitmapDll=sic\power.ico
[\configman\commands\nanocad_forum_link]
weight=i30
cmdtype=i0
intername=snanocad_forum_link
RealCommandName=sshell_exec
Keyword=s"open,http://forum.nanocad.ru/"
DispName=sФорум поддержки nanoCAD
BitmapDll=snewbtns.dll
LocalName=sФорум_поддержки
[\configman\commands\DIR]
weight=i10
cmdtype=i0
intername=sDIR
RealCommandName=sshell_exec_param
Keyword=s*>params^Mcmd.exe,/K dir,DIR,1^M
[\configman\commands\DEL]
weight=i10
cmdtype=i0
intername=sDEL
RealCommandName=sshell_exec_param
Keyword=s*>params^Mcmd.exe,/K del,DEL,1^M
[\configman\commands\TYPE]
weight=i10
cmdtype=i0
intername=sTYPE
RealCommandName=sshell_exec_param
Keyword=s*>params^Mcmd.exe,/K type,TYPE,1^M
[\configman\commands\SH]
weight=i10
cmdtype=i0
intername=sSH
RealCommandName=sshell_exec_param
Keyword=s*>params^M,,Команда ОС,1^M
  1. Как параметр командной строки, (RealCommandName не используется)

В этом случае:

  • может принимать значение реальной команды ( dll, nrx, lsp)
  • макрокоманда
  • lisp выражение (не проверял но уверен может, это же просто ком строка)))
  • еще что то умеет 100% уверен)))
пример

[\configman\commands\Isorectangle]
weight=i30
cmdtype=i1
intername=sIsorectangle
Keyword=s$M=$(if,$(eq,$(getvar,SNAPSTYL),0),^C^CSNAPSTYL 1 rectangle i,^C^Crectangle i)
BitmapDll=snewbtns.dll
StatusText=sВключение режима изометрического проектирования и построение прямоугольника в текущей плоскости изометрии
DispName=sИзопрямоугольник
LocalName=sИзопрямоугольник
и даже такая красота)))

[\configman\commands\CADLibPublish]
weight=i10
cmdtype=i1
intername=sCADLibPublish
BitmapDll=sCADLibEnabler\CADLibRes.dll
Icon=sIDI_ViewerSmallG
StatusText=sОпубликовать модель в CADLib
ToolTipText=sОпубликовать модель в CADLib
DispName=sОпубликовать модель в CADLib
Keyword=s(RUN_CADLIBENABLER_COMMAND "CLP_DOC_CHECK_IN")

Команды вызова панелей

Пример конфига панели

; Панели
[\toolbars]

[\toolbars\BlockFix]
name=sBlockFix
[\toolbars\BlockFix\drz_test]
Intername=sdrz_test
[\toolbars\BlockFix\drz_test2]
Intername=sdrz_test2
[\toolbars\BlockFix\drz_save]
Intername=sdrz_save
[\toolbars\BlockFix\1111]
Intername=s1111

MenuMacroID панели - [\toolbars\BlockFix]

MenuMacroID идентификатор панели, в данном случае для команды ее показа/скрытия
MenuMacroID - BlockFix

Волшебное слово

Без него тут не обошлось SHOWTOOLBAR - ключевое слово которое вместе с MenuMacroID образуют команду показа скрытия панели

Intername=sShowToolbar_BlockFix

Пример команды вызова панели

[\configman\commands\ShowToolbar_BlockFix]
weight=i10
cmdtype=i0
Intername=sShowToolbar_BlockFix
StatusText=sОтображение панели BlockFix
ToolTipText=sОтображение панели BlockFix
DispName=sОтображение панели BlockFix
LocalName=sПанель_BlockFix
BitmapDll=snewbtns.dll
Icon=sBEDIT
cmdtype=i0

в случае вызова панели, контекст приложения, скрыть показать панель можно независимо от наличия открытого документа

LocalName локализованное имя команды

любое слово в любой раскладке с цифрами без пробелов
для примера Панель_Имя
на самом деле хоть 100500_Вася_пупкин_999, локализация будет работать

Нюансы

В общем случае MenuMacroID может содержать символы в любых раскладках, цифры и даже символы пробела
Все будет работать
В случае с MenuMacroID для панели это часть команды - InterName, т.е. из меню команду с пробелами вызвать получится, а из ком строки затруднительно
Конфигурация игнорирует регистр, цифры и раскладку (кроме выше оговоренных случаев)