Aller au contenu

Nomenclature des XREFS


Messages recommandés

Posté(e)

Bonjour à tous,

Alors voila mon probème est que sur je travaille sur un chantier ou les indices change souvent, alors j'aimerais savoir si il est possible de creer un tableau qui listerais mes Xrefs part nom?

 

Bonne journée a tous.

Posté(e)

Sinon, il y a ce lisp qui crée un tableau dans autocad:

 

;

; TabXref : dessine un tableau contenant les xrefs utilisés dans le dessin

;

(defun rang (el lst / sl)

;

; retourne le rang d'un élément dans une liste

; (ou nil s'il n'en fait pas partie)

;

(setq sl (member el lst))

(if sl

(- (length lst) (length sl))

nil

)

)

(defun ansi2dos (s / s2 i l c avant apres r)

;

; retourne la chaine s traduite d'ANSI en ASCII

;

(setq avant '("à" "â" "ç" "è" "é" "ê" "ë" "î" "ï" "ô" "ö" "ù" "û" "ü"))

(setq apres '("…" "ƒ" "‡" "Š" "‚" "ˆ" "‰" "Œ" "‹" "“" "”" "—" "–" ""))

(setq i 1 l (strlen s) s2 "")

(while (<= i l)

(setq c (substr s i 1))

(setq s2 (strcat s2

(if (setq r (rang c avant))

(nth r apres)

c

)

))

(setq i (1+ i))

)

s2

)

(defun right (s n)

;

; retourne les n caractères à droite de s

;

(if (>= n (strlen s))

s

(substr s (+ (- (strlen s) n) 1))

)

)

(defun shell_sync (comdos message / nombat nomtmp fic)

;

; exécution synchronisée de la commande dos comdos

; (Autocad attend qu'elle soit terminée pour poursuivre)

;

(setq nombat (strcat reptmp "shell.bat"))

(setq nomtmp (strcat reptmp "shell.tmp"))

(setq fic (open nomtmp "w"))

(princ "*" fic)

(close fic)

(setq fic (open nombat "w"))

(if (/= message "")

(write-line (strcat "@echo " message) fic)

)

(write-line (strcat "@call " comdos) fic)

(write-line (strcat "@del \"" nomtmp "\"") fic)

(close fic)

(command "sh" nombat)

(while (findfile nomtmp) T) ; le temps que le batch s'exécute...

)

 

(defun remove_file(fic)

;

; effacement du fichier fic

; Nota: il serait interessant d'écrire cette fonction en ADS pour éviter

; l'apparition furtive d'une fenêtre DOS (voir cplotlib.c).

;

(if (findfile fic)

(if (= (substr (getvar "acadver") 1 2) "14")(progn

(command "sh" (strcat "del \"" fic "\""))

; comme c'est une commande DOS, on attend que la destruction

; aie effectivement eu lieu:

(while (findfile fic) T)

) ; v12 et 13:

(command "_files" "3" fic "" "")

)

)

)

 

(defun oter_chemin (n / i)

;

; ote l'éventuel chemin au nom de fichier n

;

(setq i (strlen n))

(while (and

(> i 0)

(/= (substr n i 1) "\\")

(/= (substr n i 1) ":")

)(setq i (1- i)))

(if (> i 0)

(substr n (1+ i))

n

)

)

(defun strlsp(ch sep / ls l seps f)

;

; transforme ch en liste en considérant comme séparateur l'espace, la tabulation ou le caractère sep

;

(setq ls nil)

(setq l ch)

(setq seps (strcat " ,\t," sep))

; on saute les premiers blancs...

(while (wcmatch (substr l 1 1) seps)

(setq l (substr l 2))

)

(while (/= l "")

(setq f 1)

(while (not (wcmatch (substr l f 1) (strcat "," seps)))

(setq f (1+ f))

)

(setq ls (cons (substr l 1 (1- f)) ls))

(while (wcmatch (substr l f 1) seps)

(setq f (1+ f))

)

(setq l (substr l f))

)

(reverse ls)

)

(defun oter (ele lst / lstnew)

;

; ote l'élément ele de la liste lst

;

(setq lstnew nil)

(while lst

(if (/= (car lst) ele)

(setq lstnew (cons (car lst) lstnew))

)

(setq lst (cdr lst))

)

(reverse lstnew)

)

(defun rtos2 (n d / s)

;

; transformation de n en texte avec exactement d décimales

;

(setq s (rtos (+ (atof (rtos n 2 d))(expt 10. (- (+ d 1)))) 2 (+ d 1)))

(substr s 1 (- (strlen s) 1))

)

(defun C:TabXref (/ ech l mm ud xref lx nx xref x y h fic nom date heure taille)

;(defun C:TabXref ()

 

(setvar "CMDECHO" 0)

 

; recherche des xref

(setq lx nil)

(setq xref (tblnext "BLOCK" T))

(while xref

(if (= (logand (cdr (assoc 70 xref)) 4) 4) (progn ; il s'agit bien d'un xref et non d'un bloc

(setq fic (cdr (assoc 1 xref)))

(if (/= (strcase (right fic 4)) ".DWG") (setq fic (strcat fic ".dwg")))

(setq lx (cons fic lx))

))

(setq xref (tblnext "BLOCK"))

)

 

(if (not lx)

 

(prompt "\nLe dessin ne comporte pas de références externes...")

 

(progn

 

(setq lx (reverse lx))

 

(setq ech nil)

(while (not ech)

(initget 1)

(setq ech (getstring "\nEchelle de sortie (mm tracé=unités dessin) : "))

(setq l (strlsp ech "="))

(if (= (length l) 2)(progn

(setq mm (atof (car l)))

(setq ud (atof (cadr l)))

(if (and (> mm 0)(> ud 0))

(setq ech (/ ud mm))

(setq ech nil)

)

)

(setq ech nil)

)

(if (not ech)

(prompt "\néchelle incorrecte...")

)

)

 

; lecture du répertoire temporaire

(setq reptmp (getenv "TEMP"))

(if (not reptmp)(setq reptmp (getenv "TMP")))

(if reptmp

(if (not (wcmatch (substr reptmp (strlen reptmp)) ":,\\"))(setq reptmp (strcat reptmp "\\")))

; sinon

(setq reptmp "C:\\")

)

 

; création du calque "SE-T-DZ" en vert s'il nexiste pas

(if (not (tblsearch "LAYER" "SE-T-XREFS"))

(command "_LAYER" "_N" "SE-T-XREFS" "_C" "_GREEN" "SE-T-XREFS" "")

)

 

; création du style "SWIS721LTEXBT" s'il nexiste pas

(if (not (tblsearch "STYLE" "SWIS721LTEXBT"))

(command "_STYLE" "SWIS721LTEXBT" "Swissel.ttf" 0 1 0 "_n" "_n")

)

 

(entmake '((0 . "BLOCK")(2 . "$TabXref$")(70 . 0)(10 0 0 0)))

(setq x (* 85 ech))

(entmake (list '(0 . "LINE") '(8 . "SE-T-XREFS") '(62 . 7) '(10 0 0 0) (list 11 x 0 0)))

(setq y (* -7 ech))

(entmake (list '(0 . "LINE") '(8 . "SE-T-XREFS") '(62 . 7) (list 10 0 y 0) (list 11 x y 0)))

(setq y (* (- -10 (* (length lx) 5)) ech))

(entmake (list '(0 . "LINE") '(8 . "SE-T-XREFS") '(62 . 7) (list 10 0 y 0) (list 11 x y 0)))

(entmake (list '(0 . "LINE") '(8 . "SE-T-XREFS") '(62 . 7) '(10 0 0 0) (list 11 0 y 0)))

(entmake (list '(0 . "LINE") '(8 . "SE-T-XREFS") '(62 . 7) (list 10 x 0 0) (list 11 x y 0)))

(setq x (* 19 ech) y (* -5 ech))

(entmake (list

'(0 . "TEXT")

'(8 . "SE-T-XREFS")

(list 10 x y 0)

(cons 40 (* 3 ech))

'(1 . "* FICHIERS UTILISES :")

'(7 . "SWIS721LTEXBT")

))

(setq h (* 2 ech))

(setq y (* -12 ech))

(setq tmp (strcat reptmp "TabXref.tmp"))

(while (setq xref (car lx))

(setq nom (oter_chemin xref))

(if (not (setq fic (findfile xref)))

(setq fic (findfile nom))

)

(if fic (progn

(shell_sync (strcat "dir \"" (ansi2dos fic) "\" /-C>\"" tmp "\"") "")

(setq fic (open tmp "r"))

(while (wcmatch (substr (setq l (read-line fic)) 1 1) " ,R,") T)

(close fic)

(setq l (strlsp l " "))

(setq date (car l))

(if (= (strlen date) 10)(setq date (strcat (substr date 1 6)(substr date 9 2))))

(setq heure (cadr l))

(setq taille (strcat (rtos (/ (atof (caddr l)) 1024) 2 0) "Ko"))

)

(setq date "??/??/??" heure "??:??" taille "?Ko")

)

(setq x (* 3.3 ech))

(entmake (list

'(0 . "TEXT")

'(8 . "SE-T-XREFS")

(list 10 x y 0)

(cons 40 h)

(cons 1 nom)

'(7 . "SWIS721LTEXBT")

))

(setq x (* 37 ech))

(entmake (list

'(0 . "TEXT")

'(8 . "SE-T-XREFS")

(list 10 x y 0)

(cons 40 h)

(cons 1 date)

'(7 . "SWIS721LTEXBT")

))

(setq x (* 55 ech))

(entmake (list

'(0 . "TEXT")

'(8 . "SE-T-XREFS")

(list 10 x y 0)

(cons 40 h)

(cons 1 heure)

'(7 . "SWIS721LTEXBT")

))

(setq x (* (- 81 (* 1.8 (strlen taille))) ech))

(entmake (list

'(0 . "TEXT")

'(8 . "SE-T-XREFS")

(list 10 x y 0)

(cons 40 h)

(cons 1 taille)

'(7 . "SWIS721LTEXBT")

))

(setq lx (cdr lx))

(setq y (- y (* 5 ech)))

)

(entmake '((0 . "ENDBLK")))

(prompt "\nPoint d'insertion : ")

(command "_insert" "$TabXref$" pause "1" "1" "0")

(terpri)

(command "_explode" "_l")

(command "_purge" "_bl" "$TabXref$" "_n")

(setvar "CMDECHO" 1)

))

(princ)

)

 

Et AutoCAD se tourna vers le dessinateur à bout de nerfs, et lui dit:

"ERREUR FATALE: Unhandled Access Violation Reading 0x5e43dff0 Exception at 5e43dff0h"

Ce à quoi le dessinateur répondit:

"Ca tombe bien je vais en profiter pour écouter un peu de rock qui décrasse les esgourdes"

http://www.facebook.com/pages/Ex-Voto/206836112741129?sk=wall

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é