Script per associare nuovi layer.

sircame

Utente Junior
Professione: Disegnatore tecnico
Software: Sketchup 20200, Autocad 2020 FULL, Blender, lumion
Regione: Veneto
Ciao a tutti, e' un po' che cerco da solo di venirne a capo, ma invano... allora...
Ho molte CTR scaricate dai vari siti delle regioni, e sono pieni di layer con nomi per conto loro.
Io ho identificato i layer e li ho divisi per categoria (es. 2E5 e' una strada, 1B2 e' un edificio).
Io avendo una CTR vorrei pulirla con uno script.

Devo selezionare tutti i layer che ho identificato precedentemente e metterli nel mio nuovo layer, praticamente gli oggetti nei layer 2E5, 2L12, 3A1 vengono messi nel layer _STRADE, gli oggetti dei layer 1B2, 8J10 vengono messi nel layer _EDIFICI ecc...

Riesco a creare i file, riesco a selezionare tutti gli oggetti di quel layer, quello che non riesco a fare e metterli nel nuovo layer.
Avete qualche idea?
Grazie!
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
(command "_-layer" "_m" _STRADE" "_m" "_EDIFICI" "" ) crei i layer

(setq sel (ssget "X" '((8 . "_2E5,_2L12_,3A1")))) ottieni le entità dei layer
(command "_change" sel "" "_PR" "_LA" "_STRADE" "") cambi il layer alle entità

(setq sel (ssget "X" '((8 . "_1B2,_8J10"))))
(command "_change" sel "" "_PR" "_LA" "_EDIFICI" "")

Bye
 

Betoniera

Utente Junior
Professione: Ingegnere
Software: Autodesk Robot
Regione: Lombardia
Riesco a creare i file, riesco a selezionare tutti gli oggetti di quel layer, quello che non riesco a fare e metterli nel nuovo layer.
Avete qualche idea?

Ho modificato un programma (CL = Cambio Layer) che seleziona gli elementi di un Layer e può Copiarli - Spostarli - Eliminarli - e ora ho aggiunto Cambiare Layer
Funziona così:
1) Lanciare il programma con (load "CL")
2) cliccare su un elemento del Layer da selezionare (per prelevare il nome del layer)
3) Indicare una finestra di selezione (anche parziale): verranno selezionati solo gli elementi di quel Layer
4) Indicare cosa vuoi fare (C-copia M-muovi E-Elimia L-LayerCambia). Nel nostro caso L
5) Indicare il nuovo Layer
Allego sia listato sia il file CL.lsp
Ciao

;SelezioneLayer.lsp - Autocad 2014
;Seleziona tutte le entità di un layer

(if Opz nil (setq Opz "L"))
(setq Opz1 ""
a (strcat "\nSeleziona Layer: C-copia M-muove E-elimina L-LayerCambia <" Opz "> :")
Opz1 (getstring a)
)
(if (/= Opz1 "") (setq Opz (strcase Opz1)))

(setq ss1 (entsel "\nSeleziona Layer tramite un oggetto")
en (car ss1) ;preleva nome entita (la lista ss1 contine anche punto selezione)
ed (entget en) ;preleva dati entita
et (cdr (assoc 8 ed)) ;preleva il layer
)
(prompt "\nSeleziona la zona da selezionare")
(setq ss2 (ssget (list (cons 8 et))))

(if (= Opz "C") (command "copia" ss2 ""))
(if (= Opz "M") (command "sposta" ss2 ""))
(if (= Opz "E") (command "Cancella" ss2 ""))
(if (= Opz "L") (command "CAPROP" ss2 "" "L"))
 

Allegati

sircame

Utente Junior
Professione: Disegnatore tecnico
Software: Sketchup 20200, Autocad 2020 FULL, Blender, lumion
Regione: Veneto
Ciao, grazie per le risposte, prendendo spunto da entrambi i lisp sono risucito a crearne uno ad hoc per me. Fantastico, Mi crea i layer e poi me li sistema come voglio io.
Ora l'ultima fase. Il disegno adesso risulta "sporco" perche' ha layer vecchi, nuovi, accesi, spenti.. ecc...Il risultato finale dovrebbe essere composto solo dai miei layer.
Io pensavo, per avere un risultato il piu' pulito possibile, di bloccare i layer, (magari nella fase in cui li creo), far visualizzare tutti i layer del disegno e cancellare tutto. In questo modo si salvano solo i miei nuovi layer e poi purgare il disegno.
Ora provo a vedere se riesco da solo... altrimenti ritorno qua... he he he, intanto grazie!!!!
 

sircame

Utente Junior
Professione: Disegnatore tecnico
Software: Sketchup 20200, Autocad 2020 FULL, Blender, lumion
Regione: Veneto
Riciao. Ho concluso lo script, alla fine l'ho semplificato ed 'venuto fuori questo, Lo incoollo che magari a qualcuno puó servire se ha delle ctr da pulire.
Solo una cosa non funziona, dato che alcune ctr non hanno i retini negli edifici ho voluto mettere una condizione IF con tblsearch, purtroppoo non funziona. il layer 17A1 esiste, ma la funzione 'come se saltasse questo passaggio. Se tolgo il tblsearch funziona.
Avete qualche idea del perche' ?

Poi... secondo voi si puo' raffinare questo script? (solo mia curiosita')

Grazie 1000

;CREO TUTTI I LAYER E LI BLOCCO
(command "_-layer" "_m" "_STRADE PRINCIPALI" "C" "2" "" "_LO" "_STRADE PRINCIPALI" "")
(command "_-layer" "_m" "_STRADE SECONDARIE" "C" "5" "" "_LO" "_STRADE SECONDARIE" "")
(command "_-layer" "_m" "_FABBRICATI" "C" "1" "" "_LO" "_FABBRICATI" "")
(command "_-layer" "_m" "_TERRENO" "C" "46" "" "_LO" "_TERRENO" "")
(command "_-layer" "_m" "_ACQUA" "C" "140" "" "_LO" "_ACQUA" "")
(command "_-layer" "_m" "_TESTI" "C" "2" "" "_LO" "_TESTI" "")
(command "_-layer" "_m" "_SIMBOLI" "C" "1" "" "_LO" "_SIMBOLI" "")
(command "_-layer" "_m" "_RETINI" "C" "5" "" "_LO" "_RETINI" "")
(command "_-layer" "_SET" "0" "")

;TRASFERIMENTO DEI VECCHI LAYER SUI NUOVI
(setq sel (ssget "X" '((8 . "2E5,2H8"))))
(command "_change" sel "" "_PR" "_LA" "_STRADE PRINCIPALI" "")

(setq sel (ssget "X" '((8 . "2L12,3A1,2J10,2F6,2k11"))))
(command "_change" sel "" "_PR" "_LA" "_STRADE SECONDARIE" "")

(setq sel (ssget "X" '((8 . "1B2,8J10,1D4,1A1,1I9,2M13,1E5,1AB28,1G7,5L12"))))
(command "_change" sel "" "_PR" "_LA" "_FABBRICATI" "")

(setq sel (ssget "X" '((8 . "5A1,3B2,5C3,6H8,22H8A,4E5,5J10,5I9,21I9"))))
(command "_change" sel "" "_PR" "_LA" "_TERRENO" "")

(setq sel (ssget "X" '((8 . "4B2,4D4,4A1"))))
(command "_change" sel "" "_PR" "_LA" "_ACQUA" "")

(setq sel (ssget "X" '((8 . "14G7,14P16,14O15,14R18,14F6,14D4"))))
(command "_change" sel "" "_PR" "_LA" "_TESTI" "")

(setq sel (ssget "X" '((8 . "17E5,1L12,1K11"))))
(command "_change" sel "" "_PR" "_LA" "_SIMBOLI" "")

(if (tblsearch "layer" "17A1")
(setq sel (ssget "X" '((8 . "17A1,17B2,17G7,17AB28,17E5B,17I9"))))
(command "_change" sel "" "_PR" "_LA" "_RETINI" "")
)

;SELEZIONO TUTTO IL DISEGNO ED ELIMINO LA SELEZIONE
(setq sel (ssget "X"))
(command "_erase" "p" "")

;PURGO IL DISEGNO
(command "-purge" "_all" "*" "N")

;SBLOCCO I LAYER PRECEDENTEMENTE BLOCCATI
(command "-layer" "_unlock" "*" "")
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
(if (tblsearch "layer" "17A1")
(progn
(setq sel (ssget "X" '((8 . "17A1,17B2,17G7,17AB28,17E5B,17I9"))))
(command "_change" sel "" "_PR" "_LA" "_RETINI" "")
)
)

;SELEZIONO TUTTO IL DISEGNO ED ELIMINO LA SELEZIONE
(setq sel (ssget "X"))
(command "_erase" "p" "") -> (command "_erase" sel "")
 

sircame

Utente Junior
Professione: Disegnatore tecnico
Software: Sketchup 20200, Autocad 2020 FULL, Blender, lumion
Regione: Veneto
Ecco qua!
Per me lo script funziona bene e sono contento, grazie 1000!!!
Eccolo qua finito.
 

Allegati