Введение в Автолисп | страница 31
Ниже приводится фрагмент программы, осуществляющей одновременное преобразование в примитивы, обладающие шириной, некоторого набора отмеченных примитивов, включающего линии, полилинии, дуги и окружности. Программа использовалась в версиях 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Ошибочный выбор !”))). При выборе примитива, тип которого отличается от перечисленных (например эллипса), программа его не обрабатывает, сообщает об ошибке выбора, но продолжает обработку примитивов, тип которых соответствует перечисленным в программе.