Как загрузить тип линии, который находиться в библиотеки автокада на языке lisp?
Формулировка задачи:
Есть задание : Измените тип линии всех сплайнов файла находящихся в I квадранте на center.
Программа работает, если указанный тип линии уже загружен с библиотеки. Нужно модернизировать её так, что б тип линии менялся, если тип линии не загружен с библиотеки.
(defun f16 () (setq nabor (ssget "x" '((0 . "spline")))) (setq splainov (sslength nabor)) (setq i 0) (repeat splainov (setq imja (ssname nabor i)) (setq splain (entget (ssname nabor i))) (setq q (assoc 11 splain)) (setq splain2(member q splain)) (setq kol (length splain2)) (setq prov 0) (repeat kol (setq el (car splain2)) (setq x (nth 1 el)) (setq y (nth 2 el)) (if (< x 0) (setq prov 1) ) (if (< y 0) (setq prov 1) ) (setq splain2 (cdr splain2)) ) (if (= prov 0) (progn (if (assoc 6 splain) (progn ((lambda (imja) (entmod (subst (cons 6 "осевая") (assoc 6 imja) imja))) (entget imja)) ) (progn (setq splain (append splain (list (cons 6 "осевая")))) (entmod splain) ) ) ) ) (setq i (+ i 1)) ) (print) )
Решение задачи: «Как загрузить тип линии, который находиться в библиотеки автокада на языке lisp?»
textual
Листинг программы
(defun c:f16 ( / ss ce) ; используем c:, преобразуя функцию в команду, т.к. у нас ни капельки не функция (if (setq ss (ssget "x" '((0 . "spline") (-4 . ">,>,*") (10 0 0 0)))) ; выкусываем блох (progn (setq ce (getvar 'cmdecho)) ; запоминаем суперпозицию (setvar 'cmdecho 0) ; танцем польку до потери дара речи (if (null (tblsearch "LTYPE" "осевая")) ; ищем пуп земли (command "_.-LINETYPE" "_L" "осевая" "acadiso.lin" "") ; загружаем матрицу ) (command "_.CHANGE" ss "" "_p" "_lt" "осевая" "") ; проводим оранжевую революцию (setvar 'cmdecho ce) ; восстанавливаем суперпозицию из анналов истории ) ) (princ) ; бьем баклуши )
Объяснение кода листинга программы
Код выполняет следующие действия:
- Создает функцию
c:f16
. - Устанавливает значение переменной
ss
с помощьюssget
, которая ищет строки, соответствующие критериям поиска. - Устанавливает значение переменной
ce
с помощьюgetvar
, которая получает текущее значение переменнойcmdecho
. - Устанавливает значение переменной
cmdecho
равным 0, что отключает вывод команды в командную строку. - Проверяет, является ли результат
null
отtblsearch
, который ищетосевая
в таблицеLTYPE
. - Если результат
null
, то выполняется команда_-.LINETYPE _L осевая acadiso.lin
для загрузки типа линии. - Если результат не
null
, то выполняется команда__.CHANGE ss _p _lt осевая
для изменения типа линии. - Восстанавливает значение переменной
cmdecho
с помощьюsetvar
. - Выводит символ
princ
, чтобы завершить команду.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д