tyrese69_ Posté(e) le 16 novembre 2004 Posté(e) le 16 novembre 2004 J'ai un plan qui a en xref des fichiers tyty_a pour indice atoto_c pour indice cetc... comment mettre à jour le plan si un des fichiers deviens tyty_b, sachant que les nouveaux nomssont disponiblent dans un fichier .txt Daniel
Patrick_35 Posté(e) le 16 novembre 2004 Posté(e) le 16 novembre 2004 SalutUn lisp qui peut correspondre à tes besoins. Pour une première utilisation, il est créé un fichier INI de ton dessin (en reprenant le nom et son emplacement) pour y mettre tout les xref. Il suffit de changer dans le fichier créé le nom du fichier pour que le changement soit pris en compte Il est possible de faire encore plus structuré dans sa manière de travailler, mais c'est déjà une bonne base de départ @+ (defun c:xr(/ bl cmd fic) (defun fic() (vl-string-subst "INI" "DWG" (strcat (getvar "dwgprefix") (getvar "dwgname"))) ) (defun routine(/ fi nom_fi ch_fi trouve) (if (= (logand (cdr (assoc 70 bl)) 4) 4) (progn (if (setq fi (open (fic) "r")) (progn (while (setq nom_fi (read-line fi)) (setq ch_fi (read-line fi)) (if (= (cdr (assoc 2 bl)) nom_fi) (progn (setq trouve T) (if (/= (cdr (assoc 1 bl)) ch_fi) (command "_.xref" "_p" nom_fi ch_fi) ) ) ) ) (close fi) (if (not trouve) (progn (setq fi (open (fic) "a")) (write-line (cdr (assoc 2 bl)) fi) (write-line (cdr (assoc 1 bl)) fi) (close fi) ) ) ) (progn (setq fi (open (fic) "w")) (write-line (cdr (assoc 2 bl)) fi) (write-line (cdr (assoc 1 bl)) fi) (close fi) (alert (strcat "Création du Fichier " (fic))) ) ) ) ) ) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (setq bl (tblnext "block" t)) (routine) (while (setq bl (tblnext "block")) (routine) ) (setvar "cmdecho" cmd) (princ) ) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 16 novembre 2004 Posté(e) le 16 novembre 2004 hello,tu es chanceux, Patrick_35, ou devin,car j'ai rien compris à ce message,à priori les XRefssont disponibles dans un fichier texte créé par ailleurs.enfin, l'auteur va nous expliciter celà.n'empêche que tu es réactif, bravo ;) amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
tyrese69_ Posté(e) le 17 novembre 2004 Auteur Posté(e) le 17 novembre 2004 Bonjour,Juste pour ceux qui ont du mal à comprendre ! Un plan lorsqu'il en liaison avec un xref archi par exemple,peut être mis à jour par deux méthode : - l'archi corrige son plan et le remplace par un nouveau fichiermais avec un noms identique. D'où des problèmes pour suivreles différents indices ! - l'archi est organisé et envoi des plans indicé dans le nomsd'où tyty_a pour le premier indice du fichier puis b, c etc. Cette seconde méthode à l'inconvénient d'obliger à chaque diffusionde refaire le lien, puisque le noms de l'xref est différent. Je vais essayé le bout de code de Patrick_35,un grand merci pour cette réponse avec cesdifférentes infos ! Je vous tiendrais au courant des résultats. Daniel
tyrese69_ Posté(e) le 17 novembre 2004 Auteur Posté(e) le 17 novembre 2004 Re bonjour, Patrick_35 peut tu eclairer ma lanterne de novice en vlisp ! La commande xr renvoi nil. Comment est ce que j'accede auautres commandes ? (je suis en 2005 !) Daniel
Patrick_35 Posté(e) le 17 novembre 2004 Posté(e) le 17 novembre 2004 Pour DidierJe ne suis pas devin, c'est juste que je travaille de cette manière là, sauf que pour moi, c'est automatique et complètement transparent grâce à une GED en liaison avec autocadLe but est de conserver une tracabilité complète de tous ses fichiers informatiques. Je suis capable de ressortir n'importe quel plan à n'importe quel indice et quelle que soit l'évolution des mes xref Pour tyrese69_Tu n'as rien à faire, tout est automatique. Lors de la première utilisation de XR, un fichier INI est crée (en reprenant le nom du dessin et son emplacement dans le nom du fichier). Il ne te reste plus qu'à modifier ce fichier pour faire évoluer tes xrefPar exemple un c:\...\...\...\fichier_1_A.dwg devient c:\...\...\...\fichier_1_B.dwg et il suffit de relancer XR pour prendre en compte le changement (et le plus simple et de le mettre en startup, c'est à dire qu'il se lance à chaque ouverture d'un dessin) J'ai aussi réfléchi entre temps et pensé à une méthode plus simple que de passer par un fichier texte. Il suffit avec le nouveau lisp de mettre ton nouvel indice au même emplacement que l'ancien pour que le lisp le voie. Attention, c'est une manipulation de texte, il prend le dernier caractère du fichier (ex : fichier_1_A.dwg --> Indice A), l'incrémente de 1 (donc Indice B--->fichier_1_B.dwg) et regarde s’il existe pour faire le changement @+ (defun c:xr(/ bl cmd) (defun routine(/ fi ind) (if (= (logand (cdr (assoc 70 bl)) 4) 4) (progn (setq fi (cdr (assoc 1 bl))) (setq ind (substr fi (- (strlen fi) 4) 1)) (setq ind (chr (1+ (ascii ind)))) (setq fi (strcat (substr fi 1 (- (strlen fi) 5)) ind ".dwg")) (if (findfile fi) (command "_.xref" "_p" (cdr (assoc 2 bl)) fi) ) ) ) ) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (setq bl (tblnext "block" t)) (routine) (while (setq bl (tblnext "block")) (routine) ) (setvar "cmdecho" cmd) (princ) ) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
tyrese69_ Posté(e) le 17 novembre 2004 Auteur Posté(e) le 17 novembre 2004 J'ai cette erreur lors du lancement de xr ! ; erreur: type d'argument incorrect: streamp nil Daniel
Patrick_35 Posté(e) le 17 novembre 2004 Posté(e) le 17 novembre 2004 ah, je suis surpris ?Je viens de reverifier et tout fonctionne à merveilletu passes bien par un load et tu lance la fonction ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
tyrese69_ Posté(e) le 17 novembre 2004 Auteur Posté(e) le 17 novembre 2004 L'erreur existe avec le premier xr.lsp ! Par contre avec le deuxieme ok, maisje tiens au fichier texte car il proviensd'une autre appli developpée en DELPHI !Daniel
Patrick_35 Posté(e) le 17 novembre 2004 Posté(e) le 17 novembre 2004 humm, je pense qu'on ne se comprend pas tout à fait.Peut-tu me donner la composition de ton fichier texte ? Juste une précision. Ton fichier texte doit reprendre le nom, se situer dans le répertoire de ton dessin et comporter l'extension .ini afin que le lisp puisse le lire @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
tyrese69_ Posté(e) le 17 novembre 2004 Auteur Posté(e) le 17 novembre 2004 Pour essayer l'exemple du lisp xrJ'ai crée le fichier "xrefdessin1.ini" dont voici le contenu : 5349EXEPEOBRUN_a Plan nommé xrefDessin1.dwg avec en xref 5349EXEPEOBRUN_a.dwg Dans la réalité un lisp crée celui-ci puisune autre application le modifie fichier de la facons suivante : 5349EXEPEOBRUN_b fichier xref mis à jour . Le lisp xr par exemple devra mettreà jour le lien. Les fichiers eux sont bien tous présent dans le même repertoire pour l'exemple : c:\cachetemp Daniel
Patrick_35 Posté(e) le 19 novembre 2004 Posté(e) le 19 novembre 2004 Salut,Ca devrait correspondre normalement à ton besoin (defun c:xr(/ bl cmd fic) (defun fic() (vl-string-subst "INI" "DWG" (strcat (getvar "dwgprefix") (getvar "dwgname"))) ) (defun routine(/ fi new nom emp che) (if (= (logand (cdr (assoc 70 bl)) 4) 4) (progn (if (setq fi (open (fic) "r")) (progn (setq nom (cdr (assoc 2 bl))) (setq emp (cdr (assoc 1 bl))) (setq che (substr emp 1 (- (strlen emp) (+ (strlen nom) 4)))) (while (setq new (read-line fi)) (if (and (= (strcat che (substr new 1 (1- (strlen new)))) (substr emp 1 (- (strlen emp) 5))) (/= (strcat che new) (substr emp 1 (- (strlen emp) 4)))) (if (findfile (strcat che new ".dwg")) (command "_.xref" "_p" nom (strcat che new ".dwg")) (alert (strcat "Fichier " che new ".dwg introuvable")) ) ) ) (close fi) ) ) ) ) ) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (setq bl (tblnext "block" t)) (routine) (while (setq bl (tblnext "block")) (routine) ) (setvar "cmdecho" cmd) (princ) ) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
mariobrosse Posté(e) le 8 juin 2009 Posté(e) le 8 juin 2009 Bonjour Je n'arrive pas à faire fonctionner le lisp XR.Lorsque je le charge le lisp et que je tape XR, autocad me met le message suivant: C:\Documents and Settings\monnom\Bureau\test"erreur: type d'argument incorrect: streamp nil". Je travaille sur AutoCAD Architecture 2008 (peut-être un début de réponse..)J'ai fait plusieurs test mais j'arrive toujours au même résultat...."erreur: type d'argument incorrect: streamp nil". C'e lisp, si j' arrivais à le faire fonctionner, pourrai me faire gagner pas mal de temps... Si une âme charitable pouvait me venir en aide.. Merci d'avance :cool:
JBS67 Posté(e) le 9 décembre 2009 Posté(e) le 9 décembre 2009 bonjour, Comment rajouter une ligne de code pour dire au lisp d'aller chercher les mise à jour des références a l'indice supérieur vu qu'il ne sont pas tous classé dans le même dossier. Merci de votre aide ;) [Edité le 9/12/2009 par JBS67]
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