Caleb Posté(e) le 3 février 2016 Posté(e) le 3 février 2016 Bonjour à tous, J'aurais besoin de vos conseils, pour récupérer les coordonnées du pointeur puis tracer une ligne - en temps réel.Mon objectif : reproduire le comportement de la fonction "LIGNE" ou "POLYLIGN" en AutoLISP. Soit "tirer" la ligne (après définition du premier point, tracer une ligne entre le premier et le curseur en temps réel, puis figer la ligne une fois le deuxième point posé). J'essaye d'utiliser les fonctions GRREAD et LIGNE, mais sans succès. Voilà mon échec : (setq xe '((0 0 0))) (while (/= (car (setq x (grread T))) 25) ; tant que pas clic droit (cond ((= (car x) 5) ; Si pointeur sans clic gauche (command "LIGN" (car xe) x "")) ((= (car x) 3) ; Si pointeur avec clic gauche (setq xe (cons (cadr x) xe))))) Avez-vous une idée ? Conçoit et développe un outil de calcul de ligne pour remontées mécaniques (téléskis, télésièges, télécabines...) en AutoLISP
Patrick_35 Posté(e) le 3 février 2016 Posté(e) le 3 février 2016 Salut Regarde ce message @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Caleb Posté(e) le 3 février 2016 Auteur Posté(e) le 3 février 2016 Bon bah je me réponds à moi-même, je viens de trouver une solution :;; Dessin d'une ligne en temps réel (setq xe '((0 0 0))) (while (/= (car (setq x (grread T))) 25) (cond ((= (car x) 5) (redraw) (grdraw (car xe) (cadr x) -1)) ((= (car x) 3) (setq xe (cons (cadr x) xe)) (redraw) (command "LIGNE" (cadr xe) (car xe) "")))) Qu'en pensez-vous ?Patrick_35, de ce que j'ai compris la fonction pause redonne la main à l'utilisateur. Ce n'est pas exactement ce que je recherche, vu que l'utilisateur n'est pas censé faire d'autres entrées que celle du curseur. Mais j'y ai appris des choses qui pourraient me servir plus tard. Maintenant, je cherche à faire la même chose, mais avec un arc... Temporairement je l'ai fait avec un cercle, mais ça saccade ;; Dessin d'un cercle en temps réel (setq xe nil) (while (/= (car (setq x (grread T))) 25) (cond ((= (car x) 5) (redraw) (command "CERCLE" (cadr x) 10 "")) ((= (car x) 3) (setq xe (cons (cadr x) xe)) (redraw) (command "CERCLE" (car xe) 10 "")))) Conçoit et développe un outil de calcul de ligne pour remontées mécaniques (téléskis, télésièges, télécabines...) en AutoLISP
bonuscad Posté(e) le 3 février 2016 Posté(e) le 3 février 2016 Salut, Pour t'inspirer, un bout de code pour tracer un arc virtuel par 3 points.Cela ce comporte comme la commande arc, mais aucun objet n'est créé. ((lambda ( / p1 p2 ll pt_m px1 px2 key p3 px3 px4 pt_cen rad inc ang nm lst_pt pa1 pa2) (initget 9) (setq p1 (getpoint "\nSpécifiez le point de départ de l'arc: ")) (initget 9) (setq p2 (getpoint p1 "\nSpécifiez le second point de l'arc: ")) (setq ll (list p1 p2) pt_m (mapcar '/ (list (apply '+ (mapcar 'car ll)) (apply '+ (mapcar 'cadr ll)) (apply '+ (mapcar 'caddr ll)) ) '(2.0 2.0 2.0) ) px1 (polar pt_m (+ (angle p1 p2) (* pi 0.5)) (distance p1 p2)) px2 (polar pt_m (- (angle p1 p2) (* pi 0.5)) (distance p1 p2)) ) (princ "\nSpécifiez l'extrémité de l'arc: ") (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (redraw) (setq p3 (cadr key) ll (list p1 p3) pt_m (mapcar '/ (list (apply '+ (mapcar 'car ll)) (apply '+ (mapcar 'cadr ll)) (apply '+ (mapcar 'caddr ll)) ) '(2.0 2.0 2.0) ) px3 (polar pt_m (+ (angle p1 p3) (* pi 0.5)) (distance p1 p3)) px4 (polar pt_m (- (angle p1 p3) (* pi 0.5)) (distance p1 p3)) pt_cen (inters px1 px2 px3 px4 nil) ) (cond (pt_cen (setq rad (distance pt_cen p3) inc (angle pt_cen p1) ang (+ (* 2.0 pi) (angle pt_cen p3)) nm (fix (/ (rem (- ang inc) (* 2.0 pi)) (/ (* pi 2.0) 36.0))) lst_pt '() ) (if (zerop nm) (setq nm 1)) (repeat nm (setq pa1 (polar pt_cen inc rad) inc (+ inc (/ (* pi 2.0) 36.0)) pa2 (polar pt_cen inc rad) lst_pt (append lst_pt (list pa1 pa2)) ) ) (setq lst_pt (append lst_pt (list pa2 p3))) (grvecs lst_pt) ) ) ) ) ) (prin1) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Caleb Posté(e) le 4 février 2016 Auteur Posté(e) le 4 février 2016 Merci bonuscad. Si j'ai bien compris, l'arc est discrétisé / approximé par de petits segments ? La fonction grvecs permet de les tracer.Je vais regarder ça de prêt, j'ai bien l'impression que la fonction ARC ou une fonction type grvecs / grdraw ne permette pas de tracer en temps réel un arc. Conçoit et développe un outil de calcul de ligne pour remontées mécaniques (téléskis, télésièges, télécabines...) en AutoLISP
Tramber Posté(e) le 4 février 2016 Posté(e) le 4 février 2016 Je vais regarder ça de prêt, j'ai bien l'impression que la fonction ARC ou une fonction type grvecs / grdraw ne permette pas de tracer en temps réel un arc.C'est très clair ; que des segments. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 4 février 2016 Posté(e) le 4 février 2016 Salut, je l'ai fait avec un cercle, mais ça saccade La fonction command est (très) lente, on peut essayer avec vl-cmdf qui est un petit peu plus rapide ou avec command-s (2013+) qui est plus rapide. Mais, par expérience, je trouve qu'on a de bon résultats avec grread en utilisant entmod. ((lambda (/ c r e) (setq c (entmakex '((0 . "circle") (10 0 0 0) (40 . 10)))) (while (/= 3 (car (setq r (grread T 4 0)))) (setq e (entget c)) (entmod (subst (cons 10 (cadr r)) (assoc 10 e) e))))) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 4 février 2016 Posté(e) le 4 février 2016 Allez, je suis dans un bon jour, une commande pour faire de ronds, pleins de ronds. (defun c:FaireDesRonds (/ *error* c r e) (defun *error* (msg) (and c (entdel c)) (princ)) (setq c (entmakex '((0 . "circle") (10 0 0 0) (40 . 10)))) (while (/= 25 (car (setq r (grread T 4 0)))) (setq e (entget c)) (cond ((= 5 (car r)) (entmod (subst (cons 10 (cadr r)) (assoc 10 e) e))) ((= 3 (car r)) (setq c (entmakex '((0 . "circle") (10 0 0 0) (40 . 10))))))) (*error* nil)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Caleb Posté(e) le 4 février 2016 Auteur Posté(e) le 4 février 2016 Merci Tramber, au moins je suis fixé.Et un grand merci Gile. Je travaille avec ton document "Introduction à AutoLISP" depuis 6 mois, pour concevoir mon outil (je partais de 0 en AutoLISP). Et tu viens de porter mon regard sur les derniers paragraphes que je n'avais pas lu. Pour revenir à ma problématique, je pense m'inspirer de ton premier post : créer un arc, puis modifier ses données DXF en temps réel. Conçoit et développe un outil de calcul de ligne pour remontées mécaniques (téléskis, télésièges, télécabines...) en AutoLISP
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