Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é