bonuscad Posté(e) le 27 juin 2005 Partager Posté(e) le 27 juin 2005 Bonjour à tous Est-il possible de savoir par un quelconque moyen, le succés de l'achèvement d'une commande.Ici, il s'agirait de la commande décaler. Je voudrais savoir si l'objet a put être décalé.Ce problème se pose pour des arcs (ou autre courbe: ellipse, spline) décalés vers le centre.Ces renseignements me seraient utile pour essayer de finaliser une routine lisp dont en voici une ébauche.Bien que la routine n'avorte pas dans ce cas précis, je voudrait que ma variable dis_off ne soit pas incrémenté.Comme d'hab. elle utilise (grread) ;) Merci (defun draw_pt (pt / pt1 pt2 pt3 pt4) (setq rap (/ (getvar "viewsize") 50) pt1 (list (+ (car pt) rap) (+ (cadr pt) rap)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap)) pt3 (list (- (car pt) rap) (- (cadr pt) rap)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap)) ) (grdraw pt pt1 -1) (grdraw pt pt2 -1) (grdraw pt pt3 -1) (grdraw pt pt4 -1) ) (defun c:dyn_offset ( / sel_ent pt_sel e_sel dis_off borne loop sav_osm key pt) (while (null (setq sel_ent (entsel "\nChoix de l'objet à décaler: ")))) (setq pt_sel (cadr sel_ent) e_sel (car sel_ent) borne (entlast) loop T sav_osm (getvar "osmode") ) (if (< (getvar "offsetdist") 0.0) (initget 7) (initget 6)) (setq dis_off (getdist (strcat "\nDistance de décalage<" (rtos (getvar "offsetdist")) ">: "))) (if (not dis_off) (setq dis_off (getvar "offsetdist")) (setvar "offsetdist" dis_off)) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (and (setq key (grread T 4 0)) (/= (car key) 3) loop) (cond ((eq (car key) 5) (setq pt (cadr key)) (draw_pt pt_sel) (cond ((>= (distance pt_sel pt) dis_off) (command "_.offset" "" sel_ent pt "") ;;ICI je voudrais savoir si la commande a pu se réaliser (setq sel_ent (entlast) dis_off (+ dis_off (getvar "offsetdist")) ) ) ((and (< (distance pt_sel pt) dis_off) (> (distance pt_sel pt) 0.0) (not (eq (entlast) borne)) (not (eq (entlast) e_sel)) ) (entdel sel_ent) (setq sel_ent (entlast) dis_off (- dis_off (getvar "offsetdist")) ) ) ) ) ((or (member key '((2 13) (2 32))) (eq (car key) 25)) (setq loop nil)) ) ) (redraw) (setvar "osmode" sav_osm) (setvar "cmdecho" 1) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 27 juin 2005 Partager Posté(e) le 27 juin 2005 Salut Bonus Le plus simple avec une comparaison par (entlast) du style(setq der (entlast)) (ma_routine) (if (eq (entlast) der) (princ "\nCa ne s'est pas bien passé :-(") (princ "\nCommande réussie :-)") ) (princ) Ou encore par les réacteurs avec :vlr-commandEnded pour vérifier que la commande s'est bien déroulée, mais ça ne veux pas dire que la commande decaler a créé une nouvelle entité. Tout dépend à quel niveau tu souhaites faire ton analyse d'erreur @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 27 juin 2005 Auteur Partager Posté(e) le 27 juin 2005 Salut Patrick J'ai posé ma question un peu trop vite, dans ma tête je pensais trouver la réponse dans ERRNO ou une fonction comme (bherr) mais en fait; après une illumination, j'en suis arrivé au même raisonnement que toi (par entlast).Malgré t'avoir lu après, je te remercie de ta réponse qui a confirmé ma démarche. Pour ceux que ça interesseraient, voici le code plus abouti.Celui permet un décalage répétitif d'un objet sans faire d'innombrables clicks, il suffit juste de glisser le curseur et de clicker ou entrée pour achever le décalage à l'endroit voulu.Cela peut être pratique pour faire les lignes et colonnes d'un tableau. (defun draw_pt (pt / pt1 pt2 pt3 pt4) (setq rap (/ (getvar "viewsize") 50) pt1 (list (+ (car pt) rap) (+ (cadr pt) rap)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap)) pt3 (list (- (car pt) rap) (- (cadr pt) rap)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap)) ) (grdraw pt pt1 -1) (grdraw pt pt2 -1) (grdraw pt pt3 -1) (grdraw pt pt4 -1) ) (defun c:dyn_offset ( / sel_ent pt_sel e_sel dxf_ent e_mark e_borne loop sav_osm dis_off key pt) (while (null (setq sel_ent (entsel "\nChoix de l'objet à décaler: ")))) (setq pt_sel (osnap (cadr sel_ent) "_near") e_sel (car sel_ent) dxf_ent (entget e_sel) e_mark e_sel e_borne (entlast) loop T sav_osm (getvar "osmode") ) (cond ((and (member (cdr (assoc 0 dxf_ent)) '("LWPOLYLINE" "POLYLINE" "LINE" "XLINE" "RAY" "ARC" "CIRCLE" "ELLIPSE" "SPLINE")) (if (cdr (assoc 70 dxf_ent)) (< (rem (cdr (assoc 70 dxf_ent)) 128) 8) T ) ) (if (< (getvar "offsetdist") 0.0) (initget 7) (initget 6)) (setq dis_off (getdist (strcat "\nDistance de décalage<" (rtos (getvar "offsetdist")) ">: "))) (if (not dis_off) (setq dis_off (getvar "offsetdist")) (setvar "offsetdist" dis_off)) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (and (setq key (grread T 4 0)) (/= (car key) 3) loop) (cond ((eq (car key) 5) (setq pt (cadr key)) (draw_pt pt_sel) (cond ((>= (distance pt_sel pt) dis_off) (command "_.offset" "" e_sel pt "") (if (not (eq (entlast) e_sel)) (setq e_sel (entlast) dis_off (+ dis_off (getvar "offsetdist")) ) ) ) ((and (< (distance pt_sel pt) (- dis_off (getvar "offsetdist"))) (> (distance pt_sel pt) 0.0) (not (eq e_mark e_sel)) ) (entdel e_sel) (if (eq e_borne (entlast)) (setq e_sel (car sel_ent)) (setq e_sel (entlast)) ) (setq dis_off (- dis_off (getvar "offsetdist"))) ) ) ) ((or (member key '((2 13) (2 32))) (eq (car key) 25)) (setq loop nil)) ) ) (redraw) (setvar "osmode" sav_osm) (setvar "cmdecho" 1) ) (T (princ "\nL'objet ne peut pas être décalé.")) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 27 juin 2005 Partager Posté(e) le 27 juin 2005 après une illuminationIl faut bosser en électricité, on a plein d'ampoules ;) Juste deux/trois remarques si tu le permets Bonus1) Ton lisp n'accepte pas la le clic droit de la souris (entrée)2) Si je bascule une première fois vers la droite (vive grread) et que je vais ensuite sur la gauche, il me reste des lignes sur la droite de celle d'origine3) La commande réseau est très pratique, mais ton lisp à l'avantage d'être plus visuel @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 27 juin 2005 Auteur Partager Posté(e) le 27 juin 2005 Sous 2002, click droit ou gauche fonctionnent indifféremment :casstet: Lorque tu bascule d'un coté à l'autre de la ligne, il faut que le curseur passe par le point de sélection de l'objet. Une croix virtuelle est dessinée pour te rappeler là où il se trouve! La distance est calculée par rapport à ce point, se déplacer en conséquence... ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 27 juin 2005 Partager Posté(e) le 27 juin 2005 Sous 2002, click droit ou gauche fonctionnent indifféremmentApparemment pas sous la 2000, il n'en veut pas Une croix virtuelle est dessinée pour te rappeler là où il se trouve!Ce qui est bien pratique La distance est calculée par rapport à ce point, se déplacer en conséquence... J'avais bien compris, mais il me reste des traits, surtout quand je bascule de droite à gauche et en plus, je viens de constater qu'il y a des traits qui se superposent. Après réflexion, ça ma parait logique vu qu'il n'efface pas tout Ps : je remet les espaces où il faut dans ton lisp et je regarde de plus près @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 28 juin 2005 Partager Posté(e) le 28 juin 2005 Après Test, pour le clic droit, j'ai ajouté(while (and (setq key (grread T 4 0)) (/= (car key) 3) [b](/= (car key) 11)[/b] loop) Ps : Je continue... ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 28 juin 2005 Auteur Partager Posté(e) le 28 juin 2005 Tu dois avoir une souris avec plein de bouton ;) avec la ligne suivante pour tester les codes retournés(while (and (setq key (grread T 4 0)) (not (member key '((2 13) (2 32))))) (print key)) Sous 2002 avec une souris 2 boutons et molette (d'ailleurs la molette n'est pas pris en charge par grread)j'ai pour :ckick gauche: (3 (x y z)) et CTRL+click gauche (3 (x y z))click droit (25 n) et CTRL+Click droit (11 n) (12 (x y z)) (5 (x y z)) (25 n) Je pense que si on utilise une souris ou une tablette avec un nombre de boutons plus important le code de (grread) serait encore différent suivant comment ceux-ci sont affectés. Ha, je viens de trouver en rédigeant, la variable "SHORTCUTMENU" a une incidence sur l'interprétation des boutons (logique!)Ben volilà plus rien à ajouter, a part de faire le controle de cette variable dans la routine si on veut qu'elle reste homogème. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 28 juin 2005 Partager Posté(e) le 28 juin 2005 avec la ligne suivante pour tester les codes retournés(while (and (setq key (grread T 4 0)) (not (member key '((2 13) (2 32))))) (print key)) Les grands esprits se rejoignent :cool: un clic droit me retourne (11 0)un shift+clic droit (11 1000)et un crtl+clic droit (11 2000) Et j'ai compris pourquoi tout ne s'efface pas en bougeant le curseur de la sourisJe trace un trait en ortho (ex 0,0 à 0,30) et si je bouge ma souris entre les y 0 et 30, ça fonctionne correctement. Par contre, si je bouge en y < 0 ou en y > 30, là tout ne s'efface pas correctement :o @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
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