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 :
( 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 :
( 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ée 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 incomplet 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 être un dysfonctionnement de prime abord, mettez la valeur 4 dans la variable (luprec) qui définira donc la précision d'affichage des unités et des coordonnées linéaires en choisissant un nombre de décimales à afficher, (4 signifiant : quatre décimales).
Dessinez un point à l'écran (une entité 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)
Ainsi, il paraîtrait bien que les coordonnées stockées dans la variable "pt" soient imprécises ou tronquées, du moins c'est qui se lit 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 la coordonnée X et transformation en chaine de caractères (string)
( rtos ( car pt ) 2 9 ) ce qui renvoie "8536.904155274"
Extraction de la coordonnée Y et transformation en chaine de caractères (string)
( rtos ( cadr pt ) 2 9 ) ce qui renvoie "5711.13150546"
Extraction de la coordonnée Z et transformation en chaine de caractères (string)
( rtos ( caddr pt ) 2 9 ) ce qui renvoie "0.00"
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.00")
Et là, on s'aperçoit que ce qui est stocké est correct bien que pas correctement 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.
revenir au menu ENTRÉES UTILISATEUR
14 juillet 2017
mise à jour mineure (apparence) 31 janvier 2023