Aller au contenu

Messages recommandés

Posté(e)

J'ai un plan qui a en xref des fichiers

 

tyty_a pour indice a

toto_c pour indice c

etc...

 

comment mettre à jour le plan si un des fichiers

deviens tyty_b, sachant que les nouveaux noms

sont disponiblent dans un fichier .txt

 

Daniel

Posté(e)

Salut

Un 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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 fichier

mais avec un noms identique. D'où des problèmes pour suivre

les différents indices !

- l'archi est organisé et envoi des plans indicé dans le noms

d'où tyty_a pour le premier indice du fichier puis b, c etc.

 

Cette seconde méthode à l'inconvénient d'obliger à chaque diffusion

de 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 ces

différentes infos !

 

Je vous tiendrais au courant des résultats.

 

Daniel

Posté(e)

Re bonjour,

 

Patrick_35 peut tu eclairer ma lanterne de novice en vlisp !

 

La commande xr renvoi nil. Comment est ce que j'accede au

autres commandes ?

 

(je suis en 2005 !)

 

Daniel

Posté(e)

Pour Didier

Je 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 autocad

Le 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 xref

Par 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

L'erreur existe avec le premier xr.lsp !

 

Par contre avec le deuxieme ok, mais

je tiens au fichier texte car il proviens

d'une autre appli developpée en DELPHI !

Daniel

 

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Pour essayer l'exemple du lisp xr

J'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 puis

une 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

 

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

  • 4 ans après...
Posté(e)

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:

  • 6 mois après...
Posté(e)

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]

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é