ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    АвтоЛІСП - реалізація мови програмування
         

     

    Інформатика, програмування

    Глава 1

    Введення

    АвтоЛІСП - реалізація мови програмування ЛИСП, вкладеного вмежах системи АвтоКад. АвтоЛІСП дозволяє користувачам і розробникам
    АвтоКад писати макропрограмми і функції на дуже високому, що знаходитьграфічне застосування, рівні мови. ЛИСП дуже гнучкий, легкий у вивченні ізастосуванні.

    Зауваження

    Для більш ефективного застосування АвтоКад немає необхідності вивчати
    АвтоЛІСП; якщо у вас немає досвіду комп'ютерного програмування, прочитайтетольно настановні вимоги в главі 2 - це дозволить вам побачитизастосовувані АвтоЛІСПом переваги численних меню АвтоКад. Однак, якщо вам подобається програмувати, прочитайте це керівництво до кінця,щоб дізнатися як застосовувати АвтоЛІСП для перетворення основногопризначення пакета виготовлення креслень АвтоКад в більш потужний інструментпрограміста.

    Ця книга - довідник, а не підручник з програмування. Хоча врозділі 3 ми і наводимо приклад практичного застосування АвтоЛІСПа, ми всіж рекомендуємо дістати різні тексти на ЛИСП для вивчення цьогомови програмування: Вінстон і Хорн "LISP" (друге видання), "Lookingat LISP "Тоні Хасемера (обидві книги опубліковані Еддісон весла). ЛИСП
    - Мова, що містить багато діалектів: МакЛІСП, ІнтерЛІСП, ЗетаЛІСП і
    КоммонЛІСП. АвтоЛІСП по синтаксисі і умовним позначенням найбільшблизький до КоммонЛІСПу, але він з меншим підмножиною і має більшеспецифічних для АвтоКад додаткових функцій. Цей довідникмістить всі функції автоЛІСПа і способи їх застосування.

    1.1 Типи даних в АвтоЛІСПе

    АвтоЛІСП містить кілька різних типів даних:

    - lists - списки

    - symbols - символи

    - strings - рядки

    - real numbers - дійсні числа

    - integers - цілі числа

    - file descriptors-дескриптори файлу

    - AutoCAD entity "names" - "імена" об'єктів АвтоКад

    - AutoCAD selection-sets - секції установок АвтоКад

    - subrs (build-in functions) - (вбудовані функції)

    Цілі числа - 16-бітові числа зі знаком з діапазоном від -32768 до
    32767. Дійсні числа представлені як плаваюча крапка з подвійноюточністю. Строчки можуть бути будь-якої довжини, їх пам'ять динамічнорозподіляється.

    АвтоЛІСП містить кілька вбудованих функцій із забезпечення базисудля програмування креслень у двох і трьох вимірах. При роботі зграфічними координатами, розглядаються наступні умовні позначення:

    2D points - виражені як переліки двох дійсних чисел

    (XY):

    (3.400000 7.520000)

    Перше значення - координата X, другий - Y.

    3D points - виражені як переліки трьох дійсних чисел

    (XYZ):

    (3.400000 7.520000 1.000000)

    Перше значення - координата X, друге-Y, третій-Z.

    Кожного разу при вимозі АвтоКад запровадити певний тип
    (наприклад, крапку або масштабний коефіцієнт) може застосовуватися виразцього типу або функція АвтоЛІСПа, що вводить в результаті цей тип.

    1.2 Обчислювач мови АвтоЛІСП

    Обчислювач є основою інтерпретатора кожного варіанту ЛИСП.
    Він бере рядок вхідних даних користувача, обчислює її і видаєрезультат. У процесі обчислення АвтоЛІСПа беруть участь:

    - цілі, дійсні числа; рядки; дескриптори файлу;вбудовані функції - обчислюються по відношенню самі до себе;

    - символи - обчислюються до значення їх поточної компонування;

    - списки - обчислюються відповідно до їх першого елемента, якщо вониобчислюються в:

    . список (або порожній список); список припускає бути визначенням функції, а функція обчислюється із застосуванням значень інших елементів списку в якості параметрів.

    . назва внутрішньої функції (subrs), решта елементи списку проходять в subr як формальні параметри і обчислюються за допомогою subr.

    Якщо у відповідь на підказку АвтоКад "Command:" ви вводите виразмовою АвтоЛІСП, АвтоЛІСП визначить вираз і напише результат.
    Підказка АвтоКад "Command:" знову з'явиться на екрані.

    Якщо надруковано або прочитаний з файлу неправильний вираз,
    АвтоЛІСП видасть наступну підказку: n> де n - ціле число, що позначає скільки рівнів лівих дужокзалишилося незакритими. Якщо з'явилася ця підказка, ви повинні надрукувати nправих дужок для того, щоб вийти з цього стану. Загальна помилка --ігнорування укладеного в круглих дужках значка ( ") в рядку тексту; вцьому випадку праві дужки будуть інтерпрітіровани як вже процитованіі не будуть враховуватися при зміні n. Для того, щоб виправити цеположення, надрукуйте перед n правими дужками лапки.

    1.3 Лексичні умовні позначки

    Процедура введення АвтоЛІСПа має кілька форм. Її можна виконатинаступним чином: перебуваючи в АвтоКад надрукувати виклик з клавіатури;прочитати з ASCII файла або з строчно змінної. У будь-якому разінеобхідно наступне:

    - імена символів можуть складатися з будь-якого поєднання друкованиххарактеристик, за винятком таких: (). ' ";

    - ім'я символу або числової константи будуть завершуватися наступнимизнаками:

    () ' "; (проміжок) (кінець лінії)

    - вирази можуть складатися з численних ліній;

    - численні проміжки між символами еквівалентні одиничногопроміжку. Ще не потрібно зсув, ви можете застосовувати їх длядодання ясності структурі ваших функцій;

    - символи і назви функцій (subrs) не чутливі до регістрів в
    АвтоЛІСПе. Імена символів можуть і не починатися з цифри;

    - константи цілих чисел можуть починатися з необов'язкових знаків "+"або "-". Як згадувалося раніше, вони знаходяться в діапазоні від -32768 до
    32767;

    - константи дійсних чисел містять один або більше цифровихрозрядів, супроводжувані точкою десяткового дробу, після якої йдутьодин чи кілька цифрових знаків, наприклад ".4" не розглядається якдійсне число, правильно буде "0.4". Аналогічно, "5."недійсне, правильно - "5.0". Дійсні числа можутьзастосовуватися в наукових записах тобто можуть зустрітися необов'язкове "е"або "Е", що супроводжується цифровим показником;

    - літерні рядки - послідовність символів, укладена влапки. Всередині рядки, взятої в лапки, символ () означає можливістьвключення контрольних символів. Розглянемо наступні поточні коди:

    означає символ ""

    e означає вихід

    n означає новий рядок

    r означає введення

    t означає табуляцію

    nnn означає символ, чий вісімковий код - nnn

    Наприклад, на новій лінії з'явиться наступна підказка:

    (prompt "nEnter first point: ")

    - одиничний цитований символ може застосовуватися як скороченняфункції QUOTE. Так, 'foo еквівалентно (quote foo)

    - коментарі, що взяті з дискових файлів, можуть бути включені впрограми АвтоЛІСПа. Коментарі починаються з двокрапки і тривають докінця рядка. Наприклад,

    : This entire line is a comment

    : Ця повна рядок - коментар

    (setq area (* pi rr)): Compute area of circle

    : Розрахуйте площа кола

    1.4 Умовні позначення приміток

    Це довідковий посібник застосовує певні умовні позначкидля документування режиму функцій. Наприклад,

    (moo ...) рядок цифра

    Ім'я функції показано таким, яким ви повинні його ввести. Ув'язнені влапки елементи даних, які йдуть за ім'ям функції, визначають кількістьі тип параметрів, передбачуваних функцією.

    У цьому проміри функція "moo" має два необхідні параметри:рядок і цифра. Еліпс ("...") визначає, що до функції можуть бутиприєднані додаткові цифрові параметри. Не включайте в рядокдужки або Еліпс, якщо ви постачає функцію посиланнями.

    Виклик даного формату функції "moo" показано вище; для функції
    "moo" будуть дійсними наступні посилання:

    (moo "Hello" 5)

    (moo "Hi" 1 2 3)

    Наступні приклади не відповідають необхідному формату і призведуть допомилок:

    (moo 1 2 3) (перший параметр повинен бути рядком)

    (moo "Hello") (повинен бути хоча б один цифровий параметр)

    (moo "do" '(1 2)) (другий параметр повинен бути рядком, а не переліком)

    Коли необов'язковий параметр може виникнути один раз, безповторень, він полягає у квадратні дужки ("[]"):

    (foo [])

    Тут функція "foo" припускає один строчно параметр і приймаєодин необов'язковий цифровий параметр. Наприклад, для функції "foo" будутьдійсні наступні виклики:

    (foo "catch")

    (foo "catch" 22)

    У цьому прикладі показані неправильні виклики: < p> (foo 44 13) (перший параметр повинен бути строчно)

    (foo "foe" 44 13) (надто багато параметрів)

    1.5 Зміни та розширення < p> Обробка помилки

    Якщо АвтоЛІСП стикається з помилкою під час обчислення, він видаєповідомлення наступної форми: error: text де text - опис помилки. Якщо встановлена функція "ERROR" (ненуль), АвтоЛІСП, замість видачі повідомлення, виконує цю функцію ( "text" - її єдиний параметр). Якщо "ERROR" не встановлена, або межує знулем, обчислення АвтоЛІСПа зупиняється, а на екрані з'явиться зворотнийхід виклику функції та її викликає програми до 100 рівнів вглиб.

    Глава 2

    Установка АвтоЛІСПа

    2.1 Вимоги

    Випуск формату

    АвтоЛІСП забезпечується будь-який копією Автокад. Ніяких спеціальнихустановок не потрібно. Файл "acadl.ovl" на робочій дискеті єоверлеєм АвтоЛІСПа в АвтоКад.

    Одна з робочих дискет АвтоКад містить файл
    "readme.doc". Перегляньте цей файл, він містить останнізміни і коректування в документації АвтоКад і АвтоЛІСПа.

    2.2 Автоматичні функції - файл "acad.lsp"

    Починаючи сеанс роботи графічного редактора АвтоКад, АвтоЛІСПзавантажує файл "acad.lsp" (якщо такий існує). На цьому фото ви можетезадати визначення найбільш часто використовуваних функцій і вони будутьавтоматично стягуватися при редагуванні креслення. См.определеніефункції DEFUN в розділі 4.

    Глава 3

    За садової доріжці до АвтоЛІСПу

    Велика кількість потужності АвтоКад надходить за рахунок йогоздібності замовляти її. Ближче познайомившись із АвтоКад, можнапомітити, що вам би хотілося, щоб у нього була певна можливість,часто необхідна вам. Ви можете почати додавання послідовностікоманд, які ви часто застосовуєте на екрані, кнопок або планшетногоменю. Ви можете визначити нові типи ліній, зразки штрихування аботекстовий шрифт. Цим ви використовуєте переваги відкритої архітектури
    АвтоКад - можливість розширити його і сформувати його в ваш персонально -спроектований інструментарій, що реагує на особливості вашого мисленняі роботи.

    Мова АвтоЛІСП - найбільш потужне умова для розширення можливостей
    АвтоКад. Ці, обеспеченниеАвтоКАДом сприятливі умови - реалізаціямови програмування ЛИСП, у поєднанні з АвтоКад. Складаючипрограму на АвтоЛІСПе, ви можете додати команди для АвтоКад і матибільше потужності для модифікування АвтоКад (що й мають наші розробникипрограмного забезпечення).

    Незабаром ми додамо нову команду для АвтоКад. У процесі поясненняпринципу роботи АвтоЛІСПа, ми дамо вам можливість використання йогопотужності для роботи на вас. Команда, яку ми збираємося створити,зорієнтована на архітектуру поверхні, але принципи, які вививчіть, - релевантні, не вважаються з вашою областю застосування.

    3.1 Що ви повинні знати перед початком роботи

    Ми припускаємо, що ви непогано володієте АвтоКад - тобто ви знаєтекоманди АвтоКад і загальні принципи їх застосування. Ми також припускаємо,що ви знайомі з текстовим редактором, який може створювати ASCII файли.
    Зараз ми напишемо програму, а ви застосовуйте свій текстовий редактор длявиконання наших завдань.

    У цьому прикладі ми будемо застосовувати багато функцій АвтоЛІСПа.
    Наступні глави цього посібника містять повне пояснення всіх цихфункцій.

    3.2 Завдання

    Наше завдання - створити нову програму для АвтоКад, яка малюєсадову доріжку і заповнює її круглими плитами.

    Наша нова команда буде мати наступну послідовністькоманд:

    COMMAND: PATH (ДОРОЖКА)

    Start point of path: start point

    (Початкова точка доріжки: початкова точка)

    End point of path: end point

    (Кінцева точка доріжки: кінцева точка)

    Half point of path: number

    (Половина ширини доріжки: число)

    Radius of tiles: number

    (Радіус плит: число)

    Spacing between tiles: number

    (Відстань між плитами: число )де початкова і кінцева точки визначають центральну лінію доріжки.
    Визначається половина ширини доріжки і вводиться радіус круглих плит.
    Нарешті, визначається відстань між плитами. Половину ширини доріжки мивизначаємо раніше, ніж повну її ширину тому, що це дозволяє більшчітко визначити відрізок типу "гумова нитка" від початкової точки.

    3.3 Початок

    Ми до кінця розів'ємо цю прикладне завдання (по висхідній). У ційзадачі ми будемо застосовувати жорстке завдання кутів.

    АвтоЛІСП, як і багато інших мов програмування, визначаєкути в радіанах. Радіани вимірюють кути від 0 до 2'PL. Так як більшістьвимірює кути в градусах, ми визначимо функцію, яка перетворюєградуси в радіани. Використовуючи ваш редактор тексту, створіть файл GP.LSP.
    Введіть таку програму:

    : Convert angle in degree to radians

    (defun dtr (a)

    (* pi (/ a 180.0))

    )

    Давайте розглянемо, що це дасть. Ми визначили функцію, застосувавши
    АвтоЛІСПе функцію DEFUN. Функція називається DТR (скорочення від "degreesto radians "(" градуси в радіани ")).

    Містить один параметр "а" - кут в градусах. В результаті --вираз:

    PI * (a/180.0) яке в примітках ЛИСП розшифровується як: "твір від
    PI, помножена на коефіцієнт А, поділена на 180 градусів ". PIзумовлюється ЛИСП як 3.1459 ...; рядок, що починається з двокрапки, - коментар - АвтоЛІСП ігнорує текст, розташований після двокрапки.

    Збережіть файл на диску, потім перейдіть на новий креслення (ім'я немає значення, тому що ми не будемо зберігати креслення).

    Коли з'явиться підказка АвтоКад "Command:", завантажте функцію,ввівши:

    Command: (load "gp")

    АвтоЛІСП завантажить вашу функцію, відображаючи її ім'я в "DТR". Далі вцьому керівництві, коли ми говоримо: "Введіть АвтоКад і завантажтепрограму ", буде матися на увазі виконана тільки щопослідовність.

    Зараз ми перевіримо функцію, виконуючи різні дії. Звизначення радіани, 0 градусів повинно відповідати нульової радіанах;введіть у АвтоКад рядок:

    Command: (dtr 0)

    Друкуючи рядок, що починається з лівої круглої дужки, ви змушуєте
    АвтоКад перекладати цей рядок в АвтоЛІСП для обчислення. У цьому випадку миобчислюємо функцію DIR, тільки що певну нами, передаючи їйпараметр - нуль. Після вираховуванням функції, Автокад видасть результат; такнаш введення видасть таку відповідь:

    0.000000

    Тепер давайте спробуємо 180 градусів. Якщо ви введете

    Command: (dtr 180)ви отримаєте відповідь:

    3.141593

    Це показує, що 180 градусів одно PI радіанах. Якщо видосліджуєте функцію, ви переконаєтеся, що це саме так.

    Для виходу з АвтоКад введіть:

    Command: QUITі на підказку

    Really want to discard all changes to drawing? Y

    (Дійсно хочете не враховувати всі зміни в кресленні? Д)дайте відповідь

    0в основному меню для повернення до DOS підказки. Далі в керівництві під
    "Вийти з АвтоКад" буде матися на увазі ця процедура.

    3.4 Введення

    Наша команда garden path (садова доріжка) запросить укористувача наступну інформацію: де малювати доріжку, якої ширини їїробити, розмір конкретних плит і як близько один до одного їх розміщувати.
    Ми визначимо функцію, яка буде питати користувача по всіх цихпунктам, а потім прорахує цифри, які ми проставимо наприкінці команди.

    Використовуючи редактор тексту, додайте наступні рядки в GP.LSP (ми будемо застосовувати вертикальну риску для виділення додаються рядків).

    : Convert angle in degrees to radians

    (defun dtr (a)

    ( 'pi (/ a 180.0))

    ) < p> |: Acquire information for garden path

    | (defun gpuser ()

    | (setq sp (getpoint "nStart point of path :"))

    | (setq ep (getpoint "nEnd point of path :"))

    | (setq hwidth (getdist" nHalf width of path: "sp))

    | (setq trad (getdist "nRadius of tiles:" sp))

    | (setq pangle (angle sp ep))

    | (setq plength (distance sp ep)) < p> | (setq width ( '2 hwidth))

    | (setq angp90 (+ pangle (dtr 90))): Path angle 90 deg

    | (setq angm90 ( -pangle (dtr 90))): Path angle -90 deg

    Необов'язково зміщати вирази, що містять ваші функції. Фактичнови можете ввести всю програму в один рядок. Проте, зміщення і перериваннястрочки служить створенню більш зрозумілої і чіткої для читання структурипрограми. Також, розташування початкових і кінцевих круглих дужокосновних виразів на одній осі, сприяє впевненості, що вашідужки вірно збалансовані.

    Отже, ми визначили функцію GPUSER. Вона не приймає параметрів, азапитує користувача по всіх пунктах. Функція SETQ призводить змінну
    АвтоЛІСПа до певного значення. Перша SETQ призводить змінну SP
    (початкова точка) до результату функції GETPOINT. Користувач задає точкидля функції GETPOINT. Для отримання точки буде застосовуватися рядок,визначає підказку АвтоКад. "n" змушує підказку з'явитися нанової лінії. Ми застосовуємо функцію GETPOINT для отримання значеннясередини ширраїни доріжки, радіусу плити і відстані між плитами. Другийпараметр функції GETPOINT, SP, визначає "базову крапку"відстані. Відстань можна створити, визначивши в АвтоКад точку,відповідну початкової точки доріжки, і приєднавши до неї лініюгумової нитки.

    Після введення вираховуються найбільш уживані змінні.
    PANGLE позначає кут від початкової до кінцевої точки доріжки. Функція
    ANGLE вводить цей кут по заданих двох точках. PLENGTH вводить довжинудоріжки. Функція DISTANCE розраховує відстань, заданий двома точками.
    Поставивши половину ширини доріжки, ми розраховуємо загальну ширину, помноживши на двазадану величину. І, нарешті, ми розраховуємо і зберігаємо кут доріжкиплюс-мінус 90 градусів у змінних ANGP90 і ANGM90 відповідно (тому щокути в АвтоЛІСПе розраховуються в радіанах, ми перед цими розрахункамизастосували функцію DTR для перекладу градусів у радіани).

    Збережіть цю відкориговану програму на диску, запустіть
    АвтоКад і завантажте програму. Зараз ми перевіримо функцію введення, щобпереконатися, що вона працює правильно.

    Приведіть у дію функцію, надрукувавши:

    Command: (gpuser)

    Дайте відповіді на підказки наступним чином:

    Початкова точка доріжки: 2,2

    Кінцева точка доріжки: 9,8

    Половина ширини доріжки: 2

    Радіус плити: .2

    Відстань між плитами: .1

    GPUSER використовує ваші відповіді для підрахунку необхідних йомудодаткових змінних і на екрані з'явиться результат останніхпідрахунків (у даному випадку - 0,826169, значення ANGM90 в радіанах). Виможете розвантажити всі змінні, встановлені функцією GPUSER шляхомпідстановки знаку оклику (!) перед їхніми іменами. Це змусить
    АвтоКад обчислити змінні і видати результат на екран. Якщо ви введететакі команди, ви отримаєте наступні результати:

    Command:! sp

    (2.000000 2.000000)

    Command:! ep

    (9.000000 8.000000)

    Command:! hwidth

    2.000000

    Command:! width

    4.000000

    Command:! trad

    0.200000

    Command:! tspac

    0.100000

    Command:! pangle

    0.708626

    Command:! plength

    9.219544

    Command:! angp90

    2.279423

    Command:! angm90

    -0.862169

    Зверніть увагу, що PANGLE, ANGP90 і ANGM90 представлені врадіанах. Після перевірки цих значень, вийдіть з АвтоКад і поверніться всвій текстовий редактор в GP.LSP.

    3.5 Додавання команд в АвтоКад

    Нарешті, ми готові об'єднати всі складові частини в команду
    АвтоКад. Якщо ми визначимо функцію з ім'ям C: XXX мовою АвтоЛІСП,вводячи ХХХ (припускаючи, що ХХХ не є командою АвтоКад) миактивізуємо функцію. Для завершеності введення в роботу нашої команди
    PATH, ми визначаємо функцію C: PATH, що дає можливість нам згодомпісля завантаження GP.LSP надрукувати тільки PATH і наша команда garden pathбуде обчислюватися.

    Використовуйте ваш текстовий редактор для додавання зазначеної рядкив GP.LSP, потім запустіть АвтоКад і завантажте програму.

    З додаванням функції C: PATH, ми додали команду PATH в АвтоКад.
    Ви можете перевірити команду, здійснивши наступний введення:

    Команда: PATH

    Початкова точка доріжки: 2,2

    Кінцева точка доріжки: 9,8

    Половина ширини доріжки: 2

    Радіус плити: .2

    Відстань між плитами: .1

    3.6 Заморожування

    Так як наша команда PATH виконується, всі команди, які вонапредставляє в АвтоКад, будуть передаватися в область команд/підказок і всевибрані нею точки будуть відзначатися на екрані маленькими рисками
    (позначками). Раз командна функція налагоджена, для появи ввідних команд
    АвтоЛІСПа точно схожих на команди АвтоКад, цей введення може бутивідмінено.

    Застосування функції GETVAR необхідно, щоб отримати поточнізначення режимів АвтоКад BLIPMODE і CMDECHO. Вони зберігаються через SETQв SBLIP і SCMDE. Потім ми застосовуємо функцію SETVAR для того, щобвстановити обидві ці змінні АвтоКад в нульове положення; цим роблячинедійсними мітки і передані команди. Зверніть увагу, що мивстановили ці змінні в нульове положення після отримання вводу відкористувача через GPUSER. Ми хочемо, щоб мітки залишилися дляпідтвердження введення користувача.

    Після того, як ми закінчили креслення доріжки, ми використовуємо функцію
    SETVAR для відновлення первісного значення цих змінних.

    Збережіть файл, запустіть АвтоКад і спробуйте зараз команду PATH.
    Спробуйте її з усіх сторін, визначаючи різні види введення як за допомогоюПоинтер, так і клавіатури.

    3.7 Резюме

    За короткий період часу ви ввели нову команду в АвтоКад. Підбагатьох системах КАД вам знадобиться наступне: доступ до вихідного кодусистеми КАД, кваліфікація програміста і великий запас знань дляпроробляє операцій, подібно до цієї. Відкрита архітектура АвтоКад і
    АвтоЛІСПа надає вам можливості, що більшість продавцівсистем КАД приберігають для себе.

    Ви можете застосовувати цей приклад як вихідну ступінь до майстерностів АвтоЛІСПе. Ви можете почати з модифікування і розширення команди PATH,створення якої ви зараз завершили. Спробуйте накреслити квадратні ішестикутні плити. Для більш повної орієнтації, створіть нову команду,яка приймає центральну точку і площа, і малює квадратпевній площі, заповнений плитами. Ви можете переглянути тільки що записані функції у тісному зв'язку з рештою главами цьогокерівництва. Тут ми дали дуже короткий опис роботи і можливостейфункцій. АвтоЛІСП містить багато можливостей, випробувавши які й ближчепознайомившись з ними, ви зможете повніше їх використовувати.

    Оскільки ви запустили АвтоЛІСП в роботу, ви перейшли на новийрівень досконалості в АвтоКад. В міру використання АвтоЛІСПа дляавтоматизації виготовлення креслень і конструкторських задач, ви звільнитесебе від різних деталей і зможете повністю присвятити себепроектування. В "особі" АвтоЛІСПа ви придбали невтомного помічника,який буде служити вам десятиліття.

    Глава 4

    Опції АвтоЛІСПа

    АвтоЛІСП забезпечений численними зумовленими функціями. Кожнафункція викликається шляхом завдання її імені (верхній або нижній регістр) якпершого елементу списку, з параметрами (якщо такі існують) якнаступними елементами списку.

    У цьому розділі ви знайдете алфавітний список основних базових функцій
    АвтоЛІСПа. Для зручності користування функції згруповані в предметномупокажчику в кінці довідника. Ви виявите, що багато функційстандартні, їх можна виявити в кожної реалізації мови програмування
    ЛИСП. Інші ж функції унікальні для інтерактивних графічнихпрограмних засобів, що забезпечуються АвтоКад. У наступних розділахописуються деякі функції з поліпшеними властивостями.

    4.1 (+ ...)

    Ця функція вводить суму всіх. Вона може застосовуватися здійсними і цілими числами. Якщо - цілі числа, результатбуде виражений цілими числами, а як одне з чисел - дійсне, цілічисла переходять в дійсні і результат буде виражений дійснимчислом.

    Наприклад:

    (+1 2) вводить 3

    (+1 2 3 4.5) вводить 10.500000

    (+ 1 2 3 4.0) вводить 10.000000

    4.2 (- ...)

    Ця функція віднімає другий з першим і вводить різницю.
    Якщо задано більше двох, з першого числа віднімається сума віддругий до останнього елементу і вводиться кінцевий результат. Якщозадано тільки одне, вводиться результат віднімання його з нуля. Цяфункція може застосовуватися з действітельнвмі і цілими числами, зстандартними правилами переходу.

    Наприклад:

    (-50 40) вводить 10

    (-50 40.0 2) вводить 8.000000

    ( -50 40.0 2.5) вводить 7.500000

    (-8) вводить -8

    4.3 (* ...)

    Ця функція вводить твір всіх. Вона може застосовуватися здійсними і цілими числами зі стандартними правилами переходу.

    Наприклад:

    (* 2 3) вводить 6

    (* 2 3 4.0) вводить 8.000000

    (* 3 -4.5) вводить -13.500000

    4.4 (/ ...)

    Ця функція ділить перше на друге і вводить приватне. Якщозадано більше двох, першому ділиться на твір другий івсіх наступних чисел і вводиться кінцеве приватне.

    Приклади:

    (/ 100 2) вводить 50

    (/ 100 2.0) вводить 50.000000 < p> (/ 100 20 2.0) вводить 2.500000

    (/ 100.0 20 2) вводить 2.500000

    (/ 100 20 2) вводить 2

    (/ 135 360) вводить 0

    (/ 135 360.0) вводить 0.375000

    4.5 (= ...)

    Це відносна функція "одно чого-небудь". Вона вводить T, якщовсі визначені рівні у кількісному відношенні, в усіх іншихвипадках вводиться нуль. Ця функція також дійсна для рядків.

    Приклади:

    (= 4 4.0) вводить T

    (= 20 388) вводить nil

    (= 2.4 2.4 2.4) вводить T

    (= 499 499 500) вводить nil

    (= "me" "me") вводить T

    ( = "me" "you") вводить nil

    4.6 (/ =)

    Це відносна функція "не дорівнює чого-небудь". Вона вводить T, якщо не байдуже, в іншому випадку вводиться nil. Якщозадано більше двох параметрів, функція не визначається. Наприклад:

    (/ = 10 20) вводить T

    (/ = 5.43 5.43) вводить nil

    (/ = 5.43 5.44) вводить T

    4.7 (<...)

    Це відносна функція "менше, ніж". Вона вводить T, якщо перший менше другий, і nil якщо навпаки. Якщо задано більше двох
    , T вводиться в тому випадку, якщо кожні з чисел менше, ніж праворуч від нього. Наприклад:

    (<10 20) вводить T

    (<4 4) вводить nil

    (<357 33.2) вводить nil

    (<2 3 88) вводить T

    (<2 3 4 4) вводить nil

    4.8 (77 4 4) вводить nil

    4.10 (> = ...)

    Це відносна функція "більше або дорівнює". Вона вводить T, якщоперший більше або дорівнює друге, і nil в іншому випадку. Якщозадано більше двох, T вводиться за умови, що кожне числобільше або дорівнює праворуч від нього. Наприклад:

    (> = 120 17) вводить T

    (> = 57 57) вводить T

    (> = 3.5 1792) вводить nil

    (> = 77 4 4) вводить T

    (> = 77 4 9) вводить nil

    11 (-)

    Ця функція вводить подразрядний НІ (NOT) (чиєсь доповнення)
    . має бути цілим. Наприклад:

    (-3) вводить -4

    (-100) вводить -101

    (- -4) вводить 3

    4.12 (1 +)

    Ця функція вводить, збільшене на одиницю (збільшення). може бути дійсним або цілим. Наприклад:

    (1 + 5) вводить 6

    (1 + -17.5) вводить -16.500000

    4.13 (1 -)

    Ця функція вводить, зменшена на одиницю
    (декрементірованное). може бути дійсним або цілим.
    Наприклад:

    (1 - 5) вводить 4

    (1 - -17.5) вводить -18.500000

    4.14 (abs)

    Ця функція вводить абсолютне значення. може бутидійсним або цілим. Наприклад:

    (abs 100) вводить 100

    (abs -100) вводить 100

    (abs -99.25) вводить 99.250000

    4.15 (and ...)

    Ця функція вводить логічне І (AND) списку виразів. Вона вводитьнуль, якщо будь-який з виразів обчислюється до нуля, в іншому випадку вонавводить T. Наприклад, задані наступні призначення:

    (setq a 103)

    (setq b nil)

    (setq c "string") тоді:

    (and 1.4 ac) вводить T

    (and 1.4 abc) вводить nil

    4.16 (angle)

    Ця функція вводить кут (в радіанах) між 2D точками і
    , Коли 2D точка - перелік двох дійсних чисел. Наприклад:

    (angle '(1.0 1.0)' (1.0 4.0)) вводить 1.570796

    (angle '(5.0 1.33)' (2.4 1.33)) вводить 3.141593

    4.17 (angtos [[]])

    Ця функція бере (дійсний, в радіанах) і вводить йоговідредагований-ним у вигляді рядка. Параметр/- цілечисло; наступним чином він диктує тип виконуваного редагування:

    Режим ANGTOS Формат Редагування

    ------------ ---------- -----------

    0 Градуси

    1 Градуси/хвилини/секунди

    2 Гради

    3 радіани

    4 Топографічні одиниці

    Параметр/- ціле число, яке вибираєбажану кількість десяткових знаків точності. і відповідають системі мінливих AUNITS і AUPREC АвтоКад. Якщо випропускаєте параметри, будуть застосовуватися поточні установки AUNITS і
    AUPREC.

    Наприклад, задані наступні призначення:

    (setq pt1 '(5.0 1.33))

    (setq pt2' (2.4 1.33))

    (setq a (angle pt1 pt2)) тоді:

    (angtos a 0 0) вводить "180"

    (angtos a 0 4) вводить "180.0000"

    (angtos a 1 4) вводить "180d0'0"

    (angtos a 3 4) вводить "3.1416r"

    (angtos a 4 2) вводить "W"

    4.18 (append ...)

    Ця функція бере будь-яку кількість елементів (/)і з'єднує їх разом в один перелік. Наприклад

    (append '(ab)' (cd)) введе (ABCD)

    (append '((a) (b))' ((c) (d)) введе ((A) (B) (C) (D))

    APPEND вимагає, щоб її параметри були у вигляді списків.

    4.19 (apply)

    Виконує функцію, визначену/спараметрами, заданими в /. Наприклад:

    (apply '+' (1 2 3)) вводить 6

    (apply 'stract' ( "a" "b" "c")) запроваджує "abc"

    APPLY працює як з вбудованими (subrs), так і з певнимикористувачем (ці створюються як за допомогою DEFUN, так і LAMBDA) функціями.

    4.20 (ascii)

    Ця функція вводить перехід першого символу в її знаковийкод ASCII (цілі числа). Це те ж, що і функція ASC в мові БЕЙСІК.
    Наприклад:

    (ascii "A") вводить 65

    (ascii "a") вводить 97

    (ascii "BIG") вводить 66

    4.21 (assoc)

    Ця функція шукає список асоціацій для одиниці ()як ключового елемента і вводить вміст. Якщо незнайдений як ключ в, ASSOC вводить нуль. Наприклад, припустимо, щосписок "al" визначено як:

    ((name box) (width 3) (size 4.7263) (depth 5)) тоді:

    (assoc 'size al) вводить (SIZE 4.7263)

    (assoc 'weight al) вводить nil

    Список асоціацій часто використовується для запам'ятовування даних, якіможуть вибиратися як "ключ". Це схоже на матриці і структури в іншихмовах програмування. Функція SUBST, описана далі в цьому розділі,забезпечує зручні способи відміни значень, що асоціюються з одним ключемв переліку асоціацій.

    4.22 (atan [])

    Якщо не задається, ATAN вводить арктангенс в радіанах. може мати негативне значення, що вводяться діапазон кутів від-pt до + ptрадіан. Наприклад:

    (atan 0.5) вводить 0.463647

    (atan 1.0) вводить 0.785398

    (atan -1.0) вводить -0.785398

    (angtos (atan -1.0) 0 4) вводить "-45.0000"

    Якщо задані обидва параметри (и), вводиться арктангенс
    / В радіанах. Якщо - нуль, вводиться кут в плюс абомінус 1.570796 радіан (90 або -90 градусів) в залежності від знаку.
    Наприклад:

    (atan 2.0 3.0) вводить 0.588002

    (angtos (atan 2.0 3.0) 0 4) вводить "33.6901"

    (atan 2.0 -3.0) вводить 2.553590

    (angtos (atan 2.0 -3.0) 0 4) вводить "146.3099"

    (atan -2.0 3.0) вводить -0.588002

    (atan -- 2.0 -3.0) вводить -2.553590

    (atan 1.0 0.0) вводить 1.570796

    (angtos (atan 1.0 0.0) 0 4) вводить "90.0000

    (atan -0.5 0.0) вводить -1.570796

    (angtos (atan -0.5 0.0) 0 2) запроваджує "-90.00"

    4.23 (atof)

    Ця функція вводить перетворення рядка в дійсні числа.
    Наприклад:

    (atof "97.1") вводить 97.100000

    (atof "3") вводить 3.000000

    4.24 (atoi)

    Ця функція вводить перетворення рядка в ціле число.

    (atoi "97") вводить 97

    (atoi "3") вводить 3

    (atoi "3.9 ) вводить 3

    4.25 (atom)

    Ця функція вводить нуль, якщо - список, у противному випадкувводиться T. Дані, що надходять не у вигляді рядків, проходять як atom.
    Наприклад, дані вирази:

    (setq a '(xyz))

    (setq b' a) тоді:

    (atom 'a) вводить T

    (atom a) вводить nil

    (atom 'b) вводить T

    (atom b) вводить T

    (atom' ( abc)) вводить nil

    Деякі варіанти ЛИСП розрізняються у своїх інтерпретаціях ATOMа, так що повправлятися в застосуванні коду перетворення.

    4.26 (Boole ...)

    Це основна подразрядная булева функція. - Ціле число від 0до 15, що представляє одну з 16 можливих бульових функцій на двохзмінних. Послідовні параметри у вигляді цілих чисел подразрядно
    (логічно) скомбіновані, грунтуючись на цих функціях і істінностнойтаблиці:

    Int1 Int2 Func bit

    ---------------------

    0 0 8

    0 1 4

    1 0 2

    1 1 1

    Кожен біт має пару відповідного біта,вибираючи один горизонтальний ряд істінностной таблиці. Біт результату абонуль, або 1, залежно від установки бита, відповідногоцього ряду істіностной таблиці. Якщо відповідний біт задано в,біт результату 1, інакше біт результату - 0.

    Деякі значення для еквівалентні стандартним булевіоперацій AND, OR, XOR і NOT. Вони представлені нижче:

    Функція Операція Біт результату 1, якщо ...

    ---------------------- ---------------------------------

    1 AND обидва вхідних біта - 1

    6 XOR тільки один з двох вхідних бітів - 1

    7 OR будь-який або обидва з вхідних бітів

    8 NOT обидва вхідних біта - 0 (чиєсьдоповнення)

    Наприклад:

    (Boole 1 12 5)визначає логічне AND для значень 12 і 5. Результат 4. Аналогічно:

    (Boole 6 6 5)визначає логічне XOR для значень 6 і 5, в результаті - 3.

    Ви можете застосовувати інші значення для виконання іншихбульових операцій, для яких ці імена не є стандартними.
    Наприклад, якщо - 4, біти результату задані, якщо заданівідповідні біти в, але не в. Таким чином:

    (Boole 4 3 14)введе 12.

    4.27 (boundp)

    Ця функція вводить T, якщо має значення, близьке до нього (незважаючи на контекст). Якщо ж немає значення, близького до (або якщо воноблизько до нуля), вводиться нуль. Наприклад, задані призначення:

    (setq a 2)

    (setq b nil) тоді:

    (boundp 'a) вводить T < p> (doundp 'b) вводить nil

    4.28 caar, cadr, cddr, cadar, etc.

    АвтоЛІСП забезпечує зв'язок CAR та CDR до чотирьох рівнів вглиб.
    Наприклад, задано призначення:

    (setq x '((ab) cd)) тоді:

    (caar x) еквівалентно (car (car x)) вводить A

    (cdar x) еквівалентно (cdr (car x)) вводить (B)

    (cadar x) еквівалентно (car (cdr (car x))) вводить B

    (cadr x) еквівалентно (car (cdr x)) вводить С

    (cddr x) еквівалентно (сdr (сdr x)) вводить (D)

    (caddr x) еквівалентно ( car (cdr (cdr x))) вводить D

    У АвтоЛІСПе CADR частково застосовується для отримання координати Y дляточок 2D та 3D (другий елемент у списку з двох або трьох дійснихчисел). Аналогічно, CADDR може застосовуватися для визначення координати Zдля точки 3D. Наприклад:

    (setq pt2 '(5.2 1.0 (2D точка)

    (setq pt3' (5.2 1.0 3.0) (3D точка) тоді:

    ( car pt2) вводить 5.200000

    (cadr pt2) вводить 1.000000

    (caddr pt2) вводить nil

    (car pt3) вводить 5.200000

    (cadr pt3) вводить 1.000000

    (caddr pt3) вводить 3.000000

    4.29 (car)

    Ця функція вводить перший елемент. Якщо порожній, вводиться нуль. Наприклад:

    (car '(abc)) вводить A

    (car' ((ab) c)) вводить (AB)

    (car '( )) вводить nil

    4.30 (cdr)

    Ця функція вводить весь, крім йогопершого елемента. Якщо порожній, вводиться нуль. Наприклад:

    (cdr '(abc)) вводить (BC)

    (cdr' ((ab) c)) вводить (C)

    (cdr '()) вводить nil

    Коли параметри - розділені крапкою пари (див. нижче CONS),
    CDR вводить другий елемент без включення його до списку. Наприклад:

    (cdr '(a. B) вводить B

    (cdr' (1. "Text") вводить "Text"

    4.31 (chr )

    Ця функція вводить перехід цілих чисел, представлених у знаковомукоді ASCII, в однознаковую рядок (аналогічно функції CHRS в мові БЕЙСІК).
    Наприклад:

    (chr 65) запроваджує "A"

    (chr 66) запроваджує "B"

    (chr 97) запроваджує "a"

    4.32 (close)

    Ця функція закриває файл і вводить нуль. - Дескрипторфайлу (опрісатель), отриманий з функції OPEN. Після CLOSE дескрипторфайлу не змінюється, але стає недійсним. Наприклад,уявіть, що Х - дійсний відкритий дескриптор файлу,

    (close x)закриє передбачуваний файл і введе нуль.

    4.33 (command ...)

    Ця функція виконує команду АвтоКад в межах АвтоЛІСПа ізавжди вводить нуль. Параметри, що представляють команди АвтоКад, і їхпідкомандами, кожен параметр обчислюється в АвтоКад як відповідь нанаступні підказки. Імена команд і опції запускаються у вигляді рядків,точки 2D як списки з двох дійсних чисел і 3D точки яксписки з трьох дійсних чисел. Імена команд впізнаються АвтоКадтільки при виході підказки "Command". Наприклад:

    (setq pt1 '(1.45 3.23))

    (setq pt2 (getpoint "Enter a point: "))

    (command" line " pt1 pt2)

    (command "")

    Припускаючи, що підказка АвтоКад "Command" не виконується,зазначена вище послідовність виразів встановлює значення дляточки "pt1", видає підказку для крапки "pt2" і виконує команду
    АвтоКад LINE з двома точками як даними введення. Параметрами COMMAND можутьбути рядки, дійсні та цілі числа або точки, як предусматрі -ється послідовністю підказки для виконання команди АвтоКад.
    Нульова рядок ( "") еквівалентна друкування пробілу на клавіатурі. Виклик
    COMMAND без параметрів еквівалентний друкування CTR C на клавіатурі; цескасує більшість команд АвтоКад.

    Команди, що виконуються з функції COMMAND, не відображаються на екрані,якщо система змінних АвтоКад CMDECHO (обрана з SETVAR або GETVAR)встановлена на нулі. Функція COMMAND - основний метод вибору команд
    АвтоКад з АвтоЛІСПа.

    вводяться функції користувача
    "GETxxx" (GETANGLE, GETSTRING, GETINT, GETPOINT) не можуть застосовуватисяусередині функції. Спроба зробити це, призведе в результаті допояви повідомлення:
    "помилка: забракованих АвтоКад функція" і виконання функціїприпиняється. Якщо введення користувача необхідний, заздалегідь поставте функції
    GETxxx, як зазначено вище, або помістіть їх між вдалими викликами функції
    COMMAND.

    Якщо команда АвтоКад виконується і рядок, що складається з одиничногомертвого ходу ("/"), прораховується як один з параметрів функції COMMAND,ця функція призупинить прямий введення користувача (або зсув). Цеідентично механізму паузи мертвого ходу, яким забезпечені меню. Однак,оскільки мертвий хід є спеціальним контрольним знаком у Лісп,потрібно два символи мертвого ходу для того, щоб отримати один втекстовому рядку.

    Якщо ви видаєте переможе

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status