Aller au contenu

Rendre courant le style d\'une cote


Invité Patrick

Messages recommandés

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Salut Patrick

Je 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 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

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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 droit

Tu as une explication ici

 

J'ai raté un épisode ? :casstet:

Non, c'est juste du vlisp avec de l'autolisp ;)

 

@+

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

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 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

(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.

 

 

Lien vers le commentaire
Partager sur d’autres sites

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 .

 

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Salut Bonus

Je 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 style

Le 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 cote

Dans le fonctionnement du changement de style, il n'y a aucun réacteur, c'est juste du vlisp

Le réacteur n'intervient qu'une seule fois, juste pour le faire pointer sur la routine Clic_Droit

Précise moi ce qui se passe réellement, il y a peut-être un bug :(

 

J'attends la suite du cours

C'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 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

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-droit

J'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 chance

Et 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

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Re

Je ne pense pas que ce soir un problème avec le réacteur, je l'ai fait sous 2000

Je 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 curseur

Pour 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 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

  • 5 ans après...

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)
) 

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é