GETPOINT

Acquérir un point cliqué

 

Cette fonction opère une pause dans le programme pour que l'utilisateur puisse cliquer un point sur l'écran de l'interface graphique.

Syntaxe : (getpoint [point] [message])
Arguments :

 

point
un point 3D dans le SCU courant.
Si point est renseigné, une ligne élastique part de ce point comme indication de direction, l'utilisateur ne pointera que le deuxième point.
message,
Un message sous forme de texte qui apparaîtra sur la ligne de commande.
Si message n'est pas renseigné la ligne de commande sera vide, (getpoint) n'ayant pas de message par défaut.
Valeur renvoyée : Le point cliqué dans le SCU courant sous forme de liste de trois réels (list).

Pour illustrer (getpoint) nous allons dessiner une ligne en cliquant deux points :

1
2
3
(setq pt1 (getpoint "\nPoint de départ\n"))
(setq pt2 (getpoint "\nPoint d'arrivée\n"))
(command "_line" pt1 pt2 "")

Ou bien avec une ligne élastique reliant le point déjà cliqué à celui attendu:

1
2
3
(setq pt1 (getpoint "\nPoint de départ\n"))
(setq pt2 (getpoint pt1 "\nPoint d'arrivée\n"))
(command "_line" pt1 pt2 "")

Si l'accrochage objet est activé il est pris en compte avec cette fonction, si on force un accrochage au clavier il en est de même.
Si la variable osnapz a la valeur de 1, la coordonnée Z (altitude) réelle du point est ignorée et est remplacé par la valeur mémorisée dans la variable d'environnement elev.


L'affichage de la console LISP semble incomplet pour ce qui est des décimales d'un nombre issu d'une saisie écran ou d'un calcul, par exemple vous cliquez un point à l'écran, vous renseignez une variable avec ses coordonnées, et vous vous étonnez de l'affichage de ces dernières dans la console.
Tiens ! Ça alors !, ce ne sont pas les mêmes coordonnées que je trouve en demandant par la commande de renseignement dans AutoCAD les coordonnées du point ! (commande ID).
Rassurez-vous, ce n'est qu'une "paresse" d'affichage et la preuve on va l'obtenir en transformant en chaîne de caractères (string) les réels de la liste des coordonnées du point.

Faisons un test qui va faire apparaître ce qui semble un dysfonctionnement au prime abord, mettez la valeur 4 dans la variable (luprec) qui définit la précision d'affichage des unités et des coordonnées linéaires en choisissant un nombre de décimales à afficher.

Dessinez un point, et choisissez l'accrochage nodal pour la sélection.

(setq pt (getpoint"\nChoix d'un point (nodal)\n"))
Console lisp (8536.9 5711.13 0.0)
ligne de commande AutoCAD X = 8536.9042
Y = 5711.1315

Dans la Console Visual Lisp, qu'on affiche en appuyant sur la touche F6, il suffit de taper le nom de la variable pour voir ce qu'elle contient, si on veut interroger le contenu d'une variable depuis la ligne de commande d'AutoCAD il faut taper son nom en le faisant précéder d'un point d'exclamation !

En ligne de commande : !pt
(4.04497e+006 748261.0 0.0)

Donc il semblerait bien que les coordonnées stockées dans la variable "pt" soient imprécises ou tronquées, du moins c'est qui se voit dans l'affichage de la console lisp.
Il ne faut pas s'arrêter à ce constat car en transformant le contenu en chaîne de caractères (string), on va rapidement s'apercevoir du contraire en forçant l'affichage des décimales, ce n'est qu'à l'affichage en numérique qu'elles semblent incomplètes, la vraie valeur (précision complète) est stockée de manière invisible avec toutes les décimales utiles dans la mémoire affectée à la variable.

Dans l'exemple suivant, chaque atome de la variable "pt" va être modifié en chaîne de caractères en système décimal avec neuf décimales.
Voir les fonctions (rtos), (car) et (cadr) si vous ne les connaissez pas encore.
Les valeurs dans l'exemple ne sont pas contractuelles et ne seront sans doute pas celles affichées chez vous lors du test (hihi)

Choix du point :

(setq pt (getpoint"\nChoix d'un point : \n"))

Extraction de l'abscisse (coordonnée X ) :

(rtos (car pt) 2 9)

renvoie : "8536.904155274"

Extraction de l'ordonnée (coordonnée Y ):

(rtos (cadr pt) 2 9)

renvoie : "5711.13150546"

Extraction de l'altitude (coordonnée Z ):

(rtos (caddr pt) 2 9)

Ou mieux encore avec une fonction anonyme et un (mapcar) , un peu plus avancé comme façon de faire mais on va en parler plus tard...

 

(mapcar '(lambda (x) (rtos x 2 9)) pt)

Renvoie : ("8536.904155274" "5711.13150546" "0")

Et là on s'aperçoit que ce qui est stocké est correct bien que pas affiché lors de l'interrogation du contenu de la variable.
On va donc pouvoir s'en servir pour des calculs ultérieurs sans craindre une dilution de la précision par manque de renseignement de la partie décimale des nombres.

 


Haut de page

revenir au menu ENTRÉES UTILISATEUR


14 juillet 2017