Мова DIESEL
1. Рядок стану.
DIESEL та AutoCAD LT
Мова програмування DIESEL була вперше запроваджена AutoCAD R12. DIESEL це абревіатура від Direct Interpretively Evaluated String Expression Language. У вільному перекладі можна пояснити як пряма інтерпретація змісту текстового рядка. Це мова текстового рядка. Результат обробки рядка також виводиться як рядка і може бути сприйнятий AutoCAD дослівно. Якщо DIESEL видав слово "Line", AutoCAD зрозуміє це слово дослівно, тобто відтворить командуLine(Відрізок).
Вирази DIESEL завжди передуються спеціальним знаком$. (Цим знаком позначається американська грошова одиниця – долар). Відкрийте вікноCustomize(Адаптація) і подивіться на запис макросу стандартних командCopy(Копіювати),Move(Перенести) та деяких інших. Тут можна побачити типові вирази DIESEL. Як і в мові LISP, кількість відкритих та закритих дужок має бути рівною. Елементи виразу тут поділяються, на відміну LISP, комою, а чи не пропуском, що схоже вираз функції калькулятора.
Введемо за допомогою DIESEL нові дані в рядок стану? Status Line. Цей рядок розташований у нижній частині екрана AutoCAD. Її ліва частина за замовчуванням не заповнена, тому нічого незвичайного не видно. Цією частиною рядка керує системна зміннаModemacro.
Наберіть на клавіатурі:
У лівій частині рядка стану з'явився цей напис, рис.1. Тепер вона нагадуватиме про ваші обов'язки до тих пір, поки AutoCAD не буде закритий, навіть якщо ви погуляли зі своїм собакою. Або, поки ви не напишіть у рядку стану щось інше.
Випробуємо здібності DIESEL у математиці - попросимо його скласти два числа, 3 та 8.
У маленькому віконціу лівій частині рядка з'явилося число 11. Також впевнено DIESEL може виконувати віднімання, множення та поділ, використовуючи для цього символи, відповідно, "-", "*", "/". Кількість аргументів у математичних виразах не повинна перевищувати 9. Цей талант DIESEL може бути використаний. А поки продовжимо вправи зі рядом стану, тому що з неї можна отримати певну користь.
Розглянемо одну із функцій DIESEL Getvar. Введіть у командному рядку: У відповідь на запрошення наберіть:
У лівій частині рядка стану ви побачите назву поточного текстового стилю. Змініть його (падаюче менюFormat -> Text Style…(Формат->Текстові стилі. ), або введітьStyle(Стиль) у командному рядку). У рядку стану текстовий стиль оновився. Значить, цей рядок живий. Вона може відображати поточні зміни системних змінних. Додамо сюди та висоту тексту. Якщо використовується кілька текстових стилів та різні висоти тексту, зручно мати на екрані поточні установки. Справді, в панелі інструментівObject Properties(Властивості об'єктів) є чотири віконця, де показані поточні значенняLayer(Шар),Color(Колір),Linetype(Тип лінії),Lineweight(Вага лінії). У панелі інструментівDimension(Розміри) та деяких інших також є такі вікна, в яких можна контролювати поточні установки. А для текстового стилю такого віконця немає. Але ми його отримали у рядку стану.
Заповнимо командний рядок:
Пробіл між двома виразами можна не ставити, але тоді обидва значення системних змінних, що викликаються, ім'я текстового стилю і висота тексту, зіллються. Натисніть . Тепер у рядку стану вийшли поточні значення текстового стилю та висоти тексту.
У AutoCAD 2004 є нова (порівняно зпопередніми версіями) панель інструментівStyles(Стилі), в якій можна контролювати текстові та розмірні стилі.
За допомогою системної змінної Modemacro можна вкласти в рядок стану будь-яку інформацію, яка знаходиться у системних змінних. Трохи пізніше ми скористаємося цим несподіваним відкриттям, а поки що повернемося до наших Homerun.
(4) (Далі читач продовжує тему, розпочату в попередніх розділах на базі наскрізного прикладу під назвою Homerun. Ми тут опустимо частину тексту. Скажімо тільки, що, використовуючи нескладні вирази DIESEL, можна врахувати коефіцієнт масштабування і, маючи в бібліотеці лише один позамасштабний елемент , вставляти його в креслення будь-якого масштабу.В прикладі є також полілінія, ширина якої автоматично налаштовується під потрібний масштаб і текстовий стиль, універсальний для будь-якого масштабу.Нижче буде створено також універсальний розмірний стиль. розширення можливостей системи)
2. Переведення об'єкта в поточний шар
Ось і ключ до вирішення проблеми. Можна змінити деякі властивості об'єкта, у тому числі шар, з командного рядка та без виходу діалогового вікна, а значить провести цю зміну автоматично.
Залишається ввести ім'я поточного шару, яке зберігається в системній зміннійClayer. За допомогою функції DIESELGetvarможна отримати це ім'я, якщо скористатися виразом:
Код команди, що переводить одиничний об'єкт у поточний шар, виходить таким: Для перекладу ряду об'єктів у поточний шар можна надійти подвійно: Або:(У попередніх розділах досить докладно розповідається, як збираються макрокоманди. Тут, у уривку, зміст вищенаведених кодів можуть здатися незрозумілим, але введіть будь-який із цих записів увікно "Macro associated with this button" діалогового вікна Customize (Адаптація), і нова кнопка працюватиме.)
У другому випадку командаPan(Пан) працює традиційно, але вибір об'єктів слід закінчувати стандартним натисканням ПК миші.
При вилученні за допомогою функції DIESEL Getvar текстових рядків, як у цьому випадку, є одне суттєве обмеження: у рядку не повинно бути пропусків. Якщо в імені шару, який є текстовим рядком (String), є пробіл, команда не працюватиме. Тому треба замінити всі прогалини в іменах шарів, наприклад, знак підкреслення "_". Цікаво, що при введенні рядків, що мають прогалини, у стоку стану за допомогоюModemacro, вони входять туди без обмежень.
3. Довжина дуги
Іноді виникає потреба дізнатися про довжину дуги. У цьому випадку найпростіше звернутися до командиList(Список) абоProperties(Окнос). Але що ж робити, якщо треба проставити розмір довжини дуги? Адже в стандартному наборі панелі інструментівDimension(Розміри) команди для вимірювання довжини дуги немає. Можна зробити так: виміряти кут, утворений дугою, за допомогою командиDimangular(Рзмугловий), проставити кутовий розмір (у градусах) і потім отриманий розмірний текст відредагувати, замінивши на результат вимірювання, виданий командоюList(Список). У принципі, це нескладно зробити вручну, для чого навіть не треба виписувати на папірець довжину дуги з текстового вікна AutoCAD Text Window (Текстове вікно AutoCAD), яке викликається клавішею . Достатньо скористатися "гарячими клавішами" + та перенести результат у вікно редагування тексту, де натиснути + . Тут може з'явитися невелика ручна робота з округлення результату, якщо не потрібна точність, закладена у діалоговому вікніDrawing Units(Кресливі одиниці).
Але якщо вимірювання дуг і простановка їх довжин не разова операція, а повторювана, що багаторазово повторюється, слід автоматизувати цей процес. Тут треба розв'язати дві задачі:
- Якось отримати інформацію про довжину дуги
- Введіть ці відомості у вікно редагування розмірного тексту замість значення кутового розміру.
Друге завдання, у свою чергу, породжує супутню: треба досягти того, щоб вікно радактора тексту не з'являлося на екрані. Розв'язуватимемо завдання в міру їх появи.
Отже, де взяти довжину дуги? Якщо вона показана у довідковому вікніAutoCAD Text Window(Текстове вікно AutoCAD) під час взяття командиList(Список), отже, зберігається у якийсь системної змінної. Ця змінна називаєтьсяPerimeter. Довідкова система Help видає за цією змінною такі відомості:
Тип – Real, реальне число. Зберігає останнє значення периметра, підраховане командамиArea(Площа),DBlist(База даних) таList(Список). Виявляється, до дуги, якщо остання виконана полілінією, можна застосувати командуArea(Площа). КомандаList(Список) видає ці ж відомості, так само як і командаDBlist, але остання видає інформацію про всі об'єкти креслення і викликати її для отримання довжини одного об'єкта нерозумно.
Таким чином, якщо взяти командуList(Список), виділивши дугу, що шукається, але перетворену попередньо в полілінію, в системну зміннуPerimeterзайде значення її довжини. Звідси нескладно створити логіку коду:
Можливо, в Autodesk прочитають цю книгу івиправлять помилку до виходу наступної версії.
Команда працює, вимірюючи як прості дуги, так і дугові сегменти полілінії, але видає результат із точністю до 8-го знака! Тобто, з максимально можливою точністю і залежною від установок у діалоговому вікніDrawing units(Креслювальні одиниці).
Знову перешкода. Але загрубувати результат ми вже навчилися. У розділі 8.7 було розглянуто….