Alessio : [post n° 386301]

numero scheda

Buongiorno a tutti, volevo sapere se qualcuno conosce il sistema corretto per poter inserire nel cartiglio una variabile di sistema che mi permetta di visualizzare l numero di scheda layout corrente e quante sono tutte le schede di layout presenti nel file senza doverle cambiare ogni volta a mano, cosa che risulta fastidiosa quando si aggiungono ulteriori layout al progetto in fase di impaginazione.

grazie a tutti

Alessio
dieva :
1 - Crea un file ACADDOC.LSP con blocco note.

2 - Al suo interno scrivi l'istruzione seguente:
(setq layout_totali(itoa(length(layoutlist))))

3 - Apri adesso il file che contiene il tuo cartiglio aggiungi un Campo Dati (Field) con il comando "campodati".
Seleziona come valore Altro/variabile di sistema/Ctab cioè il nome della variabile che memorizza il nome del Current Tab (il layout corrente).

4 - Edita nuovamente il campo dati appena creato ed aggiungi un carattere separatore (/ - ecc)

5 - aggiungi nel mtesto creato al punto 3 un altro campo dati con valore:
Altro/variabile Lisp/layout_totali

otterrai quindi un testo che conterrà / per esempio "2/5".
Naturalmente una eventuale aggiunta di un nuovo layout necessita che la variabile layout_totali sia ri-inizializzata. Questo avviene solo in fase di apertura del disegno, quindi alla successiva riapertura del file troverai il valore aggiornato.
Alessio :
Grazie mille per la celere risposta, il conteggio dei layout totali funziona perfettamente, ma volevo sapere se c'è la possibilità di richiamare il numero cardinale della scheda, se richiamo il nome sono costretto a rinominare le schede con un numero , che, in caso debba spostare le schede di posizione, dovrei ogni volta rinominare.

Grazie

Alessio
dieva :
fai cosi:

1 - nel file acaddoc.lsp inserisci anche questo codice:

(defun Layorder (/ order)(vl-load-com)
(vlax-for lay (vla-get-layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq order (cons
(list (vla-get-name lay)
(vla-get-taborder lay))
order
)
)
)
(mapcar 'car (Cdr (vl-sort order '(lambda (j k)
(< (cadr j) (cadr k))
)
)
)
)
)
(setq lista(layoutorder) n 1)
(foreach l lista
(setenv l (itoa n))
(setq n(1+ n))
)

2 - cambia il primo campo dati (il punto 3 del precedente messaggio) e metti in "Altro\ espressione diesel \" questa espressione :
$(getenv, $(getvar,"CTAB"))
In caso di aggiunta bisogna ri inizializzare tutto quindi apri e chiudi il file.

;;; Domenico IEVA
;;; www.domenicoieva.com
Alessio :
Domenico ciao, grazie mille per il comando che mi hai scritto ma c'è qualcosa che non funziona nella mia serie di layout, quando inserisco la funzione mi risponde con "----" se inserisco il comando su vlisp mi dice : LAYORDER
; errore: no function definition: LAYOUTORDER
ed anche


_$ $(getenv, $(getvar,"CTAB"))
nil
; errore: no function definition: GETVAR,
_$
ti dico in realtà che pur usando autocad da molti anni non ho mai programmato niente e quindi non riesco a capire cosa mi stia dicendo, devo forse impostare qualcosa nei layout per farglieli leggere in ordine? Aiutoooo

Grazie

Alessio
Alessio :
ok, niente ho trovato il problema.
richiama un "layoutorder" anziché "layorder" ora tutto perfetto.


così corretto
(setq layout_totali(itoa(length(layoutlist))))
(defun Layorder (/ order)(vl-load-com)
(vlax-for lay (vla-get-layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq order (cons
(list (vla-get-name lay)
(vla-get-taborder lay))
order
)
)
)
(mapcar 'car (Cdr (vl-sort order '(lambda (j k)
(< (cadr j) (cadr k))
)
)
)
)
)
(setq lista(layorder) n 1)
(foreach l lista
(setenv l (itoa n))
(setq n(1+ n))
)

Domenico sei un grande!!

grazie ancora

Alessio
dieva :
Prego, sono contento che funzioni.
effettivamente nella fretta avevo scritto male il nome della funzione Layorder...
Ciao
;;; Domenico IEVA
;;; www.domenicoieva.com
Avvisami quando qualcuno risponde
Non mandarmi più avvisi

Se vuoi essere avvisato quando qualcuno interviene in questa discussione, indica un nome e il tuo indirizzo e-mail.