benard Posté(e) le 2 avril 2010 Posté(e) le 2 avril 2010 Bonsoir,je bloque,le code suivant fonctionne après chargement.a la seconde éxecution , AutoCAD 2009 renvoi : Affectation à un symbole protégé TYPE Y a t-il des variables a ne pas utiliser? TYPE ?? mise a jour du chemin du fichier dessin et la date d'edition dans les cartouches ;recupe les valeurs des etiquettes "NOM_FICHIER" et "DATE_EDITION" ;dans les blocs cartouches au nom commençant par car* ;met a jour l'etiquette "NOM_FICHIER" avec le chemin actuel ;met a jour l'etiquette "DATE_EDITION" avec la date courante ;liste des variables ;datfix date au format anglais ;att_new_date attribut nouvelle date au format français ;att_new_nom attribut nouveau nom du fichier dessin ;carts jeu de selection de tous les blocs avec un nom commençants par CAR ;compte compte le nombre d'objets dans le jeu de selections carts ;ent_bloc entite bloc en cours de traitement ;nom_bloc nom du bloc en cours de traitement ;ent_att entite attributs en cours de traitement ;att_etiq valeur de l'etiquette en cours de traitement ;att_old_nom valeur de l'etiquette ancien nom en cours de traitement ;att_old_date valeur de l'etiquette ancienne date ; (defun C:mjc ( / datfix att_new_date att_new_nom carts compte ent_bloc nom_bloc ent_att att_etiq) (setvar "CMDECHO" 0) ; Chargement de julian.lsp (load "julian" "Ne peut pas charger le fichier JULIAN.LSP.") ; Retrouver la date par la sous fonction de julian.lsp (progn (if (= (type jtoc) 'SUBR) (progn (setq datfix (jtoc (getvar "date"))) (setq att_new_date (strcat (itoa (nth 2 datfix));jour "/"(itoa (nth 1 datfix));mois "/"(itoa (nth 0 datfix));annee " à "(itoa (nth 3 datfix));heure "h"(if (< (nth 4 datfix) 10)(strcat "0" (itoa (nth 4 datfix)))(itoa (nth 4 datfix)));minutes ) ) );progn (setq att_new_date " Indéterminée") );if );progn ;recuperer le nom du fichier (setq att_new_nom (strcat (getvar "dwgprefix") (getvar "dwgname"))) ;recupere tout les blocs (setq carts (ssget "x" '((0 . "INSERT") (2 . "CAR*")))) ;verifie le jeu de selection (if (/= carts nil);if3 (progn (setq compte 0) (repeat (sslength carts) (setq ent_bloc (ssname carts compte)) ;recupere le nom du bloc (setq nom_bloc (cdr (assoc 2 (entget ent_bloc)))) ;verifie la presence d'attribut (if (=(cdr (assoc 66 (entget ent_bloc)))1) ;(princ i) (progn (setq ent_att (entnext ent_bloc)) (princ "\n recuperation des attributs du bloc") (while (/= (cdr (assoc 0 (entget ent_att))) "SEQEND") ;(setq ent_bloc (car ent_bloc)) (princ ".") (setq att_etiq (cdr (assoc 2 (entget ent_att)))) (setq att_val (cdr (assoc 1 (entget ent_att)))) ;initialise l'attribut ;(print ) ;(princ att_etiq) (princ " ") (princ att_val) ;stocke la valeur de l'etiquette ;(if (= att_etiq "NOM_FICHIER")(princ "trouve")) (if (= att_etiq "NOM_FICHIER")(setq att_old_nom att_val)) (if (= att_etiq "DATE_EDITION")(setq att_old_date att_val)) (set (read att_etiq )att_val) (setq ent_att (entnext ent_att)) ) ;mise a jour de l'attribut nom_fichier (if (/= att_old_nom nil) (command "_attedit" "N" "N" nom_bloc "nom_fichier" att_old_nom att_old_nom att_new_nom) ) ;mise a jour de l'attribut date (if (/= att_old_date nil) (command "_attedit" "N" "N" nom_bloc "date_edition" att_old_date att_old_date att_new_date) ) ;mise a nil des variables pour traité le bloc suivant (setq att_old_nom nil) (setq att_old_date nil) ) (progn (alert (strcat "le bloc " nom_bloc " ne contient pas d'attributs\navec l'etiquette NOM_FICHIER ou\navec l'etiquette DATE_EDITION !")) ) ) (setq compte (+ compte 1)) (princ) ) ) ) ;(setvar "CMDECHO" 1) );defun (princ "\n\ mjc charge")
bonuscad Posté(e) le 2 avril 2010 Posté(e) le 2 avril 2010 Bonsoir, Après adaptation de ton lisp à mes étiquettes de bloc, je l'ai testé et ma foi pour moi il fonctionne sans erreurs et plusieurs fois! Cependant une ligne m'intrigue car je vois pas à quoi elle sert... (set (read att_etiq )att_val) Il n'y a qu'elle en plus qui peut poser problème. En effet (par exemple dans mon cas de test ou mon bloc a d'autre attributs) l'étiquette de l'attribut est affecté comme nom de variable.Si j'avais eu une étiquette nommé "TYPE" à ce moment là j'aurais eu: (set TYPE att_val)vu que tu as un test dans ton code: (if (= (type jtoc) 'SUBR).... à la seconde exécution la fonction réservée TYPE se retrouve redéfinie. C'est une explication plausible, mais je me trompe peut être. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
benard Posté(e) le 6 avril 2010 Auteur Posté(e) le 6 avril 2010 Bonsoir, bonuscad c'est bien cette ligne de trop qui perturbe le fonctionnement.
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