Как загрузить тип линии, который находиться в библиотеки автокада на языке 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) ; бьем баклуши
)

Объяснение кода листинга программы

Код выполняет следующие действия:

  1. Создает функцию c:f16.
  2. Устанавливает значение переменной ss с помощью ssget, которая ищет строки, соответствующие критериям поиска.
  3. Устанавливает значение переменной ce с помощью getvar, которая получает текущее значение переменной cmdecho.
  4. Устанавливает значение переменной cmdecho равным 0, что отключает вывод команды в командную строку.
  5. Проверяет, является ли результат null от tblsearch, который ищет осевая в таблице LTYPE.
  6. Если результат null, то выполняется команда _-.LINETYPE _L осевая acadiso.lin для загрузки типа линии.
  7. Если результат не null, то выполняется команда __.CHANGE ss _p _lt осевая для изменения типа линии.
  8. Восстанавливает значение переменной cmdecho с помощью setvar.
  9. Выводит символ princ, чтобы завершить команду.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы