Читаем Введение в Автолисп полностью

(setq p3 (polar p2 (/ pi 2.0) dia))

;;; Точки, ограничивающие длину резьбы:

;;; 1. по внешнему диаметру резьбы

(setq p10 (polar p3 pi l2))

(setq p11 (polar p2 pi l2))

;;; 2. по внутреннему диаметру резьбы

(setq p12 (polar p2 (/ pi 2.0) (* dia 0.08)))

(setq p13 (polar p12 (/ pi 2.0) (* dia 0.84)))

(setq p14 (polar p12 pi l2))

(setq p15 (polar p13 pi l2))

;;; Концевые точки осевой линии

(setq p16 (polar p5 pi dia))

(setq p17 (polar p5 0.0 (+ l1 10.0)))

;;; Сохранение имени рабочего слоя

(setq old_lay (getvar “clayer”))

;;; Вычерчивание болта в нужных слоях

;;; и создание набора примитивов

(command “layer” “set” “contur” “”)

(command “pline” p1 “w” “0.8” “” p2 p3 p4 “”)

(ssget ss1 “L”)

(command “pline” p6 p7 p8 p9 “C”)

(ssget ss2 “L")

(command "layer" "set" "0" "")

(command “line” p10 p11 “”)

(ssget ss3 “L”)

(command “line” p12 p14 “”)

(ssget ss4 “L”)

(command “line” p13 p15 “”)

(ssget ss5 “L”)

(command “layer” “set” “center” “”)

(command “line” p16 p17)

(ssget ss6 “L”)

;;; Поворот и перемещение изображения

(initget “Yes No”)

(setq x (getkword “\nRotate bolt? (Yes or No): “))

(if (= x “Yes”)

    (command “rotate” ss1 ss2 ss3 ss4 ss5 ss6 “” p5 pause)

)

(initget “Yes No”)

(setq x (getkword “\nMove bolt? (Yes or No): “))

    (if (= x “Yes”)

      (command “move” ss1 ss2 ss3 ss4 ss5 ss6 “” p5 pause)

)

;;; Восстановление рабочего слоя

    (command “layer” “set” old_lay “”)

    (command “redraw”)

    (princ)

)

Здесь есть смысл остановиться на одном вопросе, не имеющем прямого отношения к Автолиспу, а именно на вопросе точности выполнения чертежа. Хороший сталь графики предполагает точное соответствие размеров назначенных размерам истинным. Однако в практике проектирования нередки случаи, когда не требуется большая точность изображения. В частности, это относится к рассмотренному примеру. Размеры резьбы, установленные в программе, соответствуют основной резьбе. Для мелких резьб внутренний диаметр нарезки будет другим. Однако при работе на ватмане конструктор не обращает строгого внимания на положение линий внутреннего диаметра, определяя параметры болта в спецификации. Поэтому предложенная программа может быть использована для изображения болтов и с основной и с мелкими резьбами. Читателю, которого такое положение не устраивает, предлагается трансформировать программу таким образом, чтобы она воспринимала в качестве параметра шаг резьбы и прочерчивала линии впадин резьбы в нужном положении.

Есть еще одно замечание по поводу программы. В ней создано шесть наборов, каждый из которых содержит один примитив, а именно - последний, созданный в чертеже. Конечно, это не лучшее решение. В практике обычно используется другой принцип, позволяющий отобрать нужные примитивы с помощью фильтров и описанный ниже (см. разд. 6.4).

<p>5. РАБОТА СО СПИСКАМИ</p>

Все обрабатываемые данные Автолисп делит на две большие группы: атомы и списки. Под атомом понимается некоторая программная единица, рассматриваемая Автолиспом как единое целое. Список, по определению разработчиков [5], представляет собой группу связанных элементов, разделенных пробелами и заключенных в скобки. Он служит эффективным средством хранения связанных величин и может содержать данные любого типа. При необходимости идентификации элемента с атомом или списком можно воспользоваться одной из двух функций:

(atom элемент) возвращает nil, если элемент является списком, и T - в противном случае,

(listp элемент) возвращает Т., если элемент является списком, и nil - в противном случае. Примеры:

(setq а ‘(х у z))

(atom ‘а) возвращает T,

(atom а) возвращает nil,

(atom ‘(a b c)) возвращает nil,

(listp '(abc)) возвращает T,

(listp ‘а) возвращает nil,

(listp 4.38) возвращает Т.

<p>5.1. Формирование списков</p>

Основной функцией формирования списков является list. Эта функция принимает любое количество выражений и собирает их в один список. Очень часто она используется для указания координат точки в двух- или трехмерном пространстве. В общем случае формат функции выглядит следующим образом:

(list выражение ...).

Примеры списков:

(list a b с) возвращает (А В С),

(list a (b с) d) возвращает (А (В С) D),

(list 2.1 4.8) возвращает (2.1 4.8).

Если ни одно из выражений не содержит переменных или неопределенных элементов, функция list может быть заменена функцией quote. Для Автолиспа эквивалентны выражения

(list 2.1 4.8) и ‘(2.1 4.8).

(append список ...). Функция принимает любое количество списков и объединяет их в один.

(append ‘(a b) ‘(с d)) возвращает (А В С D),

(append ‘((a) (b)) ‘((с) (d))) возвращает ((A) (B) (C) (D)).

(cons новый_элемент список). Функция принимает новый элемент в качестве первого, добавляя его к уже существующему списку, и возвращает новый список.

(cons ‘a ‘(b с d)) возвращает (А В С D),

(cons ‘(a) ‘(b с d)) возвращает ((A) В С D).

Если место аргумента список занимает атом, функция формирует уже упоминавшуюся ранее точечную пару.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных