Aller au contenu

Suppression d\'attribut


Messages recommandés

Posté(e)

Bonjour tout le monde,

 

Je suis à la recherche d'un Lisp (ou autre) qui supprime les attributs d'un block sans le décomposer.

J'ai plusieurs plans qui comportent chacun une centaine de bloc au minimum.

Pour l'instant je fait : Bedit > selection des attributs > effacer > enregistrer.

Si quelqu'un connait une routine qui fait ça tout seul ça serait top.

 

D'avance merci

 

++

Posté(e)

 

Hello

 

Sans passer par un Lisp tu peux faire la manipulation suivante :

 

1) Sur le calque ZERO, insérer ton bloc qq part avec Echelle=1 et Rotation=0

 

2) Le decomposer/exploser puis effacer tous les attributs inutiles ...

 

3) Refaire une commande BLOC en selectionnant le graphique restant

Tu redonnes le MEME nom avec le MEME point d'Insertion et tu confirmes ...

 

4) Commande au clavier : BATTMAN

Tu selectionnes le bon BLOC dans l'ascenseur puis SYNC puis OK

 

Le Decapode

 

PS: Je suppose bien sur que les routines Express/Bonus sont installees !

 

 

 

 

 

Autodesk Expert Elite Team

Posté(e)

Merci pour ton tuyau Lecrabe

 

Je vais tester,

mais si je comprend bien la manip' ça ne me fera pas gagner beaucoup plus de temps que d'effacer les att. dans l'éditeur de bloc directement... si? :s

 

++

 

AuT

Posté(e)

Salut,

 

Un truc comme ça ?

(defun c:delatt	()
 (vl-load-com)

 ;; Supprimer les attributs dans toutes les définitions de bloc
 (vlax-for blk	(vla-get-Blocks
	  (vla-get-ActiveDocument (vlax-get-acad-object))
	)
   (if
     (and
(= (vla-get-isXref blk) :vlax-false)
(= (vla-get-isLayout blk) :vlax-false)
     )
      (vlax-for obj blk
 (if (= (vla-get-ObjectName obj) "AcDbAttributeDefinition")
   (vla-delete obj)
 )
      )
   )
 )

 ;; Supprimer les attributs dans toutes les références de bloc insérées
 (if (ssget "_X" '((0 . "INSERT") (66 . 1)))
   (progn
     (vlax-for	blk
	(setq
	  ss (vla-get-ActiveSelectionSet
	       (vla-get-ActiveDocument (vlax-get-acad-object))
	     )
	)
(mapcar 'vla-delete (vlax-invoke blk 'GetAttributes))
     )
     (vla-delete ss)
   )
 )
 (princ)
)

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

Posté(e)

 

Hello

 

Le gros interet de BATTMAN c'est qu'il permet de re-synchroniser toutes les insertions de blocs avec la nouvelle definition du bloc !

 

On peut donc ajouter et/ou supprimer des attributs ...

 

Les attributs supprimes sont supprimes partout !

 

Les attributs ajoutes sont ajoutes partout (vide ou avec valeur par defaut)

 

Le Decapode

 

Autodesk Expert Elite Team

Posté(e)

 

ReHello

 

Je suis grillé par le grand Maître Gilles !

 

Toujours Tip-Top avec ses routines d'enfer !!

 

Merci, Le Decapode

 

Autodesk Expert Elite Team

Posté(e)

Alors là !!!!

 

Que dire à part: MERCI! :)

 

C'est niquel...bien joué Gile!

Et merci à toi aussi Lecrabe pour ton tuyau...

 

En vous souhaitant une bonne journée, maintenant la mienne va être plus relaxe! <acronym class=dict title=

 

++

Posté(e)

Salut

 

(gile) est le plus rapide ;)

 

Voici quand même une solution qui supprime l'attribut sélectionné

 

(setq ent (nentsel)) ; Sélection de l'attribut
(setq ent (vlax-ename->vla-object (car ent))) ; Transformer la sélection en objet vl
(setq bl  (vla-objectidtoobject (vla-get-database ent)(vla-get-ownerid ent))) ; Recherher le pére
(setq pos 1)
(foreach att (vlax-invoke bl 'getattributes) ; rechercher la position de l'attribut
 (and (equal att ent)(setq ok pos))
 (setq pos (1+ pos))
)
(setq blo (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name bl))) ; bloc de réference dans la table des blocks
(setq pos 1)
(vlax-for ent blo ; parcourir les entités qui compose le bloc
 (if (eq (vla-get-objectname ent) "AcDbAttributeDefinition") ; c'est un attribut
   (progn
     (if (eq pos ok) ; c'est la même position que celui sélectionné
(vla-delete ent) ; je l'efface
     )
     (setq pos (1+ pos))
   )
 )
)
(vl-cmdf "_.attsync" "_name" (vla-get-name bl)) ; je synchronise les attributs

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é