Kris_LC Posté(e) le 6 mai 2015 Posté(e) le 6 mai 2015 Bonjour à tous, Je m'étais créé un LISP pour sélectionner rapidement mes cotes, calques, styles de texte et style de repère rapide. Mais maintenant je voudrai gérer les erreurs.Par exemple, parfois il manque le calques correspondant,et je voudrai qu'il continue de sélectionner les autres sans s'arrêter à cette erreur. Voici un extrait pour les cotes échelles 1.(defun c:11 (/ VAR1) (setvar "cmdecho" 0) (command "-calque" "libérer" "BID1_COT_1.1" "") (setvar "clayer" "BID1_COT_1.1") (setvar "textstyle" "COT. 1-1") (command "-cotstyle" "restaurer" "1-1 mm") (setvar "cmleaderstyle" "1-1") (princ) ) Merci d'avance,
(gile) Posté(e) le 6 mai 2015 Posté(e) le 6 mai 2015 Salut, Tu peux tout simplement tester si le calque existe dans la table des calques avec la fonction tblsearch. Tu peux faire de même avec les styles de texte et de cote. Avec les style de repère multiple, c'est un peu plus difficile, il sont stockés dans le dictionnaire ACAD_MLEADERSTYLE qui est lui même dans le dictionnaire racine (namedobjdict). (defun c:11 () (setvar "cmdecho" 0) (if (tblsearch "LAYER" "BID1_COT_1.1") (progn (command "-calque" "libérer" "BID1_COT_1.1" "") (setvar "clayer" "BID1_COT_1.1") ) ) (if (tblsearch "STYLE" "COT. 1-1") (setvar "textstyle" "COT. 1-1") ) (if (tblsearch "DIMSTYLE" "1-1 mm") (command "-cotstyle" "restaurer" "1-1 mm") ) (if (dictsearch (cdr (assoc -1 (dictsearch (namedobjdict) "ACAD_MLEADERSTYLE"))) "1-1" ) (setvar "cmleaderstyle" "1-1") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Kris_LC Posté(e) le 7 mai 2015 Auteur Posté(e) le 7 mai 2015 Merci Gilles pour ton professionnalisme ! Je ne connaissais pas ce principe des dictionnaires et du tableau des éléments. Pour une information personnelle,à quoi sert le (progn Merci !
-Olivier- Posté(e) le 7 mai 2015 Posté(e) le 7 mai 2015 Bonjour Kris_LC, La fonction if fonctionne de la manière suivante. (IF condition si_vrai_alors_A sinon_alors_B) Donc si tu as plusieurs éléments à effectuer si la condition est vrai tu dois les "assembler" en une seule. La fonction progn permet cela. Pour information, le sinon est facultatif. Olivier
Arcasdk Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Bonjour Giles et bonjour à tous, Dans la continuité de ce message, pourrais je avoir quelques conseils pour finaliser ma macro. Je travaille sur les styles de repère multiple. J'ai compris qu'on ne les trouve pas avec un tblsearch mais avec un dictsearch Ma macro a pour but de renommer un style de repère multiple Voici ma macro : (defun c:renSRM (/ main_dict mlead_sty sty_std) (setq main_dict (namedobjdict)) (setq mlead_sty (dictsearch (namedobjdict) "ACAD_MLEADERSTYLE")) (if (setq sty_std (dictsearch (cdr (assoc -1 mlead_sty)) "Standard")) (entmod (subst (cons 3 "StandardOld")(assoc 3 sty_std) sty_std)) (princ "Standard n'existe pas") ) ) En revanche je n'arrive pas à modifier le nom du style. J'ai l'impression que ça ne rafraîchi pas. Merci <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Patrick_35 Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Salut Essaye ça(defun c:renSRM(/ dic doc mle sty) (setq doc (vla-get-activedocument (vlax-get-acad-object)) dic (vla-get-dictionaries doc) ) (vla-startundomark doc) (or (vl-catch-all-error-p (setq mle (vl-catch-all-apply 'vla-item (list dic "ACAD_MLEADERSTYLE")))) (vl-catch-all-error-p (setq sty (vl-catch-all-apply 'vla-item (list mle "Standard")))) (vla-put-name sty "StandardOld") ) (vla-endundomark doc) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Salut, Tout d'abord, on ne peut pas renommer le style "Standard". Ensuite, le groupe DXF 3 pour les style de ligne de repère multiple ne correspond pas au nom du style mais à sa description (CF l'aide).Pour renommer un style de ligne de repère multiple avec entmod il faut agir directement sur les entrées dans le dictionnaire :(defun renameMLeaderStyle (oldName newName / mlDict) (and (/= (strcase oldName) "STANDARD") (setq mlDict (dictsearch (namedobjdict) "ACAD_MLEADERSTYLE")) (member (cons 3 oldName) mlDict) (entmod (subst (cons 3 newName) (cons 3 oldName) mlDict)) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Re, Attention, que ce soit avec entmod, vla-put-Name ou setpropertyvalue, on peut avoir l'impression d'avoir renommé le style Standard, mais il suffit d'enregistrer (ou de faire un contrôle) pour que le style Standard réapparaisse. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Re, Attention, que ce soit avec entmod, vla-put-Name ou setpropertyvalue, on peut avoir l'impression d'avoir renommé le style Standard, mais il suffit d'enregistrer (ou de faire un contrôle) pour que le style Standard réapparaisse.Salut Oui, mais il garde celui qui a été renommé. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Arcasdk Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Merci à tous, Effectivement Patrick_35, ton lisp fonctionne. Il renomme complètement le style standard existant. Je ne comprend pas grand chose au langage utilisé mais ça marche. Bonne journée <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
(gile) Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Tu pourras aussi le faire avec celui que j'ai donné à condition de mettre en commentaire la ligne :(/= (strcase oldName) "STANDARD")Mais tu verras que dans les deux cas, il ne s'agit pas à proprement parler d'un renommage mais plutôt d'une copie puisque le style Standard sera automatiquement recréé par AutoCAD à la réouverture du dessin ou après un CONTROLE. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Arcasdk Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Merci (Gile), d'accord. Dans mon cas, je renomme les "dimstyle" et "mleaderstyle" standard pour pouvoir insérer dans mon dessin courant, sous forme de bloc (que je supprime en fin de routine), une cote linéaire et une ligne de repère multiple qui sont en style "standard". Ainsi j'ai dans mon plan les styles que j'ai l'habitude d'utiliser. Voila, aujourd'hui j'ai réussi à faire ce que je voulais. On verra à la longue si je n'ai pas de surprise. Ce n'est certainement pas la méthode la plus simple pour le faire mais j'ai progresser en code ;-). (defun c:std (/ dirclq) (command "-purger" "tout" "tout" "o") (vl-load-com) ;RENOMME LE DIMSTYLE STANDARD EN STANDARDOLD (if (tblsearch "DIMSTYLE" "Standard") (progn (setq acadObj (vlax-get-acad-object)) (setq doc (vla-get-ActiveDocument acadObj)) (setq dimx (vla-get-Dimstyles doc)) (setq item (vla-item dimx "Standard")) (if (= (vla-get-name item) "Standard") (vla-put-name item "StandardOld") ) (vla-regen doc acActiveViewport) (princ) (princ "Standard existe, Il sera renommé en StandardOld") (princ)) (princ "non, il n'existe pas") ) ;RENOMME LE MLEADERSTYLE STANDARD EN STANDARDOLD (setq dic (vla-get-dictionaries doc)) (vla-startundomark doc) (or (vl-catch-all-error-p (setq mle (vl-catch-all-apply 'vla-item (list dic "ACAD_MLEADERSTYLE")))) (vl-catch-all-error-p (setq sty (vl-catch-all-apply 'vla-item (list mle "Standard")))) (vla-put-name sty "StandardOld") ) (vla-endundomark doc) (princ) ;DEFINIR LA DESTINATION D'ENREGISTREMENT (if (eq dirclq nil) (setq dirclq (strcat lettreunite ":\\Std.dwg")) ) (setq pointins '(0 0 0)) (princ dirclq) (command "_.insert" dirclq pointins "" "" "") (setq elast (entlast)) (entdel elast) (setvar "TEXTSTYLE" "ARIAL") (setvar "CMLEADERSTYLE" "Standard") (if (tblsearch "DIMSTYLE" "Standard") (vla-put-activeDimstyle doc (vla-item (vla-get-Dimstyles doc) "Standard") ) ) (princ) ) Merci encore. <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
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