Newsgroup: it.comp.software.cad
Titolo: [LISP] primi problemi con i primi semplici lisp.....

grazie a tutti voi e a manuali trovati sul sito di emicad e di roberto rossi
sto iniziando a scrivere i miei primissimi lisp...............
il problema è che al contrario di word ed excel mi sembra che in autocad non
sia possibile iniziare prendendo spunto dalla registrazione di macro,
vero???Tutto ciò rende i primi passi molti più duri...............
Io dovrei fare due cose:
- selezionare tutti gli oggetti di un determinato layer tranne le linee ed i
cerchi. Ho provato ad usare gli operatori di selezione and e not, ma credo
di fare errori di sintassi
- un lisp che capisce quanti layer ci sono in un disegno e mi stampa a video
quante entità ci sono su ogni layer, tipo "nel layer xxx ci sono yyy
oggetti, nel layer kkk ci sono zzz oggetti..........
mi potete aiutare?

 wrote in
news:rAkwc.93567$
Qc.36...@twister1.libero.it
: 

Ciao.
Hai ragione. In AutoCAD non esiste il registratore di Macro! Questa 
funzione la puoi invece trovare in IntelliCAD, che comunque produce 
semplici script e non programmi lisp.
Per quanto riguarda il resto,ho buttato giù 4 righe che fanno ciò che 
chiedi, prova a controllare, credo funzionino correttamente :
;questa funzione ritorna il gruppo di selezione contenente
;tutti gli oggetti del layer 'TEST' esclusi cerchi e linee
(defun get_TestNoCircleNoLine ( / )
(setq gruppo (ssget "X" '((8 . "TEST") 
                          (-4 . "<NOT")
                            (-4 . "<OR")
                              (0 . "CIRCLE")
                              (0 . "LINE")
                            (-4 . "OR>")
                          (-4 . "NOT>")
                         )
            )
)
);enddef
;questa funzione ritorna una lista contenente l'elenco dei layer
(defun get_layerList ( / elemento return flag)
	(setq flag t)
  (while (setq elemento (tblnext "LAYER" flag))
    (setq return (cons (cdr (assoc 2 elemento)) return))
    (setq flag nil)
	)
return
);enddef
;questa funzione stampa a video il numero di entità per ogni layer
(defun print_nEntLay ( / quantita layer layers gruppo)
(setq layers (get_layerList))
(foreach layer layers
  (setq gruppo (ssget "X" (list (cons 8 layer))))
  (if gruppo
  	(setq quantita (sslength gruppo))
    (setq quantita 0)
  );endif
  (princ (strcat "\nSul layer " layer " ci sono " (itoa quantita) " 
oggetti."))
);endfor
 
);enddef
Ciao.
Roberto Rossi
Web   : 
http://rsoftware.altervista.org

 );enddef
Questa funzione devo ancora studiarmela un pò, cmq funziona, alla fine però
mi stampa il contenuto della riga di princ, come si può eliminare tale
errore?
Ho notato che tu non usi mai defun nel modo defun c:nomecomando , come mai?
io ho cambiato invece in questo modo le tue funzioni, anche perchè se no non
riesco ad avviarle...........come si fa?
grazie mille ancora :)

 
Prego.


Hai ragione. In AutoCAD non esiste il registratore di Macro! 
E' in wishlist per AutoCAD 2006... su mia specifica richiesta c'è
stata una folta discussione tra tutti i beta tester e gli
sivluppatori.
Attendere, prego!
Saluti, Aniello
-- 
Aniello Annunziata
Content Director Manager
www.cadlandia.com
aniello.a...@cadlandia.com
Per rispondermi in privato, togli NOGARBAGE dall'indirizzo

 (tranne i solidi).
rigurado a questa affermazione ho aperto un nuovo thread sul ng, per dei
chiarimenti, spero non ti dispiaccia, ma in questo modo magari intervengono
anche altri.
ho finito di leggere il tuo manuale di lisp....spero di ricordarmi almeno
qualcosa :)
Grazie ancora e buonlavoro!