Aller au contenu

Renommer plusieurs blocs


zebzeb

Messages recommandés

Bonjour,

 

J'ai fait ce lisp qui me permet de renommer plusieurs Blocs

 

(defun c:nn(/)
(vl-load-com)
(vla-put-Name (vla-item(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object))) "LU9451")"LU-TYP-01"))
(vla-put-Name (vla-item(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object))) "LU3902")"LU-TYP-02"))
etc ...

(princ)
)

Mon soucis est que si le bloc n'existe pas le programme s'arrête et génère une erreur. Ayant plusieurs dessins à modifier, je cherche donc une solution du type si le bloc "LU9451" existe je le renomme si non je passe au suivant.

 

Merci pour votre aide

Lien vers le commentaire
Partager sur d’autres sites

Ben j'ai poster pour rien désolé, je viens de trouver la réponse ICI

 

j'ai fait

 

(if (tblsearch "block" "LU9451")(vla-put-Name (vla-item(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object))) "LU9451")"LU-TYP-01"))
etc...

 

Et ça fonctionne ;)

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Tu pourrais te simplifier la vie

Par exemple

(mapcar '(lambda(a B) (and (tblsearch "block" a)
		(vla-put-name
		  (vla-item
		    (vla-get-blocks
		      (vla-get-activedocument
			(vlax-get-acad-object)
		      )
		    )
		    a
		  )
		  b
		)
	      )
)
'("LU9451"    "LU3902")
'("LU-TYP-01" "LU-TYP-02")
)

 

Ou encore, sans tblsearch

(mapcar '(lambda(a B) (vl-catch-all-apply
		'vla-put-name
		(list
		  (vl-catch-all-apply
		    'vla-item
		    (list
		      (vla-get-blocks
			(vla-get-activedocument
			  (vlax-get-acad-object)
			)
		      )
		      a
		    )
		  )
		  b
		)
	      )
)
'("LU9451"    "LU3902")
'("LU-TYP-01" "LU-TYP-02")
)

 

ps : je te laisse méditer le code et répondrai si besoin.

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Re bonjour,

 

C'est vrai que ta solution est beaucoup plus simple 8) même visuellement! Mais les mapcar, les listes je ne maitrise pas vraiement.

 

En faite, je génère le lisp à partir d'une table excel en vba mais bon le lisp est plus lourd et la méthode archaïque.

 

En tout cas merci

Lien vers le commentaire
Partager sur d’autres sites

Une liste est un ensemble d'élements (chiffre, objet, ...)

La fonction mapcar est une boucle qui traite une, deux voir plus de listes dans une fonction

Par exemple, je souhaite faire une addition des chiffres de deux listes '(1 2 3 4) et '(4 5 6 7)

 

(mapcar '+ '(1 2 3 4) '(4 5 6 7)) --> (5 7 9 11)
(mapcar '+ '(1 2 3 4) '(4 5 6 7) '(8 9 10 11)) --> (13 16 19 22)

 

L'avantage dans ton cas de procéder avec le mapcar, c'est que c'est plus visuel, plus facile à manipuler comme listes

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour Patrick_35,

 

re-salut et désolé j'ai trouvé comment faire :

 

(if (tblsearch "layer" "xxx")

(command "._-rename" "layer" "xxx" "yyy" "")

)

-----

 

que faut-il changer dans ton lisp si on veut renommer des calques au lieu de bloc même si il n'existe pas dans le dessin ?

(je souhaite utiliser ce principe pour l’insérer dans un script mais en script il plante car le calque "par exemple "xxx" en "yyy") n'existe pas)

Merci d'avance pour l'éventuelle réponse.

Cordialement

AHG57

 

Salut

 

Tu pourrais te simplifier la vie

Par exemple

(mapcar '(lambda(a B) (and (tblsearch "block" a)
		(vla-put-name
		  (vla-item
		    (vla-get-blocks
		      (vla-get-activedocument
			(vlax-get-acad-object)
		      )
		    )
		    a
		  )
		  b
		)
	      )
)
'("LU9451"    "LU3902")
'("LU-TYP-01" "LU-TYP-02")
)

 

Ou encore, sans tblsearch

(mapcar '(lambda(a B) (vl-catch-all-apply
		'vla-put-name
		(list
		  (vl-catch-all-apply
		    'vla-item
		    (list
		      (vla-get-blocks
			(vla-get-activedocument
			  (vlax-get-acad-object)
			)
		      )
		      a
		    )
		  )
		  b
		)
	      )
)
'("LU9451"    "LU3902")
'("LU-TYP-01" "LU-TYP-02")
)

 

ps : je te laisse méditer le code et répondrai si besoin.

 

@+

Lien vers le commentaire
Partager sur d’autres sites

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é