USER.MNU
- ПОЛЬЗОВАТЕЛЬСКОЕ МЕНЮ |
СТРУКТУРА
МЕНЮ |
Как запустить программу на лиспе, создать свое
меню - об этом все ещё часто спрашивают на форумах и
конференциях. Поэтому читайте!
Ввод команд в системе AutoCAD осуществляется
с помощью меню или из командной строки. При вызове того
или иного пункта меню ситеме передается управлющий код.
Управляющий код может быть простым или сложным, включающим
в себя различные проверки, переходы по условиям, загрузку
и запуск программы на исполнение.
Запуск программы с командной строки выглядит следующим образом:
- загрузка программы
(Load "prog_name")
где "prog_name" - это имя лисп-файла программы,
- вызов программы на исполнение
(C:prog_name) или prog_name
(C:prog_name) - имя главной функции,собственно и есть сам вызов, причем
в одном сеансе работы достаточно один раз загрузить программу, а потом
только вызывать ее. В большинстве случаев имя файла и имя главной функции
совпадают, но все-таки лучше проверить, если код программы открыт.
Надо найти в теле кода строку типа
(defun c:<имя_команды> (........
если оно отлично от имени файла,
то запускать программу на исполнение надо будет
так -
(c:<имя_команды>)
Иногда, после загрузки программы,
в командной строке бывает сообщение как запустить
данную программу на исполнение.
Если программ, которые вы используете, набролось
достаточно и (или) грузить прогу с командной строки в
лом можно создать свое меню запуска.
Для удобства использования программ на AutoLISP, создайте
свое меню для запуска программ. Создайте текстовый файл
с расширением *.MNU по анологии с ACAD.MNU.Включите программу одним из пунктов меню. При
выботе пункта меню будет выполняться загрузка (если программа
не загружена ранее) и запуск AutoLISP программы.
Если Вы создаете свое меню с именем, например, MY.MNU,
создайте и файл MY.MNL. В файлы с таким расширением необходимы
для подгрузки необходимых программ.
Пункты меню удобнее добавлять в файл MY.MNS, т.к. при этом сохраняется
установка (видимость, положение на экране) панелей меню. Этот файл создается
после компиляции (загрузки) вашего меню (MY.MNU) в АКАД и редактировать в дальнейшем
я предпочитаю его. Файл MY.MNS практически идентичен MY.MNU. Периодически можно копировать
MY.MNS в MY.MNU и использовать последний как страховочная копия
Файл меню состоит из нескольких разделов. Нам интересны
разделы POP1...POP15 - падающие группы текстового меню
и TOOLBARS - панели (или набор иконок) меню и графическое
меню IMAGE.
|
ТЕКСТОВОЕ
ПАДАЮЩЕЕ МЕНЮ |
Каждая группа меню начинается с
записи идентификатора следующего вида
*** POP<N>
- где <N> определяет порядковый номер падающего меню, ниже следует
**DRAW
- название группы, которой будет отображаться в строке меню , по которому
к нему можно обращаться, после этого идут пункты меню. Ниже приведен
пример:
***POP7
**DRAW
[&Draw]
[&Line]^C^C_line
[&Ray]^C^C_ray
[Cons&truction Line]^C^C_xline
[&Multiline]^C^C_mline
[--]
[&Polyline]^C^C_pline
[&3D Polyline]^C^C_3dpoly
[Pol&ygon]^C^C_polygon
[Rectan&gle]^C^C_rectang
[--]
В квадратных скобках написано то, что будет на экране,
знак & определяет букву, по которой происходит вызов
с клавиатуры, на экране эта буква будет подчеркнута.
Далее ^C^C - отмена любой предыдущей команды AutoCAD'а, затем вызов собственно
программы или встроенной команды.
^P - отмена эха выполнения команд в командной строке.
На экране отобразится лишь то, что в квадратных скобках (пункты меню).
***POP7 - порядковый номер меню на экране.
В каждом файле падающие группы меню должны нумероваться
от 1 до ..., без пропусков.
**DRAW - название ниспадающего
меню, которое высвечивается в строке текстового
меню.
Если мы захотим вставить пункт в одну из групп меню, вызывающий
программу CONUS, запишем по аналогии следующее:
[Конус]^C^C^P (load "conus"); conus;
Сначала надо загрузить программу на лиспе, записанную
в файле CONUS, а затем вызвать ее на выполнение. Лучше
проверить, может программа уже загружена, тогда грузить
ее снова не стоит:
[Конус]^C^C^P(if (= C:conus nil) (load "conus"));
conus;
В тексте программы всегда должна быть главная подпрограмма,
начинающаяся с
(defun C:conus ( / ........
это имя и надо указывать при вызове.
В большинстве случаев имя программы совпадает с именем главной подпрограммы.
В большинстве случаев при нормальной загрузке программы в командной строке
появляется информация об этом и имя вызываемой (главной) подпрограммы.
В падающее текстовое меню можно вложить раскрывающееся к пукту подменю.
Так при наведении на пункт "ФОРМАТКА ЧЕРТЕЖА" появятся два
пункта подменю - "СПЕЦИФИКАЦИЯ" и "МАТЕРИАЛ". Сделать
это просто. Обратите внимание на два знака -> <- и
Все.
[->Форматка чертежа]
|
|
[Спецификация]^C^C^P(progn(command "_INSERT" "sp_indraw" pause
1 1 0)(command "_EXPLODE" "last"))
[<-Материал]^C^C^P(if(= C:mtrl nil)(load "mtrl"));mtrl; |
[Переходник]^C^C^P(if(=
C:transit nil)(load "transition"));transit;
[Шероховатость]^C^C^P(if(= C:facing nil)(load "facing"));facing;
|
МЕНЮ
ПАНЕЛИ (TOOLBARS) |
Так называемое меню - TOOLBARS,
позволяет запускать команды АвтоКАДа, указывая на графические
элементы (кнопочки), которые группируются в панели и могут
находиться в любом месте экрана.
В файле меню раздел панелей начинается следующим образом:
***TOOLBARS
название раздела
**ОБЩАЯ
имя панели
[_Toolbar("Общая", _Floating, _Show, 0, 2, 1)]
параметры панели "ОБЩАЯ" (плавающая, видна на экране, координаты).
Параметры можно написать здесь произвольные, а установить их уже на экране.
[_Flyout("PG", PG16.bmp, PG24.bmp, _OtherIcon, PG.TB_PG_MAIN)]
_Flyout - указывает, что иконка вызывает другую, вложенную, панель
"PG" - строка, которая будет высвечиваться, как помошь или пояснение,
при наведении мышки на эту иконку.
"PG16.bmp" - файл самой иконки размером 16х16 или 24х24 для разных
разрешений
Далее сказано, что панель "ОБЩАЯ" включает в себя другую панель,
находящуюся в файле меню PG (PG.MNS) и имеющую имя "TB_PG_MAIN".
Далее могут идти другие панели
[_Flyout("Станд инструменты", ncopy16.bmp, ncopy24.bmp,
_OtherIcon, PG.TB_2)]
или отдельные кнопки, вызывающие программы на исполнение
[_Button("Дата...", "wndate.bmp", "wndate.bmp")]^C^C^P(if
(= C:wndate nil) (load "wndate"));wndate;
структура, надеюсь понятна из всего выше сказанного.
Сама панель TB_PG_MAIN" выглядит так
**TB_PG_MAIN
[_Toolbar("Главная", _Top, _Show, 1, 1, 1)]
[_Flyout("Текстовые операции", dtext.bmp, dtext.bmp, _OtherIcon,
PG.TB_TEKCT)]
[_Button("Дата...", "wndate.bmp", "wndate.bmp")]^C^C^P(if
(= C:wndate nil) (load "wndate"));wndate;
[--]
[_Flyout("Радиус/Фаска", 0c.bmp, 0c.bmp, _OtherIcon, PG.TB_PG_RADFAS)]
[_Button("Разрез", "ICON_Slit.bmp", "ICON_Slit.bmp")]^C^C^P(if
(= C:slit nil)(load "slit"));slit;
Здесь есть и отдельные кнопки для запуска программ и кнопки вложенных
панелей.
Надеюсь все понятно !
|
ИКОННОЕ
МЕНЮ ВЫБОРА (IMAGE) |
Иногда необходимо или более
удобно и наглядно выполнить какой-то выбор типовых элементов
(болты, гайки, шайбы) по рисунку или схеме. Средства АвтоКАДа
позволяю включить такой выбор в меню. Для этого необходимо
создать слайды с нужным изображением, сгруппировать их в
библиотеку (для удобства), но есть одно замечание : имена
файлов слайдов должны быть в формате 8.3 и только английскими
буквами, иначе библиотека не создается!
(Спасибо за замечание
kpblc)
А затем надо сделать следующее :
Включить в текстовый раздел меню (POP или TOOLBARS) подобную
строку
[Фланцы, штуцера ...]^C^C^P$I=PG.lap1 $i=PG.*
где после названия пункта меню, управляющих символов ^C^C^P
- идет указание на вызов меню типа IMAGE из файла PG (PG.MNS)
с именем LAP1. Затем $i=PG.* - вызывает окно со слайдами.
В разделе IMAGE надо описать это меню.
***IMAGE
имя раздела
**LAP1
имя меню
[Select ProType]
имя заголовка окна со слайдами
[izdelie(flange)](progn(load "izdelie")(izdelie
1))
[izdelie(flange-1)](progn(load "izdelie")(izdelie 2))
[izdelie(nippel)](progn(load "izdelie")(izdelie 3))
[izdelie(shtucer)](progn(load "izdelie")(izdelie 4))
набор слайдов выбора.
[izdelie(flange)] - имя библиотеки со
слайдами (имя слайда в библиотеке)
или просто - укажите имя слайда, но лучше слайды меню объединить в библиотеку
- меньше файлов.
(progn(load "izdelie")(izdelie 1)) -
описанная ранее процедура вызова программы (здесь программа
имеет свой аргумент "1", но это именно для этой
проги).
Вот и все ! |
|
|
|