- •Содержание
- •Основные принципы настройки
- •Основные возможности настройки
- •Организация программных и вспомогательных файлов
- •Коротко об организации файлов
- •Работа с несколькими конфигурациями
- •Хранение чертежей в нескольких папках
- •Настройка шаблонов Интернет-публикаций
- •Создание пользовательских команд
- •Описание внешних команд
- •Псевдоимена команд
- •Настройка типов линий
- •Обзор описаний типов линий
- •Создание простых типов линий
- •Текстовые объекты в пользовательских типах линий
- •Формы в пользовательских типах линий
- •Пользовательские образцы штриховки
- •Коротко об описании образцов штриховки
- •Образцы штриховки из прерывистых линий
- •Образцы штриховки из составных линий
- •Настройка интерфейса пользователя
- •Обзор диалогового окна "Настройка интерфейса пользователя"
- •Термины, используемые при настройке
- •Изменения в настройке
- •Обзор редактора настройки интерфейса пользователя
- •Фильтр отображения элементов настройки
- •Работа с файлами настройки
- •Основные сведения о файлах настройки
- •Перенос и передача настроек
- •Создание и загрузка частичного файла НПИ
- •Создание корпоративного файла НПИ
- •Команды настройки
- •Создание, редактирование и повторное использование команд
- •Имена команды "Найти" и строки поиска
- •Управление отображением имен команд
- •Создание изображений для команд
- •Создание подсказок в строке состояния
- •Создание макросов
- •Использование в макросах специальных управляющих символов
- •Пауза для пользовательского ввода
- •Поддержка иностранных языков в макросах
- •Повторение команд в макросе
- •Метод выбора объектов "Единственный"
- •Использование макроса для перестановки элементов интерфейса пользователя
- •Использование условных выражений в макросах
- •Использование AutoLISP в макросах
- •Настройка панелей инструментов
- •Создание и редактирование панелей инструментов
- •Добавление или замена элементов управления панели инструментов
- •Создание раскрывающихся и контекстных меню
- •Создание раскрывающегося меню
- •Создание контекстного меню
- •Создание подменю
- •Обращение к раскрывающимся и контекстным меню
- •Подстановка и вставка раскрывающихся меню
- •Задание клавиш быстрого вызова и временной замены
- •Создание операции при двукратном нажатии
- •Настройка кнопок мыши
- •Ввод координат в меню кнопок
- •Настройка элементов интерфейса предыдущей версии
- •Создание планшетных меню
- •Настройка кнопок планшета
- •Создание экранных меню
- •Создание меню мозаики изображений
- •Загрузка файла AutoLISP
- •Настройка рабочего пространства
- •Вопросы и ответы по настройке интерфейса пользователя
- •DIESEL
- •Настройка строки состояния
- •Системная переменная MODEMACRO
- •Присвоение значений MODEMACRO
- •Выражения DIESEL в макросах
- •USERS1-5 Каталог функций языка DIESEL
- •+ (сложение)
- •- (вычитание)
- •* (умножение)
- •/ (деление)
- •= (равно)
- •< (меньше)
- •> (больше)
- •!= (не равно)
- •<= (меньше или равно)
- •>= (больше или равно)
- •angtos
- •edtime
- •eval
- •getenv
- •getvar
- •index
- •rtos
- •strlen
- •substr
- •upper
- •Сообщения об ошибках языка DIESEL
- •Слайды и командные сценарии
- •Создание слайдов
- •Коротко о слайдах
- •Просмотр слайдов
- •Создание и просмотр библиотек слайдов
- •Создание файлов сценариев
- •Коротко о файлах сценариев
- •Вызов сценария при загрузке программы
- •Демонстрация слайдов с помощью сценариев
- •Введение в интерфейсы программирования
- •ActiveX Automation
- •Коротко об ActiveX
- •Запуск приложения из командной строки
- •Запуск приложения из меню или с помощью панели инструментов
- •AutoCAD VBA
- •Основные сведения о AutoCAD VBA
- •Использование приложений AutoCAD VBA
- •Автоматическая загрузка и выполнение проектов VBA
- •AutoLISP и Visual LISP
- •Коротко об AutoLISP и Visual LISP
- •Работа с приложениями AutoLISP
- •Автоматическая загрузка и выполнение процедур AutoLISP
- •Файл ACAD.LSP
- •Файл ACADDOC.LSP
- •MNL-файл и AutoLISP-функции для меню
- •Предотвращение ошибок AutoLISP при выполнении файлов автозагрузки
- •Функция S::STARTUP: выполнение после завершения инициализации чертежа
- •ObjectARX
- •Коротко об ObjectARX
- •Работа с приложениями ObjectARX
- •Обзор .NET
- •Формы и шрифты
- •Коротко о файлах форм
- •Создание файлов описаний форм
- •Описания форм
- •Коды длин и направлений векторов
- •Специальные коды
- •Коды 0, 1 и 2: Конец формы и управление режимом построения
- •Коды 3 и 4: Управление размером
- •Коды 5 и 6: Сохранение и восстановление позиции
- •Код 7: Субформа
- •Коды 8 и 9: Смещения по X-Y
- •Код 00A: Октантная дуга
- •Код 00B: Дробная дуга
- •Коды 00C и 00D: Дуги, заданные прогибом
- •Код 00E: Флаг вертикального текста
- •Описания текстовых шрифтов
- •Файлы-образцы
- •Расширенный одноштриховой Roman
- •Расширенный стандартный шрифт UNICODE
- •Описания больших шрифтов
- •Описание большого шрифта
- •Создание файла расширенного большого шрифта
- •Использование большого шрифта в чертежах
- •Использование большого шрифта для создания специальных символов
- •Описания шрифтов Unicode
- •Верхние и нижние индексы в SHX-файлах
- •Указатель
Запись выражений с отступами от начала строки улучшает понимание текста программы (в частности, DIESEL-строк и файлов AutoLISP).
Выражения DIESEL в макросах
Эти выражения могут возвращать строковые значения (текстовые строки) в ответ на стандартные команды AutoCAD, процедуры AutoLISP и ObjectARX®, а также другие макросы. Они также могут возвращать строковые значения в меню, что часто используется для изменения вида и содержимого имен пунктов.
С помощью этой строки можно переключаться из пространства листа в пространство модели и обратно (если для переменной TILEMODE установлено значение 0). Выражение вычисляется прозрачно. Если пропустить специальный символ ^P, который переключает переменную MENUECHO, выражение DIESEL будет отображать в командной строке только вызванную команду.
При использовании DIESEL-выражений в пунктах меню требуется соблюдать формат "$раздел=подменю", где раздел - буква M, а подменю - требуемое DIESEL-выражение. Зачастую макросы меню проще реализовать на языке AutoLISP.
В следующих примерах показаны два аналогичных по назначению пункта меню, в одном из которых использован DIESEL, а в другом AutoLISP.
DIESEL-выражение в пункте меню:
^C^C^P$M=$(if,$(=,$(getvar,cvport),1),mspace,pspace)
AutoLISP-выражение в пункте меню:
^C^C^P(if (= (getvar "cvport") 1)(command "mspace")+ (command "pspace"))(princ) ^P
Оба пункта меню позволяют переключаться из пространства листа в пространство модели и обратно (если TILEMODE равна 0), но выражение DIESEL короче и вычисляется прозрачно, не требуя вызова функции AutoLISP princ. Если в обоих случаях пропустить специальный символ ^P, который переключает переменную MENUECHO, выражение DIESEL будет отображать в командной строке только вызванную команду, а выражение AutoLISP всю строку выражения.
Так как значение, возвращаемое выражением DIESEL, является текстовой строкой, его можно использовать в ответах на запросы функций AutoLISP get xxx. Это позволяет вычислять в пунктах меню режимы текущего чертежа и возвращать соответствующие значения в AutoLISP-процедуры.
Приведенный в примере ниже фрагмент меню включен в текущее меню.
■Приведенная в примере ниже AutoLISP-процедура загружена в память.
■Фрагмент НПИ включается в текущий файл настройки.
180 | Глава 5 DIESEL
■Ширина и высота вставляемых обозначений составляет одну единицу.
■Значение переменной DIMSCALE установлено равным масштабу чертежа (т.е. при вычерчивании в масштабе 1 мм = 10 см масштаб равен 100, а при 1 мм = 2 м масштаб равен 2000).
Если загрузить и выполнить приведенный пример процедуры AutoLISP, AutoCAD вставит символ заданного размера в указанную точку. Символы будут выведены на печать с нужным размером (при условии вычерчивания в масштабе, указанном в переменной DIMSCALE).
Процедура на AutoLISP выглядит так:
(defun C:SYMIN ( ) (setq sym (getstring
"\nВведите имя символа: ") ; Запрос имени символа
)
(menucmd "s=symsize") ; Переключение экранного меню
;на подменю symsize (setq
siz (getreal
"\nВыберите размер символа: ") ; Запрос размера символа p1 (getpoint
"\nТочка вставки: ") ; Запрос точки вставки
)
(command "insert" ; Команда ВСТАВИТЬ sym ; с указанными
p1 siz siz 0) ; параметрами
(menucmd "s=") ; Возврат к предыдущему
;экранному меню
(princ) ; Тихий выход
)
ПРИМЕЧАНИЕ Реальный вариант AutoLISP-процедуры должен включать в себя контроль ошибок для проверки корректности введенных пользователем данных.
Выражения DIESEL, приведенные ниже, умножают указанное пользователем значение на текущее значение переменной DIMSCALE и возвращают полученный масштабный коэффициент.
Этого невозможно достичь с помощью аналогичных кодов AutoLISP, поскольку, как правило, возвращаемые ими значения не воспринимаются в качестве ответов на запросы функций get xxx (например, функции getreal в предыдущем примере).
$M=$(*,$(getvar,dimscale),0.375) $M=$(*,$(getvar,dimscale),0.5) $M=$(*,$(getvar,dimscale),0.625)
Выражения DIESEL в макросах | 181
DIESEL-выражения могут также возвращать строковые значения в имена пунктов раскрывающихся меню, что позволяет делать пункты недоступными или каким-либо другим способом менять их внешний вид. При использовании DIESEL-выражения в раскрывающемся меню следует убедиться, что первым символом пункта является $.
Пусть текущим слоем чертежа является BASE, а в качестве метки используется следующее выражение DIESEL.
$(eval,"Текущий слой: " $(getvar,clayer))
В результате данный пункт раскрывающегося меню будет отображать имя текущего слоя (с немедленным обновлением при его смене).
Текущий слой: BASE
Такой же способ можно использовать для интерактивной модификации имен пунктов раскрывающихся меню. Процедура, написанная на AutoLISP, может, например, присвоить текст с нужным именем одной из переменных USERS1-5, а DIESEL-макрос извлечь его и подставить в меню.
ПРИМЕЧАНИЕ Ширина раскрывающихся и контекстных меню определяется в момент загрузки файла настройки. Имена пунктов, генерируемые или изменяемые с помощью DIESEL-выражений после загрузки меню, будут усекаться до длины строки меню.
Если есть опасность того, что сгенерированные с помощью DIESEL пункты меню будут иметь избыточную длину, проблему можно решить с помощью описанного ниже подхода. Здесь в пункте меню отображаются первые 10 символов текущего значения системной переменной USERS3 (USERS1-5).
$(eval,"Текущее значение: " $(getvar,users3))+
$(if, $(eq,$(getvar,users3),""), 10 пробелов )^C^Cusers3
Для увеличения ширины меню нельзя добавлять пробелы в конец имен пунктов, т.к. завершающие пробелы игнорируются при загрузке меню. Пробелы, используемые для увеличения ширины меню, должны находиться исключительно внутри DIESEL-выражений.
В следующем примере одно и то же DIESEL-выражение применено и в имени пункта меню, и в его макросе. Таким образом можно, например, ввести в чертеж текущие значения даты и времени.
$(edtime,$(getvar,date),DDD", "Д М ГГГГ)^C^Ctext +
\\\ $M=$(edtime,$(getvar,date),DDD", "Д М ГГГГ);
Макросы на языке DIESEL можно использовать также для установки пометки на пунктах меню и для перевода их в недоступное состояние. Ниже приведен пример
182 | Глава 5 DIESEL