Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

группу  AutoLoad LISP Application  и добавить в нее имя созданного файла.

Присвоим созданному программному файлу, имя  formats. lsp  и поместим его в папку  SUPPORT  Автокада. Тогда строка в файле acad*.lsp, автоматически загружающая файл  formats. lsp  в  Автокад, позволяющая обрисовать пять стандартных форматов и создать поле изображения нужных размеров, должна выглядеть следующим образом:

(autoload “formats” ‘("A0" “A1” “A2” “A3” “A4” “scr”)).

Теперь для загрузки в новый графический файл нужного фор­мата или расширения границ экрана достаточно ввести в командную строку имя формата. В организованном поле изображения созданы пять слоев с присущими им цветами примитивов и типами линий.

В заключение необходимо отметить следующее. Описанная программа,  равно как и предлагаемые далее, приведена в качестве примера программирования. В связи с этим в программах, используемых для иллюстрации, могут присутствовать структуры, не являющиеся обязательными. В частности, в программе  format. lsp, строго говоря, не обязательна функция  pole, так как расширить границы видового экрана до границ рамки можно, используя команду  View → Zoom →Extents, а границы поля изображения расширять командой  limits. Однако всегда имеет смысл предусматривать возможные результаты действия программ и сводить к минимуму операции доводки чертежа вручную.

И еще одно замечание. Программа будет работать без сбоев лишь при определенных условиях, а именно: в чертеже должны отсутствовать загружаемые слои и типы линий и отключена автоматическая объектная привязка. Возможности создания программ, исключающих эти неудобства, рассмотрены в разделах 6.6 и 6.7.

НЕ нашли? Не то? Что вы ищете?


ОРГАНИЗАЦИЯ  ПАУЗ

И  ВЕТВЛЕНИЕ  ПРОГРАММ


4.1.  Организация  пауз  для  ввода  данных

Автолисп содержит ряд функций, объединенных общей структурой  getxxx,  вызывающих паузу в работе программ и ожидающих ввода запрашиваемых данных. Эти функции перечислены в табл. 3.

Т а б л и ц а  3

Функции  запроса  данных

Имя  функции  Характер  запрашиваемой  информации

getint         Целое число из командной строки

getreal         Вещественное число из командной строки

getstring  Строковая константа из командной строки

getpoint  Координаты точки из командной строки или

          прямым указанием точки на экране

getcorner  Координаты одного из противолежащих углов

  окна или секущей рамки из командной

  строки или прямым указанием на экране

getdist  Целое или вещественное число, определяющее

  необходимое расстояние, из командной строки

  или прямым указанием отрезка на экране

getangle  Величина угла из командной строки или указа-

  нием трех точек на экране

getorient  То же

getkword  Альтернативный выбор по ключевому слову

Функции  getint, getreal и  getstring требуют ввода в командную строку параметра соответствующего типа.

Функции  getangle и  getorient требуют ввода величины угла.  Разница заключается в том, что  getorient запрашивает угол, измеряемый от положительного направления оси Х,  getangle -  от направления некоторой определенной базовой линии.  При этом направление отсчета определяется значением системной переменной Автокада  ANGDIR.

В примере использованы две из перечисленных функций. Первая запрашивает точку вставки блока, вторая − некоторое расстояние (в данном случае − длину резьбы на теле болта):

(setq pt1 (getpoint “\nУкажите точку вставки:_ “)),

(setq l2 (getdist “\nУкажите длину резьбы:_ “)).

К семейству  getxxx  относятся еще две функции:  getvar и  getenv,  но  они  не  являются  средством  общения  с  пользователем. Первая, уже использованная ранее,  служит для извлечения из Автокада числовых, а вторая - строковых системных переменных.

Все перечисленные функции позволяют осуществить ввод данных на любом этапе работы программы, но они не могут быть использованы при выполнении команды Автокада, т. е. не могут быть включены в команду.  Например,  если определен некоторый набор примитивов  ss,  выбрана базовая точка набора  pt1, а сам набор необходимо перенести в другую точку, указываемую оператором, нельзя использовать конструкцию

       (сommand  “move”  ss  “”  pt1

  (getpoint  “\nPoint of displacement:_”)

  ),

поскольку функция getpoint расположена внутри функции command. Автолисп ее не поймет и прекратит выполнение программы.

Для прерывания команды Автокада Автолисп использует описанный ранее внутренний идентификатор  pause.  Правильным для описываемой ситуации является формат:

       (command  “move”  ss  “”  pt1  pause).

4.2.  Условное ветвление  программ

Ветвление программ по заданному условию свойственно всем языкам программирования. Например, в Фортране оператор условного перехода может выглядеть подобно следующему:

               IF(условие) GO TO метка,

или в Паскале:

               if условие then процедура1 else процедура2.

Аналогичные операции могут быть выполнены и в Автолиспе. Для условного ветвления программ Автолисп предлагает две функции: cond (основная) и if.

(cond (условие1 операция1 ...) ...). Функция воспринимает любое число списков как аргументы. Просматривая по очереди первые элементы списков, отыскивает первый, отличный от nil  и выполняет операцию.  Пример использования этой функции представлен в программе plw. lsp,  описываемой несколько ниже (см. п. 6.7).

(if условие операция [альтернативная операция]). Эта функция оценивает условие, и если оно не nil, выполняет операцию, в противном случае выполняет альтернативную операцию. Если альтернативная операция опущена или условие есть nil, функция возвращает nil.

В тех случаях, когда программируемой операции предшествуют некоторые предварительные выкладки, внутри функции if используется функция  progn,  позволяющая совершить последовательно несколько операций и подчиняющаяся формату (progn  [выражение] ...) .

4.3.  Использование  ключевых  слов

Ключевые слова в Автолиспе обычно используются для указания пути при ветвлении программ или подтверждения сделанного выбора. Осуществляются эти операции функцией getkword, записываемой в формате

               (getkword [запрос])

и обязательно сопровождаемой функцией initget.

(initget [биты] [строка]).  Функция устанавливает ключевые  слова и режимы,  в которых работают функции группы getxxx, кроме  getstring и getvar.  В практике часто используется конструкция:

               (initget 1 “Yes No”).

Режимы работы функций определяются битовыми значениями, которые накладывают  определенные  ограничения  на ввод  данных.  В частности, использованный в примере бит 1 запрещает пустой ввод, бит 2 – ввод нулевого значения, бит 4 ­ ввод отрицательных чисел.

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

  подобно тому, как это осуществляется при вводе в командную строку опций Автокада, часть ключевого слова записывается прописными буквами, которые и используются в качестве аббревиатуры, а остальная часть - строчными буквами (например: “LType”, “eXit”, “toP”); ключевое слово записывается прописными буквами, а сразу следом за ним через запятую записывается аббревиатура (например: “LTYPE, LT”). Некоторое неудобство этого способа заключается в том, что аббревиатура обязательно должна включать первую букву слова. Поэтому запись “EXIT, X”  не будет восприниматься.

Если ключевые слова записаны целиком прописными или строчными буквами, они должны вводиться полностью.

Функция  initget в некоторых случаях может использоваться и без ключевых слов, ограничивая возможности ошибочного ввода данных. Подобные ситуации нередко возникают как следствие невнимательности или усталости оператора. В следующем примере запрещен пустой ввод, ввод нулевого или отрицательного значения:

         (initget (+ 1 2 4))

         (setq lenline

(getreal “\nВведите длину отрезка:_”)

).

Битовые значения представлены арифметической функцией (+ 1 2 4)  только с целью наглядности. Обычно битовые значения, если они используются (например, в описываемой в разделе 6.6 системной переменной  OSMODE), сразу представляются их суммой. В рассматриваемом случае это должно выглядеть так:

(initget 7).

Более подробно принципы использования функции  initget освещены в  [ 1, 3, 4 ].

Возвращаясь к примеру, описанному в разд. 4.1, организуем запрос, нужно ли перемещать набор в новое положение.

(initget  “Yes  No”)

(setq x (getkword “\nПереместить набор? (Yes or No): <N>“))

(if (= x “Yes”)

         (command “move” ss “” pt1 pause)

  )

В этом примере немаловажно следующее обстоятельство. В функции  initget опущен  аргумент  биты,  следовательно, на ввод не накладываются никакие ограничения. Это дает возможность установить выбор по умолчанию, которое в данном случае представляет собой отказ от перемещения набора. Поэтому пустой ввод, т. е. нажатие клавиши Enter, вызывает именно эту реакцию. Ввод же литер “Y”, “у” или слов  “Yes”, “yes” организует базовую точку набора  pt1, после чего программа будет ожидать указание нового положения базовой точки.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14