zebulon_ Posté(e) le 18 avril 2005 Posté(e) le 18 avril 2005 Bonjour, je cherche une fonction, qui me permettrait de saisir dynamiquement un point à l'écran. Il y a bien la fonction grread, comme montré ici http:// http://www.cadxp.com/sujetXForum-4861.htmmais, grread n'a comme unique avantage que de pouvoir être dynamique. Pour le reste (accrochage aux objets, coordonnées au clavier, commandes transparentes, touches de fonctions ...) on perd tout. Alors, soit on s'en passe et c'est dommage, soit on réécrit tout et c'est compliqué. Ce dont je rêve, c'est une fonction getpoint dynamique qui conserve les accroches objet, les coordonnées au clavier etc..., qu'on pourrait mettre dans une boucle while. La condition d'arrêt de la boucle while correspondrait au moment ou l'utilisateur valide le point choisi. C'est pas possible ? C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Tramber Posté(e) le 18 avril 2005 Posté(e) le 18 avril 2005 getpoint conserve les accrobj, qui se rgèlent à partgetpoint accepte aussi les coordonnées enfin, la condition d'arrêt dans un while ne sert à rien s'il n'y a pas de but précis. getpoint renvoie nil en cas de clic-droit ou ENTREE ...ou alors j'ai pas compris ton problème ?! :P Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
zebulon_ Posté(e) le 18 avril 2005 Auteur Posté(e) le 18 avril 2005 Ce n'est pas le fonctionnement de getpoint qui me gène c'est celui de grread. En fait, ce que je cherche c'est un "getdynpoint" qui renvoie les coordonnées d'un point soit quand on clique sur le bouton de gauche de la souris, soit quand on bouge la souris sans cliquer quoi que ce soit. Le fait de cliquer sur le bouton de droite ferait arrêter la boucle while (voilà le but précis) La fonction grread sait faire cela, mais elle perd les accroches objet et tout le reste... Alors ce que je cherche, c'est une fonction qui sait renvoyer les coordonnées d'un point juste en bougeant la souris (de façon dynamique, si l'on veut) et qui soit un peu plus "intelligente" que grread. à titre d'exemple, voici un petit lisp qui utilise grread, tu verras que plus rien ne fonctionne en matière d'entrée de données utilisateur. Si le but est de cliquer quelque part au pif, grread est ce qu'il nous faut. Si le but est de cliquer quelque part de précis (extrémité, milieu ...) ou de donner les coordonnées, ou lancer une commande transparente, ça se gâte... (defun dessin_provisoire () (redraw) (grdraw PT0 PT1 -1 1) (grdraw PT1 (polar PT1 (/ PI 4) (distance PT0 PT1)) -1 1)) (defun dessin_definitif () (command "_line" PT0 PT1 (polar PT1 (/ PI 4) (distance PT0 PT1)) "")) (defun c:testgr () (setq PT0 (getpoint "\nSaisir premier point : ")) (setq PT1 PT0) (princ "\nSaisir deuxième point : ") (setq FLAG T) (while FLAG (setq CODE_RET (grread 1 7 0)) (setq TYPE_RET (car CODE_RET)) (cond ((= TYPE_RET 5) ;; Elément de saisie graphique (setq PT1 (cadr CODE_RET)) (dessin_provisoire) ) ((= TYPE_RET 3) ;; Point sélectionné (setq PT1 (cadr CODE_RET)) (setq FLAG nil) ) ) ) (redraw) (dessin_definitif)) amitiés alsaciennes [Edité le 18/4/2005 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Tramber Posté(e) le 18 avril 2005 Posté(e) le 18 avril 2005 OK, OK Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bonuscad Posté(e) le 18 avril 2005 Posté(e) le 18 avril 2005 Tu t'attaques à un problème ardu.Tu as fair référence un une routine que j'ai écrite, je te conseille de regardé plutôt celle-ci http://www.cadxp.com/sujetXForum-4728.htmqui seras un peu plus facile à décortiquer. De toute façon dans les 2 j'ai résolu partiellement l'accrobj en utilisant (osnap) et il possible aussi de taper un réel pour donner une distance fixe dans la direction de la position du curseur, donc je pense qu'il serait possible de le faire pour des coordonnées. Mais il faut reconnaitre que cela necessite un code relativement lourd pour faire pas grand chose... et par forcément fiable à 100% Si tu veux te plus amples explications pour décortiquer le code, fait signe ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
zebulon_ Posté(e) le 18 avril 2005 Auteur Posté(e) le 18 avril 2005 Justement et comme tu dis ce n'est que pour faire joli. Alors, s'il faut pour ça se farcir 15 pages de code, je crois que je ferai moins joli.Mais bon, j'avais un faible espoir que visual lisp nous ai concocté une fonction vla-getdynpoint ou quelque chose du même tonneau. Je ne perd pas espoir, mais il s'amenuise.... C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
zebulon_ Posté(e) le 18 avril 2005 Auteur Posté(e) le 18 avril 2005 Merci BonuscadPoussé par la curiosité, je suis allé voir un peu le code que tu me proposes. Au niveau de la simulation des accroches objet, j'ai vu que c'est le lisp qui impose la taille et la couleur du marqueur de snap. Je te propose d'utiliser les préférences définies dans autocad. A ce propos, j'ai une fois cherché les variables autocad qui pouvaient stocker ces informations, sans succès. Du coup je me suis tourné vers visual lisp pour trouver mon bonheur. (vl-load-com) (setq b (vla-get-drafting (vla-get-preferences (vlax-get-acad-object)))) (setq OSNAPCOL (vla-get-AutoSnapMarkerColor b)) (setq OSNAPSIZE (vla-get-AutoSnapMarkerSize b)) à toutes fins utiles ... C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
bonuscad Posté(e) le 18 avril 2005 Posté(e) le 18 avril 2005 Merci Zebulon pour la piste fournie concernant le mode "osnap". J'irais fouiller dans ce sens voir si je trouve des fonction interressantes que je pourrrais exploitées.. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 19 avril 2005 Posté(e) le 19 avril 2005 Quand je regarde la question, cela me fait penser qu’il faudrait plutôt chercher du coté des réacteurs comme avec la fonction vlr-mouse-reactor, et il y a un lisp fournit avec autocad dans les samples qui s’appelle Mouse reactor.lsp qui se sert de cette fonction (à titre d'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
zebulon_ Posté(e) le 19 avril 2005 Auteur Posté(e) le 19 avril 2005 Je ne maîtrise pas les réacteurs. J'ai consulté l'aide qui concerne la fonction vlr-mouse-reactor et il me semble que les événements qui sont détectés par ce réacteur sont le double clic et le clic droit. Les événements qui m'intéresse serait le clic gauche et le fait de juste faire de bouger la souris.Mais bon, comme je n'y connais pas grand chose avec les réacteurs, je raconte sans doute des salades ... C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Patrick_35 Posté(e) le 19 avril 2005 Posté(e) le 19 avril 2005 Tu as bien compris ce qui est expliqué dans l'aide, mais en regardant dans le lisp que je t'ai cité, on trouve ceci(# 0 "&Enter" "\n") (# 2 "&Move" "_Move ") (# 3 "&Erase" "_Erase ") (# 4 "&Cop&y" "_Copy ") (# 0 "&Bylayer" "(ac:Change-Color 256) ") (# 1 "&Red" "(ac:Change-Color 1) ") (# 2 "&Yellow" "(ac:Change-Color 2) ") (# 3 "&Green" "(ac:Change-Color 3) ") (# 4 "&Cyan" "(ac:Change-Color 4) ") (# 5 "&Blue" "(ac:Change-Color 5) ") (# 6 "&Magenta" "(ac:Change-Color 6) ")Je n'ai pas le temps de chercher plus en profondeur, mais je pense que ça vaut le coupJ'ai aussi trouvé moussemove dans commandbutton de msform, mais comment y aller ? @+ 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