Загрузка данных


;;; 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))