Код не работает, нужно исправить. Выберите объекты...
Tạo vào: 12 tháng 11, 2026
Trả lời bằng GPT-6 Thinking bởi Chat01
Tạo vào: 12 tháng 11, 2026
Trả lời bằng GPT-6 Thinking bởi Chat01
Код не работает, нужно исправить.
Выберите объекты: найдено: 0, всего: 0
Выберите объекты:
; ошибка: неверный тип аргумента: lselsetp nil
;; Включить текстовую рамку для metxt
(defun c:mtxt-frame (/ ss1 ent)
(setq ss1 (ssget '((0 . "MTEXT"))))
(mapcar '(lambda (x)
(if (= (type (setq ent (cadr x))) 'ename)
(progn (entmod (append (entget ent) '((90 . 16) (63 . 256) (45 . 1.5) (441 . 0))))
(entupd ent))))
(ssnamex ss1))
(princ))
Причина ошибки уже видна: когда AutoCAD не находит ни одного объекта MTEXT, функция ssget возвращает nil, а код передаёт его в ssnamex. Проверю также DXF-параметры рамки, чтобы исправленный вариант не только устранял ошибку, но и включал именно рамку текста.
Ошибка неверный тип аргумента: lselsetp nil возникает потому, что программа не находит ни одного объекта MTEXT, но всё равно пытается обработать пустой набор объектов.
В исходном коде есть ещё две проблемы:
90 добавляется без проверки его существования, из-за чего могут возникать дублирующиеся параметры.Ниже исправленный вариант. Он включает текстовую рамку вокруг MTEXT без фоновой маски, обрабатывает несколько объектов и не выдаёт ошибку при пустом выборе. Значение DXF 90 = 16 соответствует включённой текстовой рамке. (ezdxf.readthedocs.io forums.autodesk.com)
lisp(defun c:mtxt-frame (/ ss i ent ed n) (princ "\nВыберите многострочные тексты MTEXT: ") (if (setq ss (ssget '((0 . "MTEXT")))) (progn (setq i 0 n 0) (repeat (sslength ss) (setq ent (ssname ss i)) (setq ed (entget ent)) ;; Удаляем старые параметры рамки и маски (setq ed (vl-remove-if '(lambda (x) (member (car x) '(90 45 63 421 431 441)) ) ed ) ) ;; Включаем текстовую рамку (setq ed (append ed '((90 . 16) (45 . 1.5)) ) ) ;; Сохраняем изменения (if (entmod ed) (progn (entupd ent) (setq n (1+ n)) ) ) (setq i (1+ i)) ) (princ (strcat "\nРамка включена. Обработано объектов: " (itoa n) ) ) ) (princ "\nОбъекты MTEXT не выбраны.") ) (princ) )
mtxt-frame.lsp.APPLOAD и загрузите файл.MTXT-FRAME и нажмите Enter.Важно: программа работает только с MTEXT. Если вы выбираете обычный однострочный TEXT, AutoCAD покажет найдено: 0, поскольку этот тип объектов не проходит фильтр выбора.
Если после исправления программа по-прежнему показывает найдено: 0, напишите, пожалуйста, какая у вас версия AutoCAD и какой именно текст вы выбираете — TEXT или MTEXT. Это поможет определить, почему объекты не распознаются.