Тема: удаление расширенных данных

Вопрос уже обсуждался, и вроде как удалить расширенные данные можно только вместе с примитивом. Но может все таки кто-то знает способ получше??

Re: удаление расширенных данных

> serzh
Расширенные данные можно удалить не удаляя примитива.

(defun C:DEL_ALLXDATA ( / en e xe xn)
  (if (setq en (car (entsel))) (progn
    (setq e (entget en '("*")))
    (setq xe (cdr (assoc -3 e)))
    (foreach x xe
      (entmod (append (entget en) (list (list -3 (list (car x))))))
    )
  ))
 (princ)
)

Re: удаление расширенных данных

> Александр Ривилис
да, как все просто. а я поискал на форуме, нашел темы в котоорых написано, что через entmod удалить нельзя и поверил наслово.
Никому блин верить нельзя.

Re: удаление расширенных данных

Спасибо забыл сказать
Спасибо!!!

Re: удаление расширенных данных

> serzh
Доверяй, но проверяй! :)

Re: удаление расширенных данных

А вот для удаления только своих расширенных данных (чуть переделанная от Fantomas):

(defun REMOVE_XDATA ( / ss)
  (princ (strcat "\n" "Select annotations to remove GEOL_DH extended data" ": "));
  (setq ss (ssget '((-4 . "<OR")
                     (-3 ("KAI13*ANN*"))
;тут еще кое-что было
                     (-4 . "OR>")
                   )
               ));setq ss
  (if (and ss (> (sslength ss) 0))
    (progn
      (setq i 0)
      (repeat (sslength ss)
        (DEL_XDATA (ssname ss i) '("KAI13*"))
        (setq i (1+ i))
      );repeat
      (princ (strcat "\n" "Numbers of cleaned objects" ":  " (itoa (sslength ss))))
    )
    (princ (strcat "\n" ="Nothing selected."))  )
);end of *** REMOVE_XDATA ***
;
(defun DEL_XDATA (ent app / entlst tmplst)
  (setq entlst (entget ent app))
  (foreach memb (cdr (assoc -3 entlst))
    (setq tmplst (cons -3 (list (cons (car memb) nil)))
          entlst (subst tmplst (assoc -3 entlst) entlst)
          entlst (entmod entlst)
    );setq
  );foreach
);end of *** DEL_XDATA ***

Re: удаление расширенных данных

Здравствуйте, может кто-нибудь знает как удалить не все,
а конкретное приложение РД с помощью ActiveX?

Re: удаление расширенных данных

Константин Попельнух пишет:

Здравствуйте, может кто-нибудь знает как удалить не все,
а конкретное приложение РД с помощью ActiveX?

Посмотри здесь:
http://www.4d-technologies.com/techcenter/index.htm

[FONT=Arial]~'J'~[/FONT]

Re: удаление расширенных данных

Нашёл там только с помощью метода entmod.

Re: удаление расширенных данных

Константин Попельнух пишет:


Цитата   


Посмотри здесь:
http://www.4d-technologies.com/techcenter/index.htm
Нашёл там только с помощью метода entmod.

Попробуй так (не проверял - не на чем)

(defun delregapp  (apname / app del regapps)
  (vl-load-com)

  (setq regapps (vla-get-registeredapplications
          (vla-get-activedocument
            (vlax-get-acad-object))))
  (if (zerop(vla-get-count regapps))
    (exit))
  (setq del nil)
  (vlax-for app  regapps
   
    (if (eq (strcase (vla-get-name app))(strcase apname))
    (progn
    (if    (not (vl-catch-all-error-p
      (vl-catch-all-apply 'vla-delete (list app))))
      (setq del T)))))
         
      (if del
         (alert (strcat "Registered application " "\""apname "\"" " removed")))

  (princ)
  )

Re: удаление расширенных данных

Попробуй так (не проверял - не на чем)

Спасибо за участие!
Но vla-delete - не удаляет.
И прошу прощения что не уточнил,
но мне нужно удалить РД у выбранного элемента.

Re: удаление расширенных данных

Посмотрите приложение 7 "Очистка расширенных данных" в книге "AutoLISP и Visual LISP в среде AutoCAD"