На рис. 14.2 показан один из вариантов блок-схемы этой программы.
Рис. 14.2. Блок-схема программы для примера 5
Шаг 2: написание программы Visual LISP
Откройте окно Visual LISP, выбрав команду Tools AutoLISP Visual LISP Editor или введя выражение VLIDE в командную строку. Затем откройте текстовый редактор Visual LISP, выбрав команду New File из меню File. В окно редактора введите текст программы, приведенный в следующем абзаце.
(defun chgtext3 () (setvar "cmdecho" 0)
(setq newht (getreal "\n Enter new text height: ")) (setq ss1 (ssget))
(setq index 0)
(setq num (sslenght ss1)) (repeat num
(setq name (ssname) ss1 index)) (setq ent (entget name))
(setq ass (assocc 0 ent)) (setq index (1 + index)) (If (= "TEXT" (cdr ass))
Выберите команду Save или Save As из меню File и сохраните файл программы под именем chgtext3.lsp. Чтобы загрузить созданную программу, выберите команду Load Text in Editor из меню Tools или щелкните на кнопке Load active edit window, которая находится на панели инструментов Tools. Для того чтобы запустить программу, введите имя функции (chgtext3) в строку приглашения консоли после знака _$ и нажмите клавишу <Enter>. Не забывайте, что имя функции необходимо указывать в круглых скобках. Выполнив эти действия, вы автоматически перейдете в окно графического редактора, а в командной строке появится приглашение на ввод высоты текста и выбор редактируемого объекта. Введите высоту текста, а затем выберите нужный объект. Высота выделенного текста изменится.
Пример 6
Напишите программу Visual LISP, с помощью которой вы сможете изменить положение центра окружности, внеся соответствующие изменения в базу данных чертежа. Эта программа должна также вывести приглашение, которое позволит пользователю определить координаты нового центра окружности.
Шаг 1: написание программы Visual LISP
Откройте окно Visual LISP, выбрав команду Tools AutoLISP Visual LISP Editor или введя выражение VLIDE в командную строку. Затем откройте текстовый редактор Visual LISP, выбрав команду New File из меню File. В окно редактора введите текст программы, приведенный в следующем абзаце.
(Defun radcir ()
(setq p1(entsel "select the circle") p2(car p1)
p3(entget p2) p4(assocc 10 p3)
p5(getpoint "\n Enter the new center point of the circle: ") p6(cons 10 p5)
p3(subst p6 p4 p3) );setq
(entmod p3) );defun
Шаг 2: загрузка и запуск программы Visual LISP
Выберите команду Save или Save As из меню File и сохраните файл программы под именем radcir.lsp. Чтобы загрузить созданную программу, выберите команду Load Text in Editor из меню Tools или щелкните на кнопке Load active edit window, которая находится на панели инструментов Tools. Чтобы запустить программу, введите имя функции (radcir) в строку приглашения консоли (после знака _$) и нажмите клавишу <Enter>. Не забывайте, что имя функции необходимо указывать в круглых скобках. Выполнив эти действия, вы автоматически перейдете в графическое окно, а в командной строке появится приглашение на выбор окружности и определение ее нового центра. Выделите окружность, а затем укажите новое положение центра этой фигуры. Положение окружности изменится.
Visual LISP: редактирование базы данных чертежа
513
Задания для самопроверки
Ответьте на следующие вопросы и сравните свои ответы с правильными ответами, приведенными в конце этой главы.
1.Язык программирования Visual LISP позволяет не только писать программы или создавать новые команды, но и редактировать базы данных чертежа. (Да/Нет)
2.Функция ________ дает возможность выбрать произвольное количество объектов, имеющихся на чертеже.
3.Функция ________ дает возможность выбрать из базы данных объекты определенного типа. Эта функция может использоваться даже тогда, когда объекты находятся на замороженном или выключенном слое.
4.Функция ________ определяет количество объектов, содержащихся в массиве выбранных элементов, и возвращает целое число, которое соответствует количеству найденных объектов.
5.Функция ________ возвращает имя объекта, содержащегося в заданном наборе выбранных элементов. Для обращения к объекту используется индекс, который обозначает номер объекта.
Повторение пройденного материала
Ответьте на следующие вопросы.
1.Функция ________ возвращает имя первого начерченного объекта.
2.Функция ________ возвращает имя последнего начерченного объекта.
3.Функция ________ извлекает список параметров из имени объекта.
4.Функция ________ находит определенный код в списке параметров объекта и возвращает элемент, содержащий этот код.
5.Функция ________ формирует новый список из данных элементов или списков.
6.Функция ________ заменяет элементы списка новым элементом.
Упражнения
Упражнение 1 (Общее)
Напишите программу Visual LISP, с помощью которой вы сможете изменить слой выделенных объектов. Программа должна также вывести приглашение, которое позволит вам ввести новое имя слоя.
Упражнение 2 (Общее)
Напишите программу Visual LISP, с помощью которой вы сможете изменить стиль выделенных текстовых объектов, имеющихся на чертеже. Программа должна также вывести приглашение, которое позволит вам определить новый стиль текста.
Упражнение 3 (Общее)
Напишите программу Visual LISP, с помощью которой вы сможете заменить слой чертежа, содержащий выделенные объекты. Программа должна вывести приглашение, которое позволит вам ввести новый слой, выделив объект, находящийся на этом слое.
Познакомившись с материалом этой главы, вы научитесь:
•писать программы, используя язык управления диалогом;
•использовать ранее определенные атрибуты;
•загружать файлы программ, написанных на языке управления диалогом (DCL);
•выводить на экран новые диалоговые окна;
•использовать стандартные кнопочные узлы;
•управлять диалоговыми окнами с помощью функций AutoLISP;
•использовать пиктограммы, кнопки и атрибуты в программах DCL.
516
Глава 15
Язык управления диалогом
Файлы, написанные на языке управления диалогом (DCL — Dialog Control Language), представляют собой текстовые файлы в формате ASCII, содержащие описание диалоговых окон. В каждом файле DCL может находиться описание одного или нескольких диалоговых окон. Количество описаний диалоговых окон, определенных в файле DCL, не ограничено. Файлы DCL имеют расширение .dcl (например, ddosnap.dcl).
При написании этой главы предполагалось, что вы уже знакомы с командами и системными переменными AutoCAD, а также с основами программирования на языке AutoLISP. Чтобы писать программы на языке DCL или управлять диалоговыми окнами с помощью функций AutoLISP, не обязательно быть специалистом в области программирования. Тем не менее, знание того или другого языка программирования поможет вам быстрее понять и изучить язык DCL. В этой главе вы познакомитесь с основными концепциями создания диалоговых окон, часто используемых атрибутов и пиктограмм. Подробное описание функций DCL и многочисленные примеры, содержащие пошаговое описание выполняемых действий, упрощают изучение языка управления диалогом. Для того чтобы познакомиться с функциями, о которых не рассказывается в этой главе, обратитесь к руководству AutoCAD Customization Guide, опубликованному компанией Autodesk. Чтобы писать программы на языке DCL, не требуется специальное программное или аппаратное обеспечение. С этой задачей может справиться любой текстовый редактор (при условии, что программа AutoCAD уже установлена на вашем компьютере).
Диалоговые окна
Файлы, написанные на языке управления диалогом (DCL), содержат описание, определяющее внешний вид диалоговых окон, отображаемых на экране. Диалоговые окна включают в себя кнопки, раскрывающиеся списки, флаговые кнопки, переключатели, пиктограммы и другие элементы управления, организованные в строки или столбцы. В качестве примера можно привести диалоговое окно, показанное на рис. 15.1.
Рис. 15.1. Диалоговое окно Drawing Units
Программирование диалоговых окон с помощью языка Dialog Control Language
517
Вам не придется определять размеры и компоновку диалогового окна или его составляющих. Требуемые размеры окна автоматически устанавливаются при его загрузке. Само по себе диалоговое окно не может выполнять те операции, для которых оно предназначено. Функции окна определяются программой, написанной на языке AutoLISP или созданной с помощью инструментальной системы AutoCAD (ADS) или ARX. Например, когда вы загружаете диалоговое окно, а затем щелкаете на кнопке Cancel (Отмена), это не означает, что окно отменяет выполнение текущей команды. Команды, связанные с кнопками или другими элементами управления диалогового окна, обрабатываются с помощью функций, содержащихся в AutoLISP, ADS или ARX. Таким образом, для управления диалоговыми окнами требуется AutoLISP или ADS, поэтому для разработки новых или редактирования уже существующих окон вам необходимо не только разбираться в DCL, но и хорошо знать AutoLISP, а также инструментальную систему AutoCAD.
Диалоговые окна не зависят от платформы, поэтому они подходят для любой системы, которая поддерживает программу AutoCAD. Тем не менее, одни и те же диалоговые окна в различных операционных системах могут выглядеть по-разному, так как внешний вид окон зависит от графического интерфейса пользователя используемой платформы. Выполнение функций, определенных в диалоговом окне, не влияет ни на диалоговые окна, ни на прикладные программы (AutoLISP или ADS), которые их используют.
Основные компоненты диалогового окна
Основными компонентами диалогового окна являются элементы мозаичного изображения (пиктограммы) и само окно. Пиктограммы организовываются в строки и столбцы, которые могут иметь любую заданную конфигурацию. Элементы управления, окруженные прямоугольной рамкой, формируют компоновочные узлы, создающие древовидную структуру окна (рис. 15.2).
Рис. 15.2. Древовидная структура диалогового окна
518
Глава 15
Основные элементы мозаичного изображения, к которым относятся кнопки, раскрывающиеся списки, изображения, текстовые и списковые окна, определены функцией программирования диалоговых окон (PDB), входящей в программу AutoCAD. Кнопки диалоговых окон описаны в файле base.dcl. Компоновка и функция пиктограмм определяются атрибутами, которые назначены этим элементам. Например, высота элемента управления определяется атрибутом высоты, а содержание надписи, ассоциированной с данным элементом, — атрибутом метки. Основные компоненты диалогового окна показаны на рис. 15.3. Под этим рисунком находится список предварительно определенных элементов и их обозначения в языке DCL.
Заголовок диалогового окна
Метка строки
Опция
Флажок
Кнопки,
организованные
Кнопка
в одну строку
Рис. 15.3. Компоненты диалогового окна
Предопределенные элементы
Формат DCL
Кнопка
button
Текстовое окно
edit_box
Образ кнопки
image_button
Списковое окно
list_box
Всплывающий список
popup_list
Переключатель (селективная кнопка)
radio_button
Ползунок
slider
Переключатель
toggle
Столбец
column
Блочный столбец
boxed_column
Строка
row
Блочная строка
boxed_row
Столбец переключателей
radio_column
Блочный столбец переключателей
boxed_radio_column
Строка переключателей
radio_row
Блочная строка переключателей
boxed_radio_row
Изображение
image
Текст (надпись)
text
Разделитель
spacer
Программирование диалоговых окон с помощью языка Dialog Control Language
519
Кнопки и текстовые элементы
Кнопки
В языке DCL кнопки имеют формат button.
Кнопка представляет собой прямоугольное окно, напоминающее собой нажимную кнопку. Надпись на кнопке располагается во внутренней части окна. Например, на кнопке ОК, которая имеется в каждом диалоговом окне, в середине окна находится метка ОК. Когда вы щелкаете на кнопке ОК, выполняются функции, определенные в диалоговом окне, после чего это окно закрывается. В свою очередь, при щелчке на кнопке Cancel (Отмена) диалоговое окно закрывается без выполнения каких-либо операций.
Примечание
В каждом диалоговом окне должна быть по крайней мере одна кнопка ОК или кнопка, выполняющая подобные функции. Это даст вам возможность выйти из диалогового окна, выполнив необходимые действия.
Текстовые элементы
В языке DCL текстовые элементы имеют формат text.
Текстовые элементы используются для создания заголовка и отображения информации в диалоговом окне. Их применение ограничено, так как большая часть элементов управления имеет собственные атрибуты меток, которые могут быть использованы при создании надписей. Тем не менее, если вам необходимо ввести в диалоговое окно текстовую строку, можете это сделать с помощью текстового элемента. В программе AutoCAD текстовые элементы чаще всего используются в окнах предупредительных сообщений для вывода предупреждений или сообщений об ошибке.
Примечание
Окно предупредительных сообщений должно содержать кнопки ОК или Cancel, с помощью которых вы сможете выйти из диалогового окна.
Свойства элементов
Внешний вид, размеры и функции, выполняемые тем или иным компонентом диалогового окна, зависят от заданных свойств. Например, если кнопке присвоен атрибут fixed_width, окно, формирующее этот элемент, не будет растягиваться на всю длину диалогового окна. Точно так же, атрибут height определяет высоту элемента управления, а атрибут key — имя элемента, которое в дальнейшем будет использоваться различными прикладными программами. Атрибуты состоят из двух частей: имени и присвоенного значения. Например, в выражении fixed_width = true параметр fixed_width является именем атрибута, а параметр true — значением, присвоенным этому атрибуту. Имена атрибутов выполняют ту же роль, что и имена переменных в языке программирования, поэтому значения, присваиваемые атрибутам, должны соответствовать определенному типу данных.
Типы значений
Целое число. В отличие от целочисленных значений (1, 15, 22), используемых в программировании, числовые значения, присваиваемые атрибутам, могут быть как целыми, так и вещественными числами.
520
Глава 15
Примеры
width = 15 height = 10
Вещественное число. Значения, присваиваемые атрибутам, должны быть дробными вещественными числами с первой цифрой.
Пример
aspect_ratio = 0.75
Строка в кавычках. Строковые выражения, присваиваемые атрибутам, представляют собой текстовую строку, заключенную в двойные кавычки.
Примеры
key = "accept" label = "OK"
Зарезервированное слово. В языке управления диалогом в качестве идентификаторов могут использоваться некоторые зарезервированные слова. В этом случае идентификаторы представляют собой буквенно-цифровое выражение, начинающееся с какойнибудь буквы.
Примеры
is_default = true fixed_width = true
Примечание
Зарезервированные слова следует вводить с учетом регистра клавиатуры. Например, выражение “is_default = true” отличается от выражения “is_default = TRUE”, так как зарезервированным словом является “true”, а не “True” или “TRUE”.
Имена атрибутов, как и зарезервированные слова, чувствительны к регистру заглавных или строчных букв. Например, имя атрибута — “key”, а не “Key” или “KEY”.
Предопределенные атрибуты
Чтобы упростить написание программ на языке управления диалогом, AutoCAD предоставил ряд предопределенных атрибутов, описанных в пакете программирования диалоговых окон (PDB), который поставляется вместе с программой AutoCAD. Часть атрибутов может использоваться только с элементами определенного типа, другие же подходят для элементов любого типа. Значения, назначенные в файле DCL тем или другим атрибутам, используются прикладной программой для управления элементами или диалоговыми окнами. Поэтому вы должны использовать правильные атрибуты и назначать им соответствующие значения. Ниже приведен список часто используемых предопределенных атрибутов, описанных в пакете программирования диалоговых окон (PDB).