Aller au contenu

Messages recommandés

Posté(e)

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,

Posté(e)

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

Posté(e)

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 !

Posté(e)

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

  • 1 an après...
Posté(e)

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>

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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>

Posté(e)

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

Posté(e)

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>

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é