zebzeb Posté(e) le 25 août 2014 Posté(e) le 25 août 2014 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
zebzeb Posté(e) le 25 août 2014 Auteur Posté(e) le 25 août 2014 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 ;)
didier Posté(e) le 25 août 2014 Posté(e) le 25 août 2014 coucou non, tu n'as pas posté pour rientu as résolu ton souci tout seul et si quelqu'un fait une recherche il trouvera TA solution, c'est un des buts du site. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 25 août 2014 Posté(e) le 25 août 2014 Salut Tu pourrais te simplifier la viePar 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
zebzeb Posté(e) le 25 août 2014 Auteur Posté(e) le 25 août 2014 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
Patrick_35 Posté(e) le 25 août 2014 Posté(e) le 25 août 2014 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 fonctionPar 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ahbv Posté(e) le 7 juillet 2017 Posté(e) le 7 juillet 2017 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.CordialementAHG57 Salut Tu pourrais te simplifier la viePar 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. @+
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant