Newsgroup: it.comp.software.cad
Titolo: aiuto per file lisp (un po' lungo, ma penso semplice per voi...)

Vorrei (se ci riesco) ad organizzare i progetti strutturali in questo modo:
1-tutte le piante su un unico file
2-tutti gli elementi sul piano 1 hanno prefisso "1-" cioè
si chiamano 1-pilastri,1-solaio così ricorsivamente per tutti i piani.
Mi manca una routines che copia tutti gli oggetti sui layer "1-....."
sui layer "2-......." layer per layer. Ho cominciato a sviluppare il
mio lisp ma mi sono bloccato su due punti:
il primo : non riesco a selezionare tutti gli oggetti su un determinato 
layer mi da' un errore su SSGET (vedi listato sottostante)
secondo (non indispensabile): sono parecchi i layer da copiare 
(muri,pil,pil_txt,quote,quote1.....) vorrei fare un ciclo con la lista 
dei layer e che il lisp mi prenda l'ennesima desinenza e la copi sul 
layer di destinazione
;=======================================
(defun c:clona-layer ()
(setvar "cmdecho" 0 )
(setq layer1 (getstring "piano origine ? "))
(setq layer2 (getstring "piano destinazione ? "))
;copio i pilastri
(setq layer3 (strcat layer1 "-" "pilastri"))
(setq layer4 (strcat layer2 "-" "pilastri"))
(setq ss1 (ssget "X" '((8. layer3))))
;            ^^^^^^^^^^^^^^^^^^^^^^^^^  <===== problema
(command "_copy" "_p" "0,0" "0,0" "")
(command "_chprop" ss1 "" "_LA" layer4 "")
(setvar "cmdecho" 1 )
);defun
;=======================================
grazie a tutti

 si chiamano 1-pilastri,1-solaio cosě ricorsivamente per tutti i piani.


(defun C:Clona-Layer ( / layer1 layer2 layer3 layer4 ss1)
  (setvar "cmdecho" 0)
  (setq
    layer1 (getstring "\nPiano origine?: ")
    layer2 (getstring "\nPiano destinazione?: ")
  )
  (foreach ForElm '("muri" "pil" "pil_txt" "quote")
    (setq
      layer3 (strcat layer1 "-" ForElm)
      layer4 (strcat layer2 "-" ForElm)
    )
    (if (setq ss1 (ssget "_X" (list (cons 8 layer3))))
      (command
        "_.LAYER"  "_MAKE" layer4 "" ;se non esiste
        "_.COPY"   ss1 "" "_NONE" "0,0" "_NONE" "0,0"
        "_.CHPROP" ss1 "" "_LA" layer4 ""
      )
    )
  )
; (setvar "cmdecho" 1 ) ;puoi lasciare su 0
)
-- 
----------------------------------------------------------
Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
Per AutoCAD:
- Elaborazione dati from/to Excel
- Librerie manufatti in assonometria
- Travi 2D: disegno automatico travi in C.A.
- Autolayers: gestione automatica dei layers
- Elaborazioni e stampe multiple e automatiche
- Parametrico 2D, Viterie 2D/3D, Esplosi 2D/3D
- AutoGroups: gestione automatica gruppi di layers
- SetUp del disegno con gestione automatica DimStyles
- Conversione automatica files Inventor a DWG e viceversa
  anche senza avere Inventor installato
- ...  
----------------------------------------------------------

 
grazie a tutti

La soluzione migliore, secondo me, è quella di NON copiare oggetti
che sono comuni ai vari piani e di gestire le comunanze tramite
un "Gruppo di Layers" sempre visibile, cioè comune.
Esempio:
Layers comuni:
Com_Muri Com_Pilastri Com_Text_Pilastri Com_Quote
Layers Piano 1:
Pn1_Muri Pn1_Pilastri Pn1_Text_Pilastri Pn1_Quote
Layers Piano X:
PnX_Muri PnX_Pilastri PnX_Text_Pilastri PnX_Quote
...
Ad esempio:
- sul Layer Com_Muri andranno disegnati gli oggetti
  sempre visibili (realativi ai Muri)
- mentre sul Layer Pn1_Muri andranno disegnati gli
  oggetti (realativi ai Muri) visibili solo quando si
  stà lavorando sul Piano 1
Creare quindi una macro (o, meglio, una funzione Lisp) che
corrisponde ad un pulsante chiamato ad esempio "Piano 1"
e che:
- disattiva tutti i Layers
- attiva i Layers con prefisso "Pn1_"
- attiva i Layers con prefisso "Com_"
- rende corrente il Layer più frequentemente usato del
  gruppo corrente (ad esempio "Pn1_Muri")
Per ogni piano occorre creare il pulsante di attivazione
relativo, si può anche crere un pulsante generico che
chiede il nome del piano da attivare tramite riga di comando
o dialogo.
--
Il programma "AutoLayers" fa tutto questo e qualcosa in più:
- gestendo comunanze incrociate (es. oggetti visibili in Gruppi
  di Layers specifici)
- possibilità di cambiare colore e tipolinea ad esempio:
  attivando il Gruppo di Layer relativo al Piano 5 posso
  vedere alcuni oggetti del Piano 3 con colore diverso e
  tipolinea tratteggiata
- attivazione e creazione automatica dei Layers secondo specifiche
  personalizzabili
- attivazione automatica del Layer a seconda del tipo di entità
  esempio per Tratteggi, Punti, Quote, Testi ecc.
- ecc.