Aller au contenu

[Résolu] Problème LISP


Keigo

Messages recommandés

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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)...

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)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité