Aller au contenu

Changer Layer des attributs


Messages recommandés

Posté(e)

Bonsoir,

Je dois remplacer le layer des attributs de tous les blocs dans le layer "ELEC".

Pouvez-vous me dire si c'est possible et si un lisp existe ?

D'avance merci

 

Posté(e)

Salut,

Essaye ça:

(defun c:manu_CAD (/ blk ent elst)
  (while (setq blk (tblnext "block" (not blk)))
    (setq ent (cdr (assoc -2 blk)))
    (while ent
      (if (= (cdr (assoc 0 (setq elst (entget ent)))) "ATTDEF")
	(entmod
	  (subst (cons 8 "ELEC") (assoc 8 elst) elst)
	)
      )
      (setq ent (entnext ent))
    )
    (command-s "_.attsync" "_name" (cdr (assoc 2 blk)))
  )
  (princ)
)

 

  • Like 1

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

Posté(e)
Il y a 9 heures, (gile) a dit :

Salut,

Essaye ça:

(defun c:manu_CAD (/ blk ent elst)
  (while (setq blk (tblnext "block" (not blk)))
    (setq ent (cdr (assoc -2 blk)))
    (while ent
      (if (= (cdr (assoc 0 (setq elst (entget ent)))) "ATTDEF")
	(entmod
	  (subst (cons 8 "ELEC") (assoc 8 elst) elst)
	)
      )
      (setq ent (entnext ent))
    )
    (command-s "_.attsync" "_name" (cdr (assoc 2 blk)))
  )
  (princ)
)

 

Salut Gile,

Super, ça marche merci !

Puis-je encore solliciter ton aide 😉

Après le attsync, j'ai le TAG "14" qui s'est mis en rotation 0° au lieu de 90° et est-il possible de changer le layer du graphique d'un bloc en lisp?

Les dwg sont le résultat d'un export d'un autre logiciel et on doit remettre certaine valeur pour le client.

Un grand merci pour ton aide

 

Posté(e)
Il y a 2 heures, Manu_CAD a dit :

Après le attsync, j'ai le TAG "14" qui s'est mis en rotation 0° au lieu de 90°

S'il n'y a qu'une définition de bloc à modifier, tu peux utiliser la commande GESTATTB (_BATTMAN) : dans la boite de dialogue, sélectionner l'attribut > Modifier... > onglet Options de texte > Rotation.

 

Il y a 2 heures, Manu_CAD a dit :

est-il possible de changer le layer du graphique d'un bloc en lisp

Je ne comprends pas la question ("le layer du graphique d'un bloc"), mais là encore, c'est faisable sans LISP avec  l'éditeur de bloc (commande MODIFBLOC ou _BEDIT).

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

Posté(e) (modifié)
Le 16/01/2023 à 08:50, (gile) a dit :

S'il n'y a qu'une définition de bloc à modifier, tu peux utiliser la commande GESTATTB (_BATTMAN) : dans la boite de dialogue, sélectionner l'attribut > Modifier... > onglet Options de texte > Rotation.

 

Je ne comprends pas la question ("le layer du graphique d'un bloc"), mais là encore, c'est faisable sans LISP avec  l'éditeur de bloc (commande MODIFBLOC ou _BEDIT).

Je dois faire ça sur des centaines de plans.

C'est pour ça, que je me demandais si on pouvait automatiser, en plus les noms de bloc peuvent être différents.

Merci

Modifié par Manu_CAD
Modification
Posté(e)
Le 16/01/2023 à 08:50, (gile) a dit :

S'il n'y a qu'une définition de bloc à modifier, tu peux utiliser la commande GESTATTB (_BATTMAN) : dans la boite de dialogue, sélectionner l'attribut > Modifier... > onglet Options de texte > Rotation.

 

Je ne comprends pas la question ("le layer du graphique d'un bloc"), mais là encore, c'est faisable sans LISP avec  l'éditeur de bloc (commande MODIFBLOC ou _BEDIT).

Bonjour Gilles,

Comme les plans ont été exporté d'un autre logiciel, je dois corriger certains paramètres.

Et dans les blocs, je dois modifier le calque de tous les objets graphiques du bloc et les mettre dans le layer 'ELEC".

Je ne sais pas si c'est faisable ?

D'avance merci pour ton aide

Posté(e)

Dans le message original, tu disais :

Le 15/01/2023 à 20:02, Manu_CAD a dit :

Je dois remplacer le layer des attributs de tous les blocs dans le layer "ELEC".

Donc, j'ai écris quelque chose en conséquence.

Maintenant, tu dis :

il y a 19 minutes, Manu_CAD a dit :

Et dans les blocs, je dois modifier le calque de tous les objets graphiques du bloc et les mettre dans le layer 'ELEC".

Pour changer le calque (entre autres) de toutes les entités des blocs d'un dessin, il y a Edit_Bloc sur cette page (penser à débloquer le ZIP avant d'extraire tout).

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

Posté(e)
il y a une heure, (gile) a dit :

Dans le message original, tu disais :

Donc, j'ai écris quelque chose en conséquence.

Maintenant, tu dis :

Pour changer le calque (entre autres) de toutes les entités des blocs d'un dessin, il y a Edit_Bloc sur cette page (penser à débloquer le ZIP avant d'extraire tout).

Merci pour l'outil 🙂

Mais sait-on le faire tourner en script ?

Car j'ai toujours la boite de dialogue qui s'ouvre.

Merci

Posté(e)

Non, il y a toujours la boite de dialogue.

Pour mettre toutes les entités des tous les blocs sur le calque "ELEC" :

(defun c:manu_CAD (/ blk ent elst)
  (while (setq blk (tblnext "block" (not blk)))
    (setq ent (cdr (assoc -2 blk)))
    (while ent
      (entmod (subst (cons 8 "ELEC") (assoc 8 elst) elst))
      (setq ent (entnext ent))
    )
    (command-s "_.attsync" "_name" (cdr (assoc 2 blk)))
  )
  (princ)
)

 

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

Posté(e)
il y a 11 minutes, (gile) a dit :

Non, il y a toujours la boite de dialogue.

Pour mettre toutes les entités des tous les blocs sur le calque "ELEC" :

(defun c:manu_CAD (/ blk ent elst)
  (while (setq blk (tblnext "block" (not blk)))
    (setq ent (cdr (assoc -2 blk)))
    (while ent
      (entmod (subst (cons 8 "ELEC") (assoc 8 elst) elst))
      (setq ent (entnext ent))
    )
    (command-s "_.attsync" "_name" (cdr (assoc 2 blk)))
  )
  (princ)
)

 

Il ne change pas le calque du graphique des blocs ( ex: les ligne qui sont dans Eplan200, doit être mis dans le claque ELEC).

Je te joins le fichier pour toi voir.

Merci

_3.dwg

Posté(e)

Oupss!...

Une ligne avait sauté.

(defun c:manu_CAD (/ blk ent elst)
  (while (setq blk (tblnext "block" (not blk)))
    (setq ent (cdr (assoc -2 blk)))
    (while ent
      (setq elst (entget ent))
      (entmod (subst (cons 8 "ELEC") (assoc 8 elst) elst))
      (setq ent (entnext ent))
    )
    (command-s "_.attsync" "_name" (cdr (assoc 2 blk)))
  )
  (princ)
)

 

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

Posté(e)
il y a 2 minutes, (gile) a dit :

Oupss!...

Une ligne avait sauté.

(defun c:manu_CAD (/ blk ent elst)
  (while (setq blk (tblnext "block" (not blk)))
    (setq ent (cdr (assoc -2 blk)))
    (while ent
      (setq elst (entget ent))
      (entmod (subst (cons 8 "ELEC") (assoc 8 elst) elst))
      (setq ent (entnext ent))
    )
    (command-s "_.attsync" "_name" (cdr (assoc 2 blk)))
  )
  (princ)
)

 

Un grand merci Gilles, le lisp fonctionne très bien 🙂

J'ai suivi une petite formation pour apprendre le lisp, j'aimerai pouvoir le métriser comme toi 🙂

Merci et bonne soirée

 

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é