ASTERIXII Posté(e) le 21 avril 2013 Posté(e) le 21 avril 2013 Bonjour, Nota j'ai modifier tous le lisp + dcl , et je change de questionJ'ai récuperé un lisp + dcl, et je l'ai modifié (ne trouvant pas de réponse à mon probleme) Mais j'ai un nouveau probléme: il y a une erreur apres le lancement si je ne change rien à la selection de la liste1 et de la liste2exemple: si je fais un choix dans la liste de droite uniquement,ensuite je valide, et j'ai une erreurSi ensuite je fais un choix à gauche dans la liste, la liste de droite change (c'est ok), ensuite je valide, et de nouveau erreur.Mais si au premier lancement, je fais un choix dans la liste de droite, puis dans celle de gauche, la aucun probleme.** Error: type d'argument incorrect: stringp nil ** il me semble que le probleme vient de la: (action_tile "lst2" (strcat "(setq *Model* $value)" "(setq *Make* $value1)" "(setq tempo_index2 (atoi *Model*))" "(setq tempo_SNC_CAL (nth tempo_index2 lst2))"))] Code:(defun c:SNC_X (var_snc / *error* UpdateList data dclfile dclhandle ) ;; This program demonstrates how to update a secondary list_box based ;; on user selection from a primary list_box. ;; Example courtesy of Lee Mac © 2010 (www.lee-mac.com) ;; Accompanying DCL File: ;**************************(setq NAMES_COUL (list 1 2 3 4 5 6)) (setq NAMES_LIN (list "CACHE2" "CACHE2" "CACHE2" "CACHE2" "CACHE2" "CACHE2")) (setq NAMES_EP_L (list 2 2 2 2 2 2)) ; épaisseur pour ligne(setq NAMES_EP_T (list 1 1 1 1 1 1)) ; épaisseur pour texte(setq NAMES_EP_E (list 0.5 0.5 0.5 0.5 0.5 0.5)) ; épaisseur pour équipement ;************************* (setq dclFile "listboxexample.dcl") ;; Ensure this file resides in an AutoCAD Support Path (defun *error* ( msg ) ;; Error Handler - will unload the dialog ;; from memory should the user decide to hit Esc (if dclHandle (unload_dialog dclHandle)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ) ) (defun UpdateList ( key lst ) ;; This function updates the list_box associated with the specified key ;; using the contents of the supplied lst (start_list key) (mapcar 'add_list lst) (end_list) ) ;; Data used to Populate List_Boxes: ;; I've chosen to use this list structure because it suits the data, ;; but there are many other possibilities. (setq Data '( ("Ventilation" ("CV-451 Air neuf-un" "CV-452 Air soufflé-un" "CV-453 Air repris-un" "CV-454 Rejet d’air-un" "CV-455 VMC-un" "CV-456 Air extrait-un")) ("Plomberie" ("SA-610 Eau Froide-bi" "SA-620 Eau chaude-bi" "SA-625 Bouclage Eau chaude-bi" "SA-630 Eau mitigée-bi")) ) ) ;; Start of Main Routine ;; Lots of Error Trapping to make sure the Dialog Loads: (cond ( (<= (setq dclHandle (load_dialog dclFile)) 0) (princ "\n--> DCL File not Found.") ) ( (not (new_dialog "listboxexample" dclHandle)) (setq dclHandle (unload_dialog dclHandle)) (princ "\n--> Dialog Definition not Found.") ) ( t ;; Dialog Loaded Successfully. (or *Make* (setq *Make* "0")) (or *Model* (setq *Model* "0")) ;; Set up some default selections, for the first-time running of the program. ;; The variables *Make* & *Model* are intended to be global and hence will ;; remember the user's last selections. ;; Populate the List_Boxes: ;; List_Box 'lst1' (UpdateList "lst1" (mapcar 'car Data)) (set_tile "lst1" *Make*) ;; List_Box 'lst2' (UpdateList "lst2" (cadr (nth (atoi *Make*) Data))) (set_tile "lst2" *Model*) ;; Action_tile Statements: ;; These control what happens when the user interacts with a tile in the dialog. (action_tile "lst1" (strcat "(setq $value1 $value) (UpdateList \"lst2\" (setq lst2 (cadr (nth (atoi (setq *Make* $value)) Data))))" "(setq *Model*" " (set_tile \"lst2\"" " (if (< (atoi *Model*) (length lst2)) *Model* \"0\")" " )" ")" ) ) ;; Here, when the user selects an item from 'lst1', the UpdateList subfunction ;; is fired to update the items in list_box 'lst2'. ;; list_box 'lst2' is also set to the value of *Model* if the index is ;; available for the selected item, else the first item is selected. ;; Note that $value is a string containg the index of the item ;; that the user has selected. (action_tile "lst2" (strcat "(setq *Model* $value)" "(setq *Make* $value1)" "(setq tempo_index2 (atoi *Model*))" "(setq tempo_SNC_CAL (nth tempo_index2 lst2))")) ;; Dialog setup, lets start it: (start_dialog) (setq dclHandle (unload_dialog dclHandle)) ) );****** ;(alert (strcat "la valeur est :" *Make* " " *Model*)) (setq SNC_CAL tempo_SNC_CAL) (setq index1 (atoi *Make*)) ; list Lot (setq index2 (atoi *Model*)) ; list Calque ;(setq SNC_CAL (nth index2 NAMES_CAL)) ;récupérer nom du calque dans liste (setq SNC_COUL (nth index2 NAMES_COUL)) ;récupérer couleur dans la liste ;var_snc = "L" pour ligne;var_snc = "T" pour texte;var_snc = "E" pour equipement ;**************** ; LIGNE / RESEAU; (if (= var_snc "L") (progn (setq SNC_EP (nth index2 NAMES_EP_L)) ;récupérer épaisseur dans la liste pour ligne (setq SNC_LIN (nth index2 NAMES_LIN)) ; récupérer le type de ligne ; creation calque(if (= (tblsearch "layer" SNC_CAL) nil) ;création calque(command "-calque" "n" SNC_CAL "co" SNC_COUL SNC_CAL "tl" SNC_LIN SNC_CAL "ep" SNC_EP SNC_CAL "ch" SNC_CAL "")) (command "_line") ); fin progn ); fin if ;**************** ; TEXTE ; (if (= var_snc "T") (progn (setq SNC_CAL (strcat SNC_CAL "_Texte")) (setq SNC_EP (nth index1 NAMES_EP_T)) ;récupérer épaisseur dans la liste pour texte (setq SNC_LIN "CONTINUOUS") ; fixe le type de ligne ; creation calque(if (= (tblsearch "layer" SNC_CAL) nil) ;création calque(command "-calque" "n" SNC_CAL "co" SNC_COUL SNC_CAL "tl" SNC_LIN SNC_CAL "ep" SNC_EP SNC_CAL "ch" SNC_CAL "")) (command "_text") ); fin progn ); fin if ;**************** ;EQUIPEMENT; (if (= var_snc "E") (progn (setq SNC_CAL (strcat SNC_CAL "_Equip")) (setq SNC_EP (nth index1 NAMES_EP_E)) ;récupérer épaisseur dans la liste pour equipement (setq SNC_LIN "CONTINUOUS") ; fixe le type de ligne ; creation calque(if (= (tblsearch "layer" SNC_CAL) nil) ;création calque(command "-calque" "n" SNC_CAL "co" SNC_COUL SNC_CAL "tl" SNC_LIN SNC_CAL "ep" SNC_EP SNC_CAL "ch" SNC_CAL "")); lancement icon; Gestion des lot cv fm ....; (setq Lot "I=SNC1.CVC1")(menucmd Lot);(menucmd "I=SNC1.CVC1")(menucmd "I=SNC1.*") ); fin progn ); fin if ;********** (princ) ); defun Boite DCL:// DCL File to be saved as listboxexample.dcl// Example courtesy of Lee Mac © 2010 (www.lee-mac.com) lbox : list_box { width = 25; fixed_width = true; alignment = centered; } listboxexample : dialog { label ="List Box Synchronisation"; spacer; : row { : lbox { key = "lst1"; label = "Make" ; } : lbox { key = "lst2"; label = "Model"; } } ok_only;}
ASTERIXII Posté(e) le 23 avril 2013 Auteur Posté(e) le 23 avril 2013 C'est bon, j'ai trouvé le probleme.J'ai modifieé le lisp, pour non plus "passer" une variable avec le nom du calque, mais la list. Question: comment clore le sujet ?
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