Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

Je parcours quelques blocs insérés sur un fichier.

Ces blocs ont des attributs, certains de ces attributs, je voudrai les supprimer (pas les mettre à vide).

Comment faire en Lisp ?

Merci, Patrice

Posté(e)

Salut,

S'agit-il de supprimer les définitions d'attribut dans les définitions de bloc et / ou de supprimer les références d'attribut dans les (ou des) références de bloc insérées ?

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Hello @PATRICE69

SVP tu testes les 2 Vieux Lisp/VLisp joints (NON Testes)

Et tu nous diras ...

Je crois qu il faudra faire un ATTSYNC apres !?

Merci, Bye, lecrabe

PS: Attention, c du VLisp donc SVP ajouter au debut une commande (vl-load-com) - Merci

 

 
;;;
;;; http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/howto-delete-all-attributes-from-blocks/td-p/850688
;;; 
;;; CADDXIMATION PROVIDES THIS PROGRAM SOFTWARE "AS IS" AND WITH ALL
;;; FAULTS. CADDXIMATION SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY
;;; OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. CADDXIMATION
;;; SOFTWARE DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL
;;; BE UNINTERRUPTED OR ERROR FREE.
;;;
;;; 4:25 PM 5/28/2003 by Luis Esquivel
;;; http://www.draftteam.com
;;;
;;; Delete attributes
;;; 

(defun C:DEL-ATT (/ ent att)
(vl-load-com)
(and (setq ent (car (nEntSel "\nSelect attribute to delete: ")))
(setq att (vlax-ename->vla-object ent))
(eq (vla-get-objectName att) "AcDbAttribute")
(vla-delete att))
(princ))

;;; delete all the attributes
(defun C:DEL-ALL-ATTS ()
(vlax-for blk (vla-get-blocks
(vla-get-activeDocument (vlax-get-acad-object)))
(vlax-for item blk
(if (and (eq (vla-get-objectName item) "AcDbBlockReference")
(eq (vla-get-hasattributes item) :vlax-true))
(mapcar 'vla-delete
(vlax-safeArray->list
(vlax-variant-value (vla-getattributes item)))))))
(princ))

(princ) 

 

Autodesk Expert Elite Team

Posté(e)
Il y a 15 heures, PATRICE69 a dit :

Je veux supprimer les références d'attribut dans les blocs insérés sur le dessin.

Je ne touche pas à la définition du bloc.

Attention, si on supprime les références d'attributs de blocs insérés sans toucher à la définition de bloc, un ATTSYNC recréera ces attributs avec leurs valeurs par défaut.

En pur AutoLISP (les routines proposées par @lecrabe utilisent "Visual LISP") on accède aux références d'attribut d'une référence de bloc avec la fonction entnext, dans une boucle while avec comme condition d'arrêt le type d'entité renvoyé par entnext.

Un exemple de routine qui récupère toutes les références d'attribut d'une référence de bloc. Elle revoie une liste de noms d'entité (ENAME).

;;; GetAttribs
;;; Renvoie la liste de toutes les référence d'attribut de la référence de bloc.
;;;
;;; Argument
;;; ename : nom d'entité de la référence de bloc
(defun getAttribs (ename / lst)
  (while (and (setq ename (entnext ename))
	      (= (cdr (assoc 0 (entget ename))) "ATTRIB")
	 )
    (setq lst (cons ename lst))
  )
  (reverse lst)
)

La même sous forme récursive :

(defun getAttribs (ename)
  (if (and (setq ename (entnext ename))
	   (= (cdr (assoc 0 (entget ename))) "ATTRIB")
      )
    (cons ename (getAttribs ename))
  )
)

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité