JAMESsirop Posté(e) le 8 avril 2005 Posté(e) le 8 avril 2005 Bonjour,J'aimerais savoir s'il existe un programme permettant d'afficher dans une présentation le chemin complet et le nom des XREF rattachés au fichier. J'utilise un Lisp ( Tampon.lsp) trouvé sur le Net qui me permet d'afficher l'arborescence la date, l'heure, ... du fichier et je le trouve bien pratique. J'aimerais pouvoir le compléter avec l'affichage des Xref.D'avance merci.
tyrese69_ Posté(e) le 8 avril 2005 Posté(e) le 8 avril 2005 En lisp je ne sait pas, mais en dieselil y a les RTEXT des express tools ! Daniel
Patrick_35 Posté(e) le 8 avril 2005 Posté(e) le 8 avril 2005 alut Un truc vite fait dans ce style(setq a (tblnext "block" t)) (setq liste_xref nil) (while a (if (= (logand (cdr (assoc 70 a)) 4) 4) (progn (setq liste_xref (append liste_xref (list (cdr (assoc 1 a))))) (princ (strcat "\n\t\tXref trouvé ---> " (cdr (assoc 1 a)))) ) ) (setq a (tblnext "block")) ) (princ) Nb : une variable liste_xref est créée afin de contenir tous les xref @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
JAMESsirop Posté(e) le 8 avril 2005 Auteur Posté(e) le 8 avril 2005 tyrese69_ : express-tools n'est pas chargé, je verrais pour récupérer le CD LundiPatrick_35 : n'étant pas très fort en Lisp, je voudrais savoir ce que je fais avec tes lignes.En tout cas merci pour votre réactivité.jsirop
Patrick_35 Posté(e) le 11 avril 2005 Posté(e) le 11 avril 2005 Je pensais que tu maîtrisais un peu le lisp. Cette routine est là pour te servir d’exemple, t’indiquer où chercher et c’est à toi de l’adapter en fonction de tes besoins comme d’indiquer les xrefs dans des attributs d’un bloc par exemple. Si tu ne connais pas trop la manière de faire, on veut bien t’aider à condition que tu nous indique ce que tu requières ( pour rependre l’exemple, nom du bloc, étiquette des attributs, etc...) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
JAMESsirop Posté(e) le 12 avril 2005 Auteur Posté(e) le 12 avril 2005 Mes besoins sont les suivants :afficher l'arborescence des XREF chargés dans la ou les présentations du fichier de telle sorte qu'une personne n'ayant que le plan papier puisse retrouver facilement le chemin des xrefs.Ce serait du style : XREF1 : R:\affaire\plans\XREF\nom_XREF1.DWGXREF2 : R:\affaire\plans\XREF\nom_XREF2.DWGXREFn : R:\affaire\plans\XREF\nom_XREFn.DWG Voici le lisp que j'utilise pour afficher le nom du fichier :(defun c:tampon (/ bloc1 echo1 lup1 TouTampon Sub_InsertionBloc Sub_Misajour) (setq echo1 (getvar "cmdecho")) ; svg cmdecho (setvar "cmdecho" 0) ; (setq lup1 (getvar "luprec")) ; svg luprec (setvar "luprec" 6) ; nombre de décimales ;; ====================================================================== ;; La suite de cette fonction se trouve à la fin de fichier ;;------------------------------------------------------------------ (defun Sub_InsertionBloc (/ Question1 AffBoite Echel1 pt1) ;; routine d'insertion du bloc contenant l'attribut (setq Question1 (getvar "attreq")) ; svg attreq (setvar "attreq" 1) ; pour utiliser la valeur par défaut de l'attribut (setq AffBoite (getvar "attdia")) ; svg attdia (setvar "attdia" 1) ; pour interdire affichage boîte de dialogue ; d'insertion des attributs (setq Echel1 (getvar "dimscale")) ; facteur d'échelle global (setq pt1 (getpoint "\nPoint d'insertion du tampon : ")) (if (= pt1 nil) (exit) ) ;; 'pause' dans la ligne suivante permet de choisir l'angle d'insertion. Vous pouvez ;; remplacer par 0 pour mettre le bloc toujours horizontal ou 90 pour vertical (command "_insert" "$tampon$" pt1 Echel1 Echel1 pause) (setvar "attreq" Question1) ; restauration valeur attreq avant programme (setvar "attdia" AffBoite) ; restauration valeur attdia avant programme (princ) ) (defun Sub_Misajour (/ Mois Jour Annee Texte1 Chemin LgNomDessin NomDessin NomUser NbTampon Cpt1 EntTamp Ent_dansBloc NomEnt NomAtt NewAtt ChgAtt ) (setq NomDessin (getvar "dwgname") ; obtention du nom du dessin LgNomDessin (strlen NomDessin) ; obtention longueur du nom du dessin Chemin (getvar "dwgprefix") ; obtention chemin du répertoire de dessin ) (if (<= LgNomDessin 80) ; si la longueur du nom est inférieure à 79 (setq NomDessin (strcat Chemin NomDessin)) ; on ajoute le chemin ) (setq Mois (substr (rtos (getvar "cdate") 2) 5 2) Jour (substr (rtos (getvar "cdate") 2) 7 2) Annee (substr (rtos (getvar "cdate") 2) 3 2) Heure (substr (rtos (getvar "cdate") 2) 10 2) Minute (substr (rtos (getvar "cdate") 2) 12 2) NomUser (getvar "loginname") ; obtention du nom d'utilisateur ) (if (= "") ; s'il est vide, on le demande (setq NomUser (getstring "\nNom dessinateur/Entreprise : ")) ) ;; La ligne suivante donne la ligne qui sera affichée. Vous pouvez supprimez des infos. (setq Texte1 (strcat NomDessin " " NomUser " " Jour "\\" Mois "\\" Annee " " Heure ":" Minute)) ;; recherche de tous les blocs $tampon$ du dessin (setq TouTampon (ssget "X" (cons (cons 410 (getvar "CTAB"))'((2 . "$tampon$")))) NbTampon (sslength TouTampon) ; nbre de blocs $tampon$ dans le dessin Cpt1 0 ; drapeau compteur de blocs $Tampon$) ) (repeat NbTampon ; tant qu'il y a des $tampon$ ;; retourne dans EntTamp la liste des données du numéro Cpt1 de TouTampon (setq EntTamp (entget (ssname TouTampon Cpt1)) Cpt1 (+ Cpt1 1) ; incrémente le compteur de blocs $tampon$ ) ; si l'entité est un bloc (if (= (cdr (assoc 0 EntTamp)) "INSERT") (progn (setq Ent_dansBloc 1) ; Drapeau attribut (while Ent_dansBloc ; tant qu'il y a des entités dans le bloc ;; Nom de l'entité suivante dans le bloc (setq NomEnt (entget (entnext (cdr (assoc -1 EntTamp))))) ;; si cette entité est un attribut (if (= (cdr (assoc 0 NomEnt)) "ATTRIB") (progn ;; si le nom de l'étiquette de l'attribut est "DATE_TAMPON" (if (= (cdr (assoc 2 NomEnt)) "DATE_TAMPON") (progn (setq NomAtt (assoc 1 NomEnt) ; valeur de l'attribut (associée à 1) NewAtt (cons 1 Texte1) ; construction paire pointée) ChgAtt (subst NewAtt NomAtt NomEnt) ; remplace les valeurs ) ;; modifie les données de l'attribut (entmod ChgAtt) ) ; progn ) ; if ) ; progn ) ; if ;; si on atteint la fin du bloc (if (= (cdr (assoc 0 NomEnt)) "SEQEND") (setq Ent_dansBloc nil) ) (setq EntTamp NomEnt) ) ; retour à while ) ; progn ) ; if retour s'il y a encore des blocs ) ; repeat (princ) (setvar "cmdecho" echo1) (setvar "luprec" lup1) ; nombre de décimales (command "_regen") (princ) ) ;; gestion des erreurs (defun BiE_Error (*msg) (if (and (/= *msg "Fonction annulée") (/= *msg "Fonction annul‚e") (/= *msg "Function cancelled") ) (princ (strcat "\nErreur : " *msg)) (princ) ) (setq *error* $OldError) (setvar "cmdecho" echo1) (setvar "luprec" lup1) ; nombre de décimales (princ) ) ;;--------------Suite fonction C:TAMPON ----;;------------------------------------------- ;; Pour gestion des erreurs (setq $OldError *error* *error* BiE_Error) ;; Est ce que le bloc $tampon$ a déjà été inséré dans le dessin ? (setq bloc1 (tblsearch "block" "$tampon$")) (cond ((= bloc1 nil) (Sub_InsertionBloc) ; si non aller à Sub_InsertionBloc (Sub_Misajour) ; puis à Sub_Misajour ) ((= (ssget "X" '((2 . "$tampon$"))) nil) ;; si le bloc existe dans la base de données du dessin mais a été effacé (Sub_InsertionBloc) (Sub_Misajour) ) ((/= bloc1 nil) (Sub_Misajour)) ; si le bloc existe, aller à Sub_Misajour ) ;; Force l'affichage de la boite de dialogue de la commande suivante (traceur) (initdia) ;; la ligne suivante lance la commande traceur. Vous pouvez la supprimer sans problème. (princ))D'avance merci.James
Patrick_35 Posté(e) le 12 avril 2005 Posté(e) le 12 avril 2005 Je regarde ça @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
JAMESsirop Posté(e) le 12 avril 2005 Auteur Posté(e) le 12 avril 2005 Comme je ne suis pas toujours connecté et si tu as des questions, tu peux m'écrire à l'adresse suivante : j.sirop@sotec-ingenierie.frMerci
bonuscad Posté(e) le 12 avril 2005 Posté(e) le 12 avril 2005 En complétant le lisp de Patrick_35, on pourrait déjà faire ce qui suit: (defun c:id_xref ( / a liste_xref) (setq a (tblnext "block" t)) (setq liste_xref nil) (while a (if (= (logand (cdr (assoc 70 a)) 4) 4) (progn (setq liste_xref (append liste_xref (list (cdr (assoc 1 a))))) (princ (strcat "\n\t\tXref trouvé ---> " (cdr (assoc 1 a)))) ) ) (setq a (tblnext "block")) ) (if liste_xref (progn (setvar "TEXTEVAL" 1) (command "_.-text" pause pause pause) (foreach n liste_xref (command (eval n) "_.-text" "")) (command "") (setvar "TEXTEVAL" 0) ) ) (princ) ) Après il serait peut être interessant, si on veut sophistiquer, d'en faire un groupe nommé pour pouvoir le remanipuler lors de session ultérieure et le mettre à jour automatiquement. Dans l'état; il faut effacer et relancer la routine pour tenir à jour, c'est déjà pas mal! Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 12 avril 2005 Posté(e) le 12 avril 2005 BonusCad te propose une solution, et comme j’ai travaillé dessus (sans vouloir faire de concurrence ;) ) , voici la mienne Soit à partir de ton bloc $tampon$, tu ajoutes des attributs avec comme étiquette CHEMIN_XREF1, CHEMIN_XREF2, CHEMIN_XREF3, etc… depuis un autre bloc, mais toujours avec le même principe pour les étiquettesEn surligné, je t’ai indiqué où modifier les noms Tu peux ajouter ce lisp à la suite du tien @+ (defun c:cxref(/ bloc_xref boucle ent fin_ent js liste_xref nom_xref texte_xref systime_xref) [surligneur] (setq nom_bloc "$TAMPON$") ; nom du bloc contenant les attributs [/surligneur] [surligneur] (setq nom_xref "DATE_TAMPON") ; nom de l'étiquette pour le chemin des xrefs [/surligneur] (setq js (ssget "x" (list (cons 0 "insert") (cons 2 nom_bloc)))) (if js (progn (setq bloc_xref (tblnext "block" t)) (while bloc_xref (if (= (logand (cdr (assoc 70 bloc_xref)) 4) 4) (progn (setq texte_xref (cdr (assoc 1 bloc_xref))) (if (not (vl-string-search ".DWG" (strcase texte_xref))) (setq texte_xref (findfile (strcat texte_xref ".dwg"))) (setq texte_xref (findfile texte_xref)) ) (setq systime_xref (vl-file-systime texte_xref)) (setq texte_xref (strcat texte_xref " " (itoa (nth 2 systime_xref)) "\\" (itoa (nth 1 systime_xref)) "\\" (itoa (nth 0 systime_xref)) " " (itoa (nth 4 systime_xref)) ":" (itoa (nth 5 systime_xref)))) (setq liste_xref (append liste_xref (list texte_xref))) ) ) (setq bloc_xref (tblnext "block")) ) (setq boucle 0) (while (ssname js boucle) (setq ent (ssname js boucle)) (while ent (setq ent (entget ent)) (if (and (= (cdr (assoc 0 ent)) "ATTRIB") (vl-string-search (strcase nom_xref) (strcase (cdr (assoc 2 ent))))) (progn (setq fin_ent (vl-string-subst "" (strcase nom_xref) (strcase (cdr (assoc 2 ent))))) (if fin_ent (if (not (zerop (atoi fin_ent))) (if (nth (1- (atoi fin_ent)) liste_xref) (progn (setq ent (subst (cons 1 (nth (1- (atoi fin_ent)) liste_xref)) (assoc 1 ent) ent)) (entmod ent) (entupd (cdr (assoc -1 ent))) ) ) ) ) ) ) (setq ent (entnext (cdr (assoc -1 ent)))) ) (setq boucle (1+ boucle)) ) ) (princ (strcat "\nLe bloc " nom_bloc " n'est pas dans le dessin")) ) (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
JAMESsirop Posté(e) le 13 avril 2005 Auteur Posté(e) le 13 avril 2005 Merci à vous je m'en vais tester tout çà et je vous tiens au courant.
bonuscad Posté(e) le 13 avril 2005 Posté(e) le 13 avril 2005 Patrick_35 Je ne vois aucune concurrence :) Il est toujours bon de voir ce que peuvent faire les autres, la manière dont ils abordent le problème. Ca ne peut être qu'enrichissant et formateur. Je m'interesse a ce sujet de renseigner le chemin des Xrefs.Je ne sais pas encore si je vais compléter mon cartourche automatique ou faire une fonction indépendante. (fonction similaire à tampon de jsirop avec en plus quelques renseignements complémentaires): *date de création, de modification, de tracage*nom du fichier*nom du dossier*nom de la présentation*auteur*n° classement*échelle (qui est liée à une fenêtre de présentation pour le calcul de l'échelle, dans le cas d'insertion dans l'espace papier)*la version d'autocad*La version de windows Si ça interesse quelqu'un, je peux mettre le code en ligne, dans le forum approprié, de ce cartouche automatique (assez volumineux LSP +DCL) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Eric Posté(e) le 13 avril 2005 Posté(e) le 13 avril 2005 Bonjour Sit u as AutoCAD 2005 tu peux utiliser simplement les textes avec champs. C'est simple et t'as plein d'infos. A plus Eric Eric est formateur, revendeur sur AutoCAD LT, DraftSight, ZWCAD, SketchUp et PDF2CAD
bonuscad Posté(e) le 13 avril 2005 Posté(e) le 13 avril 2005 Je n'ai pas encore la 2005 :mad: Pour l'instant toujours en 2002 Mai tu as raison de me rappeler ces nouvelles fonctionnalités, je crois que je vais abandonner l'évolution de mon cartouche (on va pas perdre du temps pour rien ;) ) car le saut ne saurait tarder... peut être pour la 2006?? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 13 avril 2005 Posté(e) le 13 avril 2005 BonusCadC’est juste une boutade, plus on est de fous, plus on rit @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
kallain Posté(e) le 13 avril 2005 Posté(e) le 13 avril 2005 pourquoi faire compliqué ?? si tu as otocad 2004 En lisp je ne sait pas, mais en dieselil y a les RTEXT des express tools ! Daniel C'est pas pour dénigrer les pros du lisp, bien au contraire :hallucine: mais quand je vois (((((( ou )))))ou encore ) ) ) ) ça me décourage.
Patrick_35 Posté(e) le 13 avril 2005 Posté(e) le 13 avril 2005 mais quand je vois (((((( ou )))))ou encore)))) ça me décourage.Ce n'est qu'une question d'habitude, après on n'y pense même plus il y a les RTEXT des express tools ! Et oui, exact, et en diesel avec la fonction (xrefs,3) par exemple. Comme quoi, on ne pense pas à tout..Pourquoi faire simple quand.... ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
JAMESsirop Posté(e) le 25 avril 2005 Auteur Posté(e) le 25 avril 2005 Bonjour à tous,Etant parti 1 semaine en vacances, je découvre que le sujet intéresse du monde.Patrick_35 : comme tu as été le premier à t'intéresser au sujet et à me proposer une solution, j'ai intégré ton lisp à la suite du mien et j'ai rajouté dans mon bloc des étiquettes XREF. Quant j'essaye sur une présentation ou le bloc n'a pas été inséré, j'obtiens ce message :Erreur : type d'argument incorrect: lselsetp nilPar contre dans une présentation ou le bloc était déjà inséré, il ne se passe rien si ce n'est qu'il m'affiche comme avant le nom et l'arborescence du fichier.Je vois les points d'insertion des étiquettes situés sous le nom du fichier.Je continue à essayer de comprendre.@+
Patrick_35 Posté(e) le 25 avril 2005 Posté(e) le 25 avril 2005 c'est juste un complément par rapport à ton lispDans ton bloc $TAMPON$, il faut lui rajouter des attributs nommés par exemple CHEMIN1,CHEMIN2,etc... et à la place de DATE_TAMPON dans la variable xref_nom indique que les attributs se nomment CHEMIN (sans l'incrément) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
JAMESsirop Posté(e) le 25 avril 2005 Auteur Posté(e) le 25 avril 2005 Il me semble que c'est ce que j'ai fait:(setq nom_xref " [surligneur] CHEMIN_XREF[/surligneur]") ; nom de l'étiquette pour le chemin des xrefs.Mon bloc $tampon$.dwg comporte des attributs dont le nom des étiquettes est DATE_TAMPON, CHEMIN_XREF1, CHEMIN_XREF2, ....Quand je réinsère mon bloc celui me propose d'entrer des valeurs pour mes différents attributs. Je ne rentre rien à ce moment.Quant je tape tampon, je peux indiquer mon nom et ma société mais il n'insère pas le chemin des xref.Est-ce que normalement cela doit se faire automatiquement ou j'ai loupé une opération ?Le type d'insertion des xref a-t'il une importance ? ( superposition ou attachement, avec ou sans le chemin d'accès ).Je précise aussi que j'ai rechargé tampon.lsp.Désolé si je parais être long à comprendre. En tout cas merci de rester à mon écoute.@+
Patrick_35 Posté(e) le 25 avril 2005 Posté(e) le 25 avril 2005 Ah oui, le bloc est redéfini (graphiquement), mais pas ses attributs.Il faut donc, soit effacer le bloc $Tampon$ puis purger le dessin afin qu'il disparaisse complètement puis le réinsérer et ça devrait fonctionnerOu utiliser la commande battman des express tolls afin de synchroniser les attributs avec le blocMais, autrement, la démarche est bonne (ps: evite l'espace devant " CHEMIN_XREF") @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
JAMESsirop Posté(e) le 25 avril 2005 Auteur Posté(e) le 25 avril 2005 L'espace est apparu au surlignage dans la réponse.J'ai essayé à partir d'un fichier vierge.Résultat des courses : idem que précédement le chemin des XREF n'apparaît pas.Je continue mes recherches pour comprendre.
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