ГлавнаяПрограммыДокументацияВерсия до 09-2004
Поиск: на сайте на Куличках  
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", но это именно для этой проги).

Вот и все !

 
 

ГЛАВНАЯ
ПРОГРАММЫ ----> | СОЗДАТЬ | РЕДАКТИРОВАТЬТЕКСТ | ФОРМАТКА | РАЗМЕРЫ | БЛОКИ | ОСТАЛЬНОЕ | СБОРНИКИ
ОПИСАНИЯ--- -> | МЕНЮ | ШРИФТ | ШТРИХОВКА |
СТАРАЯ ВЕРСИЯ САЙТА
НОВОСТИ АСКОН

© PG, 1997-2006.

Stolica.ru
Реклама в Интернет