Aller au contenu

Messages recommandés

Posté(e)

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

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

Posté(e)

getpoint conserve les accrobj, qui se rgèlent à part

getpoint 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

 

./__\.
(.°=°.)
Posté(e)

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)

Posté(e)

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

qui 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

Posté(e)

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)

Posté(e)

Merci Bonuscad

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

Posté(e)

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

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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)

Posté(e)

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 coup

J'ai aussi trouvé moussemove dans commandbutton de msform, mais comment y aller ?

 

@+

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

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é