DenisHen Posté(e) le 8 décembre 2016 Posté(e) le 8 décembre 2016 Bonjour à tous... Voilà, aujourd'hui, je cherche à dessiner un "solid" sous en texte multiligne. J'ai, pour cela, récupérer un bout de LISP, de Maître (gile), pour l'utiliser dans mon nouveau LISP. Mais ça ne fonctionne pas... J'ai donc ce code (avec un paquet de drapeaux placés vite-fait pour situer l'erreur plus vite) :(defun c:TestTrameText (/ Select ent elst n nor ref rot wid jus hgt org plst box mat mxv Pt1 Pt2 Pt3 Pt4) (setq n 0) (if (setq Select (ssget "_X" '((0 . "MTEXT") (8 . "Coordonnées")))) (progn (while (setq ent (ssname Select n)) (princ "\n...setq elst = \t") (princ elst) (setq elst (entget ent)) (princ "\n...setq nor = \t") (setq nor (cdr (assoc 210 elst))) (princ nor) (princ "\n...setq ref = \t") (setq ref (trans (cdr (assoc 10 elst)) 0 nor)) (princ ref) (princ "\n...setq rot = \t") (setq rot (angle '(0 0 0) (trans (cdr (assoc 11 elst)) 0 nor))) (princ rot) (princ "\n...setq wid = \t") (setq wid (cdr (assoc 42 elst))) (princ wid) (princ "\n...setq hgt = \t") (setq hgt (cdr (assoc 43 elst))) (princ hgt) (princ "\n...setq jus = \t") (setq jus (cdr (assoc 71 elst))) (princ jus) (princ "\n...setq org = \t") (setq org (list (cond ((member jus '(2 5 8)) (/ wid -2)) ((member jus '(3 6 9)) (- wid)) (T 0.0) ) ;_ Fin de cond (cond ((member jus '(1 2 3)) (- hgt)) ((member jus '(4 5 6)) (/ hgt -2)) (T 0.0) ) ;_ Fin de cond ) ;_ Fin de list ) ;_ Fin de setq (princ org) (princ "\n...setq plst") (setq plst (mapcar (function (lambda (p) (mapcar '+ org p))) (list (list (- 0.1) (- 0.1)) (list (+ wid 0.1) (- 0.1)) (list (+ wid 0.1) (+ hgt 0.1)) (list (- 0.1) (+ hgt 0.1)) ) ;_ Fin de list ) ;_ Fin de mapcar ) ;_ Fin de setq (princ plst) (princ "\n...setq box = \t") (setq box (textbox elst)) (princ box) (princ "\n...setq ref = \t") (setq ref (cdr (assoc 10 elst))) (princ ref) (princ "\n...setq rot = \t") (setq rot (cdr (assoc 50 elst))) (princ rot) (princ "\n...setq plst = \t") (setq plst (list (list (- (caar box) 0.1) (- (cadar box) 0.1)) (list (+ (caadr box) 0.1) (- (cadar box) 0.1)) (list (+ (caadr box) 0.1) (+ (cadadr box) 0.1)) (list (- (caar box) 0.1) (+ (cadadr box) 0.1)) ) ;_ Fin de list ) ;_ Fin de setq ) ;_ Fin de if (princ plst) (princ "\n...setq mat = \t") (setq mat (list (list (cos rot) (- (sin rot)) 0) (list (sin rot) (cos rot) 0) '(0 0 1))) (princ mat) (princ "\n...setq plst = \t") (setq plst (mapcar (function (lambda (p) (mapcar '+ (mxv mat p) (list (car ref) (cadr ref))))) plst)) (princ plst) (princ "\nAttribution des quatre points") (setq Pt1 (list (car (nth 0 plst)) (cadr (nth 0 plst)))) (setq Pt2 (list (car (nth 1 plst)) (cadr (nth 1 plst)))) (setq Pt3 (list (car (nth 2 plst)) (cadr (nth 2 plst)))) (setq Pt4 (list (car (nth 3 plst)) (cadr (nth 3 plst)))) ;;; (command "_.solid" Pt1 Pt2 Pt4 Pt3 "") (setq n (1+ n)) ) ;_ Fin de progn ) ;_ Fin de while )Et donc, AutoCAD me répond :Commande: TESTTRAMETEXT...setq elst = nil...setq nor = (0.0 0.0 1.0)...setq ref = (20.3199 17.4986 0.0)...setq rot = 0.0...setq wid = 1.26938...setq hgt = 0.940205...setq jus = 1...setq org = (0.0 -0.940205)...setq plst((-0.1 -1.04021) (1.36938 -1.04021) (1.36938 0.1) (-0.1 0.1))...setq box = nil...setq ref = (20.3199 17.4986 0.0)...setq rot = 0.0...setq plst = ; erreur: type d'argument incorrect: numberp: nilCommande: Je pense que l'erreur se situe au niveau du (setq box (textbox elst))qui est nil, donc, le (setq plst plante, mais je ne sais pas quoi faire... Si quelqu'un a une astuce, un conseil... Je suis preneur... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
didier Posté(e) le 8 décembre 2016 Posté(e) le 8 décembre 2016 Coucou tu t'attaques à du "lourd",il faut maîtriser les changements de basepour toi c'est OK cette technique ? c'est là qu'apparaît la limite du copier-coller !!!ce que je veux dire par là (j'y ai été confronté)il vaut mieux écrire ton code du début à la fin, tu pigeras bien mieux. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 8 décembre 2016 Auteur Posté(e) le 8 décembre 2016 Salut didier, et merci pour ta réponse... C'est du copier/coller, je ne le cache pas, ;) car je suis incapable d'écrire un tel code... Oui, le copier/coller est parfois indispensable, un peu comme si on utilisait une DLL (on sait ce qu'elle fait, mais on ne sait pas comment). Je l'utilise déjà ce code dans un autre LISP et il fonctionne très bien... C'est juste que je ne pige pas pourquoi, en l’occurrence dans ce cas, il plante...? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 8 décembre 2016 Auteur Posté(e) le 8 décembre 2016 En plus, dans ce code, un (mapcar (function (lambda (p) (mapcar... Même le copier/coller me fait mal au crane... ;) Hop, Aspirine... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 8 décembre 2016 Posté(e) le 8 décembre 2016 Salut, Émailler le code de print pour déboguer est la méthode utilisée quand on n'a pas d'IDE (Environnement de Dévelopement Intégré en français), autrement dit quand on code depuis un éditeir de texte.Si tu utilises l'éditeur Visual LISP, serts toi des fonctions de débogage : tu mets un point d'arrêt au début de ta fonction et tu fais un "pas à pas" (touche F8), à tout moment tu pourras interroger la valeur actuelle des variables (ou le résultat d'expressions) dans la console. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 8 décembre 2016 Auteur Posté(e) le 8 décembre 2016 Salut (gile), et merci pour ton aide... Oui, j'ai déjà essayé le mode pas à pas, mais je ne sais jamais où j'en suis dans l'exécution du code... A quelle ligne on en est... En VBA, la ligne en cours est surlignée, mais là, je ne trouve rien qui me l'indique... De plus, j'ai placer un point d'arrêt à la deuxième ligne du code (sous le defun) et mon code s'exécute en entier, sans rien me dire... Il ne fait qu'activer la fenêtre de l'IDE mais AutoCAD m'a déjà répondu "Commande: TESTTRAMETEXT ; erreur: type d'argument incorrect: numberp: nil" T'as une astuce ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 8 décembre 2016 Posté(e) le 8 décembre 2016 Pendant le "pas à pas", l'expression qui est en train d'être évaluée est surlignée. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 8 décembre 2016 Auteur Posté(e) le 8 décembre 2016 Et comment tu lances le mode "pas à pas" ? Chez moi, c'est grisé... Oops, j'avais oublié qu'on ne peut plus joindre de fichiers... Je te fais une capture et un WeTransfer... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 8 décembre 2016 Posté(e) le 8 décembre 2016 Il faut d'abord mettre un point d'arrêt : tu places ton curseur là où tu veux mettre le point d'arrêt (devant : (progn ... par exemple) et tu relances la routine. quand l'interprétation du code arrive au point d'arrêt, l'interprétation s'interrompt. Le focus passe de la fenêtre d'AutoCAD à l'éditeur Visual LISP où tu reprends la main pour évaluer des variables ou des expressions dans la console et/ou continuer l'évaluation "pas à pas" en faisant F8 ou Ctrl+F8 pour aller jusqu'au prochain point d'arrêt. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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