;;; DIMFIX_DEBUG.LSP — минимальный тест записи XDATA на INSERT
;;; Запустить командой: TESTXDATA
;;; Затем кликнуть на любой блок
(vl-load-com)
(defun c:TESTXDATA ( / sel ins_ent dxf xdata_entry result)
;; Зарегистрировать APPID
(if (null (tblsearch "APPID" "DIMFIX_APP"))
(progn
(princ "\nРегистрируем APPID DIMFIX_APP...")
(entmake (list '(0 . "APPID") '(2 . "DIMFIX_APP")))
(princ " OK")))
;; Выбрать блок
(setq sel (entsel "\nКликните на любой блок: "))
(if (null sel) (progn (princ "\nОтмена.") (exit)))
(setq ins_ent (car sel))
(setq dxf (entget ins_ent))
(princ (strcat "\nТип объекта: " (cdr (assoc 0 dxf))))
(if (/= (cdr (assoc 0 dxf)) "INSERT")
(progn (princ "\nЭто не блок!") (exit)))
;; Собрать минимальную XDATA — одна строка
;; Формат: ((-3 ("APPNAME" (1000 . "test"))))
(setq xdata_entry
(list -3
(list "DIMFIX_APP"
(cons 1000 "test_value"))))
(princ "\nXDATA которую пишем:")
(princ xdata_entry)
;; Убрать старую группу -3 если есть
(setq dxf (entget ins_ent '("DIMFIX_APP")))
(setq dxf (vl-remove-if '(lambda (x) (= (car x) -3)) dxf))
;; Добавить новую
(setq dxf (append dxf (list xdata_entry)))
(princ "\nПоследние группы DXF перед entmod:")
(princ (last dxf))
;; Попытка записи
(princ "\nВызываем entmod...")
(setq result (entmod dxf))
(if result
(princ "\nentmod OK!")
(princ "\nentmod вернул nil — ошибка!"))
(princ))