Bred Posté(e) le 10 avril 2006 Posté(e) le 10 avril 2006 Bonjour,je fait un premier (getpoint...puis je voudrais pouvoir proposer à l'utilisateur de rentrer un point OU une distance, et après le traiter à la suite du genre "(if c'est un point ...) " ou "(if c'est un réel ...)". Je pense que c'est avec initget et getdist, mais je n'arrive pas à cause des points 3D... (mais peut-être que je me trompe...) Merci d'avance. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bonuscad Posté(e) le 10 avril 2006 Posté(e) le 10 avril 2006 comme ceci (initget 9) ;;interdit une entrée nulle, mais accepte un point hors-limite(setq p1 (getpoint "\nPoint de base: "))(initget 7) ;;interdit une entréé nulle, = zéro et négative(setq d1 (getdist p1 "\nDistance: ")) NB (getdist) accepte aussi bien une simple entrée numérique au clavier qu'un autre point saisi graphiquement. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bred Posté(e) le 10 avril 2006 Auteur Posté(e) le 10 avril 2006 OK, merci,... Mais...La commande getdist fourni q'une distance, alors que ce qui m'interresserait c'est un point avec des coordonnées...c'est à dire qu'à la demande du second point, soit je click un point, (donc coordonnées immédiate), soit je donne une distance et ensuite je la traite en (list x y z) (ou je dit que ma distance est en Z par exemple) pour avoir mon second point en coordonnées...Donc mes difficultés sont :1 - Faire accepté comme réponse à UNE question un réel OU des coordonnées...2 - faire reconnaitre que ma variable est un réel (alors traitement), ou des coordonnées (alors rien du tout, je continu simplement...)En fait c'est comme la commande _line : après le premier point, pour le second je lui donne ou des coordonnées, ou un distance... En fait, pour être clair, ce que je cherche à faire c'est de tracer une ligne dans le sens des Z, sans retourner le SCU, en demandant 2 points ou une distance comme pour une ligne normale... j'ai fait ce qui suit, mais je voudrais avoir la possibilité, si je veux, de rentrer une distance à la place du second point... (defun c:lz (/ pt1 xpt1 ypt1 pt2 zpt2 pt2z) (princ "\n Ligne vers Z \n") (setq pt1 (getpoint "\n Spécifiez le premier point (départ ligne):")) (setq xpt1 (car pt1)) (setq ypt1 (cadr pt1)) (setq zpt1 (caddr pt1)) (setq pt2 (getpoint "\n Spécifiez le point suivant :")) (setq zpt2 (caddr pt2)) (While (= zpt2 zpt1)(alert "Erreur : Distance Z = 0") (setq pt2 (getpoint "\n Spécifiez le point suivant :")) (setq zpt2 (caddr pt2))) (progn (setq pt2z (list xpt1 ypt1 zpt2)) (command "_line" pt1 pt2z "") ) ) merci... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bonuscad Posté(e) le 10 avril 2006 Posté(e) le 10 avril 2006 Comme (getdist), (getpoint) accepte une entré clavier, qui sera compris comme une distance. Pour ce faire (getpoint) prendra la direction de la position du curseur (pour avoir l'angle de direction) et te retournera un point sous forme de liste. Tu peux aussi fourni en entrèe (comme pour la commande ligne) @25<45Le point retouné sera une liste calculée par rapport a ton dernier point de longueur 25 avec un angle de 45 (dans les unitées actives) Donc en résumé, tu n'as point a te soucier si c'est une distance ou tout autre forme d'entrée valide(getpoint) te retournera toujours un point sous forme de liste. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 10 avril 2006 Posté(e) le 10 avril 2006 Si tu veux utiliser getdist pour spécifier la distance avec le pointeur : (defun c:lz (/ pt1 pt2 dist) (princ "\n Ligne vers Z \n") (setq pt1 (getpoint pt1 "\n Spécifiez le premier point (départ ligne):") pt2 pt1 ) (while (= (caddr pt1) (caddr pt2)) (if (not (setq pt2 (getpoint "\n Spécifiez le second point ou : " ) ) ) (setq dist (getdist pt1 "\nSpécifiez la distance: ") pt2 (list (car pt1) (cadr pt1) (+ (caddr pt1) dist)) ) (setq pt2 (list (car pt1) (cadr pt1) (caddr pt2)) ) ) ) (command "_.line" pt1 pt2 "") (princ) ) Sinon, pour récupérer le z d'un autre point avec le pointeur ou le spécifier au clavier, il y a les filtres de coordonnées. En mode macro : ^C^C_line;\.xy;@;\; [Edité le 11/4/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 11 avril 2006 Auteur Posté(e) le 11 avril 2006 MerciJuste un éclairsisement, dans ton lisp je ne comprend pas : (setq pt1 (getpoint pt1 "\n Spécifiez le premier point (départ ligne):")pt2 pt1) le second pt1(après getpoint) ? le pt2 pt1) en fin de liste. merci Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bonuscad Posté(e) le 11 avril 2006 Posté(e) le 11 avril 2006 Je répond à la place de (gile) Avec (setq, tu peux affecter plusieurs variable d'affilé sans répéter (setq var valeur) à chaque fois.(setq var1 valeur var2 autrevaleur var3 encore-une-autre .......) est valide. Donc pt2 prend la valeur de pt1 .Ils deviennent identique et permettent dans ce cas précis de rentrer dans la boucle (while puis qu'ils vérifient sa condition d'égalité. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bred Posté(e) le 11 avril 2006 Auteur Posté(e) le 11 avril 2006 Un grand merci, j'ai tout compris... sauf .......le premier pt1 après getpoint... je sais que l'on peut rentrer un point avant la commande getpoint pour avoir une "ligne élastique", mais là le pt1 n'est pas encore défini et je ne vois pas à quoi il sert... Autre chose vite fait : la macro bouton, je l'aime beaucoup et j'y avais pensé, mais je retrouve le problème de rappel de commande avec "entrée" qui ne fonctionne pas... même problème que dans mon message précedent en fait : http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=9695#pid36933 Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Bred Posté(e) le 11 avril 2006 Auteur Posté(e) le 11 avril 2006 J'ai un peu revu le lisp de Gile... Pour Avis...merci(j'ai enlevé le premier "pt1" après getpoint -voir ma remarque précedente...ainsi que la demande getdist...) (defun c:lz (/ pt1 pt2)(princ "\n Ligne suivant Z \n")(setq pt1 (getpoint "\n Spécifiez le premier point (départ ligne):") pt2 pt1) (while (= (caddr pt1) (caddr pt2)) (progn (initget 1) (setq pt2 (getpoint pt1 "\n Spécifiez le second point ou une distance: ")) (setq pt2 (list (car pt1) (cadr pt1) (caddr pt2)))) ) (command "_.line" pt1 pt2 "")(princ)) Ca me va bien comme ça, sauf que j'aurais bien aimé que la distance de ligne déssiné soit la distance donné... A part retourné le SCU, n'y a t'il pas un moyen de "forcer" la possibilité de déplacement de la souris dans un seul sens ??? (celui des Z ici...) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 11 avril 2006 Posté(e) le 11 avril 2006 Au temps pour moi, le pt1 danns le premier getpoint est une erreur, je voulais le mettre dans le second. :P Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 11 avril 2006 Posté(e) le 11 avril 2006 Bred, Il y avait ce SUJET qui rejoint un peu celui-ci Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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