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

Чертеж, выведенный на бумагу, содержит объекты, изображаемые линиями различной ширины. До появления 15-й версии Автокада они обычно выполнялись на экране монитора линиями нулевой ширины, а требуемое значение ширины устанавливалось при настройке печатающего устройства. Автокад 2000 снял эту проблему, добавив новую системную переменную - LINEWEIGHT, управляющую шириной линии. Но и в более ранних версиях иногда удобно уже в чертеже задавать необходимую ширину линий, особенно если объекты расположены в одном слое. Автокад в этой ситуации позволяет использовать примитивы, обладающие шириной линии, например, полилинии, полосы, кольца. Однако часто бывает удобнее выполнить чертеж в линиях нулевой толщины, а впоследствии отредактировать нужные примитивы. Автокад предоставляет возможность осуществить это, применив команду Pedit, но подобную обработку, во-первых, воспринимают не все примитивы, во-вторых, она трудоемка и требует особой сосредоточенности в связи с необходимостью постоянно отслеживать информацию в поле сообщений.

Ниже приводится фрагмент программы, осуществляющей одновременное преобразование в примитивы, обладающие шириной, некоторого набора отмеченных примитивов, включающего линии, полилинии, дуги и окружности. Программа использовалась в версиях 11...14, может быть небесполезной и в версии AutoCAD 2000.

(defun MODES (a)

    (setq MLST '())

        (repeat (length a)

            (setq MLST (append MLST (list (list (car a) (getvar (сar a))))))

            (setq a (cdr a))

    ) ; Конец repeat

) ; Конец MODES

(defun MODER ()

    (repeat (length MLST)

        (setvar (caar MLST) (cadar MLST))

        (setq MLST (cdr MLST))

    )

)

(defun C:PLW (/ sset pl_w n type_e)

    (modes ‘(“BLIPMODE” “CMDECHO”))

    (setvar “CMDECHO” 0)

    (setvar "BLIPMODE” 1)

    (setq sset (ssget) n 0)

(setq pl_w (getdist “\nВведите ширину линии:_ “))

    (while (< n (sslength sset))

        (setq name (ssname sset n))

        (setq type_e (cdr (assoc 0 (cdr (entget name)))))

    (cond

((= type_e “LWPOLYLINE”)

    (command “pedit” name “” “W” pl_w “”))

((= type_e “LINE”)

    (command “pedit” name “” “W” pl_w “”))

((= type_e “ARC”)

    (command “pedit” name “” “W” pl__W “”))

((= type_e “CIRCLE”)

    (setq circ (entget name))

    (setq rad (cdr (assoc 40 circ)))

    (setq cen (cdr (assoc 10 circ)))

    (setq diamin (- (* 2 rad) pl_w))

    (setq diamout (+ (* 2 rad) pl_w))

    (command “donut” diamin diamout cen “”)

    (entdel name)

) ; Конец CIRCLE

(t (princ (strcat “\nОшибочный выбор !”)))

) ; Конец cond

(setq n (1+ n))

) ; Конец while

    (command “redraw”)

    (moder)

    (princ)

) ; Конец программы

В этой программе следует обратить внимание на три обстоятельства. В разделе 4.2 при описании функции cond не была упомянута важная ее особенность. Эта функция может производить проверку типа вводимых данных. В качестве последнего контрольного теста устанавливается условие Т. Если среди аргументов встречается аргумент, не соответствующий перечисленным типам, функция возвращает результат операции, приписанный этому условию. В программе plw подобную роль выполняет строка (t (princ (strcat “\nОшибочный выбор !”))). При выборе примитива, тип которого отличается от перечисленных (например эллипса), программа его не обрабатывает, сообщает об ошибке выбора, но продолжает обработку примитивов, тип которых соответствует перечисленным в программе.

Второе обстоятельство заключается в следующем. Три примитива - линия, полилиния и дуга — могут быть обработаны командой pedit, но окружность этой командой не обрабатывается. Поэтому окружность в чертеже заменяется кольцом, а исходный примитив удаляется из чертежа.

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

<p>6.8. Извлечение данных из таблиц</p>

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

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

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

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

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

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

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

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

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

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