Invité Patrick Posté(e) le 13 septembre 2005 Posté(e) le 13 septembre 2005 Comment rendre courant le style d'une cote? J'aimerais pouvoir faire, clic droit sur un cote, rendre son style courant...
(gile) Posté(e) le 13 septembre 2005 Posté(e) le 13 septembre 2005 Salut, Si c'est bien dans le menu contextuel des cotations que tu veux glisser une commande, je te propose ce petit LISP. Il doit pouvoir marcher dans un bouton aussi, il accepte la sélection avant ou après le lancement de la commande comme "Rendre le calque courant". ;;; Rend le style de cote de l'objet sélectionné courant (defun c:style_cot (/ echo set1 ent) (setq echo (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (= 1 (getvar "pickfirst")) (setq set1 (ssget "_i")) (= 1 (sslength set1)) ) (progn (setq ent (ssname set1 0)) (sssetfirst nil nil) ) (progn (sssetfirst nil nil) (while (not ent) (setq ent (car (entsel "\nSélectionnez la cote dont vous voulez rendre le style courant: " ) ) ) ) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (command "_-dimstyle" "_r" (cdr (assoc 3 (entget ent)))) (progn (princ "\nL'objet sélectionné n'est pas une cote.") (exit) ) ) (setvar "cmdecho" echo) (princ) ) En espérant avoir répondu à tes attentes. Code édité (rajout d'un controle de sélection d'objet) [Edité le 13/9/2005 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 14 septembre 2005 Posté(e) le 14 septembre 2005 Salut PatrickJe pense que ça devrait te convenir, mais il y a juste une chose que je n'arrive pour l'instant, pas à faire. C'est lors du changement du style, interrompre la commande qui suit ou le menu contextuel. @+ (defun Clic_Droit(Rea Pt / Chs DimSt Doc Sel Sty) (if (setq Sel (ssget (car Pt))) ; récupère les coordonnées du clic droit (un peu comme grread) et donc l'entité (progn (setq Sel (entget (ssname Sel 0))) (if (eq (cdr (assoc 0 Sel)) "DIMENSION") ; Si c'est une cote (progn (setq Doc (vla-get-activedocument (vlax-get-acad-object)) Sty (vla-get-dimstyles Doc)) ; Style de cote actif (if (not (eq (vla-get-name (vla-get-activedimstyle Doc)) (cdr (assoc 3 Sel)))) ; Si styles de cotes differentes (progn (vlax-for DimSt Sty ; recherche la table de style de cote (if (eq (vla-get-name DimSt) (cdr (assoc 3 Sel))) (setq Chs DimSt) ) ) (if ChS (progn (vla-put-activedimstyle Doc Chs) ; rendre le style de cote courant (princ (strcat "\nLe style de cote " (cdr (assoc 3 Sel)) " à été rendu courant.")) ) ) ) ) ) ) ) ) (princ) ) (defun creation_reacteur (/ i j n) (vl-load-com) (if (vlr-reactors :vlr-mouse-reactor) ; si déjà un réacteur dans :vlr-mouse-reactor (progn (setq n 1) (while (setq i (nth n (car (vlr-reactors :vlr-mouse-reactor)))) ; recherche si la fonction Clic_Droit est déjà pointé par un réacteur du type :vlr-mouse-reactor (if (eq (cdr (car (vlr-reactions i))) 'CLIC_DROIT) (setq j i) ) (setq n (1+ n)) ) (if j (vlr-remove j) ; Réacteur déjà présent, il est supprimé ) ) ) (setq mrea_cld (vlr-mouse-reactor nil '((:vlr-beginRightClick . Clic_Droit)))) ; création du réacteur (princ "\nClic droit pour style de cote à activer ACTIF.") (princ) ) (if (not mrea_cld) (creation_reacteur) ) (princ) [Edité le 20/9/2005 par Patrick_35] 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 14 septembre 2005 Posté(e) le 14 septembre 2005 Houlà, jai du m'égarer dans la cour des grands :exclam: Désolé, je n'avais pas dû comprendre la question. Je ne comprends pas bien la réponse non plus :( Je ne peux même pas essayer, je n'ai qu'Intellidesk 2005 sous la main et il comprend encore moins bien que moi le VisualLISP, c'est pas peu dire ! Mais quand même, ils viennent d'où les deux arguments Rea et Pt ?J'ai raté un épisode ? :casstet: Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 15 septembre 2005 Posté(e) le 15 septembre 2005 Houlà, jai du m'égarer dans la cour des grands :exclam: Pas spécialement et je trouve que tu te débrouilles particulièrement bien Mais quand même, ils viennent d'où les deux arguments Rea et Pt ?Je me sers des réacteurs, et comme j'interviens dans le cas présent sur le clic droit, cela permet d'insérer une routine dans la fonction clic droitTu as une explication ici J'ai raté un épisode ? :casstet: Non, c'est juste du vlisp avec de l'autolisp ;) @+ 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 15 septembre 2005 Posté(e) le 15 septembre 2005 Merci Patrick_35 pour les explications et le gentil compliment ;) Je commence à peine à me dépatouiller avec le vlisp, alors les réacteurs, je pensais garder çà pour plus tard. À plus ... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 19 septembre 2005 Posté(e) le 19 septembre 2005 Bon, j'ai amélioré le lisp avec une recherche du réacteur s'il est déjà présent (cas d'un nouveau dessin avec sdi à 1) ps : Patrick, merci de nous faire signe si l'un des deux lisps t'intéresse @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Invité Patrick Posté(e) le 19 septembre 2005 Posté(e) le 19 septembre 2005 (gile): c'est le résultat que j'attends mais je souhaiterais faire un clic droit après avoir sélectionné une cote et rendre son style courant, plutôt que d'avoir à lancer un programme puis de sélectionner une cote. Patrick_35: je voulais rendre le style d'une cote courant et pas changer le style d'une cote. Merci à tous les deux.
(gile) Posté(e) le 19 septembre 2005 Posté(e) le 19 septembre 2005 Bonsoir, Il est possible d'ajouter la commande style_cot définie plus haut dans le menu contextuel des cotes (***POP504 dans AutoCAD.mns), mais la position à laquelle on place la commande dans ce menu peut perturber son fonctionnement, voir là. Ensuite, un clic droit après avoir sélectionné une cote ouvre le menu contextuel dans lequel il suffit de cliquer sur "Rendre le style de la cote courant". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Salut PatrickUn clic droit sur une cote rends son style courant, s'il ne l'est déjà pas @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Salut Patrick_35, J'ai essayé ton lisp par curiosité, mais il a un étrange comportement.Le réacteur sur le click-droit fonctionne aléatoirement, et quand il fonctionne il ne met pas le bon style courant (c'est toujours le même) Je m'y prend peut être mal. N'étant toujours pas à l'aise avec les réacteurs je ne peux t'aider.J'attends la suite du cours ;) Désolé que ma réponse ne puisse t'aider mais au moins tu sais qu'il y a peut être un problème. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Salut BonusJe n'ai rien remarqué de spécial :exclam: Pour tester la fonctionnalité, j'ai fait un copier d'un style de cote existant que j'ai mis par défaut, créé une cote puis réactivé l'ancien styleLe changement ne s'effectue que si le style par défaut est différent du style de cote pointé par clic droit et que si c'est une coteDans le fonctionnement du changement de style, il n'y a aucun réacteur, c'est juste du vlispLe réacteur n'intervient qu'une seule fois, juste pour le faire pointer sur la routine Clic_DroitPrécise moi ce qui se passe réellement, il y a peut-être un bug :( J'attends la suite du coursC'est avec plaisir, indique-moi et je ferais mon possible ;) deux exemples simple de réacteurs(defun test1(rea pt) (alert "Clic_droit") ) (setq mrea (vlr-mouse-reactor nil '((:vlr-beginRightClick . test1))))Maintenant, à chaque clic droit, j'ai un message(vlr-remove mrea)Pour supprimer le réacteur ou encore(defun test2(rea cde) (alert (strcat "La commande " (getcname (strcat "_" (car cde))) " va commencer")) ) (defun test3(rea cde) (alert (strcat "La commande " (getcname (strcat "_" (car cde))) " est terminée")) ) (setq dcde (vlr-command-reactor nil '((:vlr-commandWillStart . test2)))) (setq fcde (vlr-command-reactor nil '((:vlr-commandEnded . test3))))Ce qui donne un message au début et à la fin de chaque commande d'autocad(vlr-remove dcde)(vlr-remove fcde)Pour effacer les réacteurs Si on s'en donne la peine, on peut faire des choses fabuleuses avec les réacteurs :cool: ps : je l'ai revu avec des commentaires @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Je viens de réessayer, et ca fonctionne.Le problème que j'ai eu (je crois) est que le message n'apparait pas systématiquement"Le style de cote Copie de ISO-25 à été rendu courant."Ce qui m'a enduis en erreur et moi de m'obstiner sur le click-droitJ'ai eu la présence d'esprit d'essayer de faire quand même une cotation pour me rendre compte que le style avait changé.A la suite de ça le message est apparu régulièrement sans problème.Cela m'a fait la même chose pour la 1ere utilisation avec les grips activé, puis le click-droit; pas de message, puis à la suite fonctionnement normal J'ai fermé mon dessin, réouvert et là pas problème, même à la 1ere utilisation. Il reste des mystères réactifs ;) qui seront pas simple à résoudre car très aléatoire.Cela serait bien que d'autres confirment.... Bonne chanceEt merci pour le B.A.BA sur les réacteurs, mais je pense que si je me mets à les utiliser, cela sera avec parcimonie car l'interdépendance m'a l'air assez ardue à gérer pour des applics un peu complexes Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 21 septembre 2005 Posté(e) le 21 septembre 2005 Salut, J'ai essayé aussi, çà marche :D Trop puissant, dirait-on à Marseille, à la limite çà fait même un peu peur :exclam: Je crois que je vais attendre d'être plus à l'aise en programmation pour jouer avec les réacteurs :cool: En tous cas merci, Patrick_35, pour les exemples, c'est très clair. À plus. [Edité le 21/9/2005 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 21 septembre 2005 Posté(e) le 21 septembre 2005 Re, Donc pour en finir, je dirais que sous 2005, malgré le rodage de la 1ere utilisation, cela fonctionne bien. Par contre de nouveaux essais sous une 2000 reconfirme mon 1er post, fonctionnement aléatoire et quand cela fonctionne, le style n'est pas changé Quid?!! Voilà pour l'info, (ca a l'air instable ces réacteurs suivant la version...) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 21 septembre 2005 Posté(e) le 21 septembre 2005 ReJe ne pense pas que ce soir un problème avec le réacteur, je l'ai fait sous 2000Je pense plus simplement que ça doit se passer ici (if (setq Sel (ssget (car Pt)))S'il voit rien, il se passe rien. Surement un problème de précision au niveau du curseurPour vérifier que la fonction Clic_Droit fonctionne bien, il suffit de placer un (alert "CLIC") en tête ou en fin de la fonction@+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 19 juillet 2011 Posté(e) le 19 juillet 2011 Bonjour Forum ! Je rebondis sur ce vieux sujet : j'aimerais de l'aide pour adapter le code de gile, pour qu'il fasse d'une pierre deux coups :– hériter du style de cote– rendre courant le calque sur lequel se situe la cote "source" Quelqu'un peut-il m'aider ? Merci ! ;;; Rend le style de cote de l'objet sélectionné courant (defun c:style_cot (/ echo set1 ent) (setq echo (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (= 1 (getvar "pickfirst")) (setq set1 (ssget "_i")) (= 1 (sslength set1)) ) (progn (setq ent (ssname set1 0)) (sssetfirst nil nil) ) (progn (sssetfirst nil nil) (while (not ent) (setq ent (car (entsel "\nSélectionnez la cote dont vous voulez rendre le style courant: " ) ) ) ) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (command "_-dimstyle" "_r" (cdr (assoc 3 (entget ent)))) (progn (princ "\nL'objet sélectionné n'est pas une cote.") (exit) ) ) (setvar "cmdecho" echo) (princ) )
Patrick_35 Posté(e) le 20 juillet 2011 Posté(e) le 20 juillet 2011 Salut Avec DEF par exemple @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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