МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • АвтоЛИСП - реализация языка программирования

    Мы определим функцию, которая будет спрашивать пользователя по всем этим

    пунктам, а затем просчитает цифры, которые мы проставим в конце команды.

    Используя редактор текста, добавьте следующие строчки в GP.LSP (мы

    будем применять вертикальную черту для выделения добавляемых строчек).

    : Convert angle in degrees to radians

    (defun dtr (a)

    ('pi (/ a 180.0))

    )

    | :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 ))

    | (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 (- < number > ...)

    Эта функция вычитает второе из первого и вводит разницу.

    Если задано более двух , из первого числа вычитается сумма от

    второго до последнего элемента и вводится конечный результат. Если

    задано только одно , вводится результат вычитания его из нуля. Эта

    функция может применяться с действительнвми и целыми числами, со

    стандартными правилами перехода.

    Например:

    (-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

    (/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 ( ...)

    Это относительная функция "менее или равно". Она вводит T, если

    первое менее или равно второму и nil в других случаях. Если задано

    более двух , T вводится в том случае, если каждое число меньше или

    равно , стоящему справа от него. Например:

    ( ...)

    Это относительная функция "больше, чем" . Она вводит T, если первое

    больше, чем второе и nil, если наоборот. Если задано больше двух

    , T вводится при условии, что каждое число больше стоящего справа.

    Например:

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

    (> 57 57) вводит nil

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

    (> 77 4 2) вводит T

    (> 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 a c) вводит T

    (and 1.4 a b c) вводит 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 '(a b) '(c d)) введет (A B C D)

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

    APPEND требует,чтобы ее параметры были в виде списков.

    Страницы: 1, 2, 3, 4, 5, 6


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.