Keigo Posté(e) le 30 mai 2016 Posté(e) le 30 mai 2016 Bonjour, Je me suis lancé (du moins j’essaye) quand j’ai un peu de temps, dans la programmation sur Autocad. J’ai créé des programmes me permettant de travailler sur des sections cadastrales, par défaut au 1/1000ème. Je travaille en ce moment sur un LISP me permettant de changer, suivant l’échelle que je veux, mes hauteurs de textes, largeurs et échelles de polyligne. J’ai un souci et je n’arrive pas à trouver la source du problème. Voici le message d’erreur.type d'argument incorrect: stringp nil Et le lisp en question (Dans cet exemple passer du 1/1000ème au 1/500ème) ;;**********************************ECHCAD.LSP************************************;; ;; "_UNDO" = (GETCNAME "ANNULER") (DEFUN IGC_ERREUR ( MSGXX / ) (PRINC MSGXX) (COMMAND "_UNDO" "F") (COMMAND "_UNDO" 1) (SETQ *ERROR* ANC_ERR) (SETVAR "CMDECHO" 1) (PRINC) ) ;;***********************************************************************************************************************;; (DEFUN C:ECH500 ( / JS1 JS2 JS3 COMPT OBJ HLD STYTXT TYPLI ECHLI NVECHLI NVEP EPLI1 EPLI2 ANC_ERR) (SETVAR "CMDECHO" 0) (COMMAND "_UNDO" "D") (SETQ ANC_ERR *ERROR* *ERROR* IGC_ERREUR ) (SETQ JS1 (SSGET "X" (LIST (CONS 0 "TEXT") (CONS 8 "CADASTRE-TXT") ) ) ) (PRINC (STRCAT "\N" (ITOA (SSLENGTH JS1)) " ENTITE(S) SELECTIONNE(S).")) (TERPRI) (SETQ COMPT 0) (WHILE (SETQ ENT (SSNAME JS1 COMPT)) (SETQ OBJ (ENTGET ENT) STYTXT (CDR (ASSOC 7 OBJ)) HTXT (CDR (ASSOC 40 OBJ)) ) (COND ( (WCMATCH STYTXT "PARCELLE") (SETQ HLD 0.9) (SETQ OBJ (SUBST (CONS 40 HLD) (ASSOC 40 OBJ) OBJ)) ) ) (COND ( (WCMATCH STYTXT "POLICE") (SETQ HLD 0.7) (SETQ OBJ (SUBST (CONS 40 HLD) (ASSOC 40 OBJ) OBJ)) ) ) (COND ( (WCMATCH STYTXT "SENTECAD") (SETQ HLD 1.4) (SETQ OBJ (SUBST (CONS 40 HLD) (ASSOC 40 OBJ) OBJ)) ) ) (COND ( (WCMATCH STYTXT "RUECAD") (SETQ HLD 1.50) (SETQ OBJ (SUBST (CONS 40 HLD) (ASSOC 40 OBJ) OBJ)) ) ) (COND ( (WCMATCH STYTXT "LIEUX-DITS") (SETQ HLD 2.0) (SETQ OBJ (SUBST (CONS 40 HLD) (ASSOC 40 OBJ) OBJ)) ) ) (COND ( (WCMATCH STYTXT "SECTION") (SETQ HLD 3.0) (SETQ OBJ (SUBST (CONS 40 HLD) (ASSOC 40 OBJ) OBJ)) ) ) (COND ( (WCMATCH STYTXT "COMMUNE") (SETQ HLD 4.0) (SETQ OBJ (SUBST (CONS 40 HLD) (ASSOC 40 OBJ) OBJ)) ) ) (ENTMOD OBJ) (SETQ COMPT (1+ COMPT)) ) (SETQ JS2 (SSGET "X" (LIST (CONS 6 "SECTION,LIEUX-DIT,COMMUNE1000") (CONS 8 "CADASTRE") ) ) ) (IF JS2 (PROGN (PRINC (STRCAT "\N" (ITOA (SSLENGTH JS2)) " ENTITE(S) SELECTIONNE(S).")) (TERPRI) (SETQ COMPT 0) (WHILE (SETQ ENT (SSNAME JS2 COMPT)) (SETQ OBJ (ENTGET ENT) NVEP (CDR (ASSOC 43 OBJ)) ) (COND ( (WCMATCH TYPELIGN "LIEUX-DIT") (SETQ NVEP 0.4) (SETQ OBJ (SUBST (CONS 43 NVEP) (ASSOC 43 OBJ) OBJ)) ) ) (COND ( (WCMATCH TYPELIGN "SECTION") (SETQ NVEP 0.3) (SETQ OBJ (SUBST (CONS 43 NVEP) (ASSOC 43 OBJ) OBJ)) ) ) (COND ( (WCMATCH TYPELIGN "COMMUNE1000") (SETQ NVEP 0.4) (SETQ OBJ (SUBST (CONS 43 NVEP) (ASSOC 43 OBJ) OBJ)) ) ) (ENTMOD OBJ) (SETQ COMPT (1+ COMPT)) ) ) ) (SETQ JS3 (SSGET "X" (LIST (CONS 0 "LINE,POLYLINE,LWPOLYLINE") (CONS 8 "CADASTRE") ) ) ) (IF JS3 (PROGN (COMMAND "CHANGER" JS3 "" "PR" "EC" "0.5" "" ) ) ) (COMMAND "_UNDO" "F") (SETQ *ERROR* ANC_ERR) (SETVAR "CMDECHO" 1) (PRINC) ) Je suis preneur de toutes informations pouvant résoudre le problème. Merci d'avance. Citer
(gile) Posté(e) le 30 mai 2016 Posté(e) le 30 mai 2016 Salut, Le message d'erreur signifie qu'une fonction attend un argument de type chaîne (STR) et reçoit nil (l'argument est probablement une variable non assignée). Si ça ne te suffit pas, pour trouver d'où vient l'erreur : - dans l'éditeur Visual LISP (tu codes dans l'éditeur, j'espère) menu Débogage > cocher "Arrêt sur l'erreur"- relancer le code pour provoquer à nouveau l'erreur- faire Ctrl + F9 pour mettre en surbrillance l'expression qui a provoqué l'erreur- interroger les variables pour déterminer là où ça cloche Cette procédure est décrite à la section 4.5 du tutoriel : "Introduction à AutoLISP" téléchargeable sur Exchange Apps ou sur mon site. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 30 mai 2016 Posté(e) le 30 mai 2016 Salut, J'ai remarqué dans ton code un style de texte "LIEUX-DITS" (au pluriel) et un type de ligne "LIEUX-DIT" (au singulier)... Mais l'erreur ne vient pas de là... Et je te conseille aussi l'"Introduction à AutoLISP" de (gile)... Citer 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)
Keigo Posté(e) le 31 mai 2016 Auteur Posté(e) le 31 mai 2016 Bonjour, @(gile): Merci pour la réponse et le tuto qui à l'air très intéressant, je regarderai plus en détail dans la semaine. Pour Visual Lisp, oui je l'utilise régulièrement. Quand je fais la manip, après avoir fait: CTRL+F9, je n'ai rien en surbrillance mais un pavé qui s’affiche avec ":ERROR-BREAK type d’argument incorrect : stringp nil"Après plusieurs essai, je pense savoir de quelle partie du LISP vient l'erreur (Dans la partie "SETQ JS2") mais pas d’où exactement. @DenisH: Bien vu, je n'avais jamais fait attention. Citer
Keigo Posté(e) le 1 juin 2016 Auteur Posté(e) le 1 juin 2016 Bonjour, En regardant de plus près le document de (gile) j'ai trouvé d’où venait l'erreur. J'avais tous simplement oublié de rappeler la commande "type de ligne". Merci pour l'aide. Citer
Messages recommandés