Newsgroup: it.comp.software.cad
Titolo: [lisp con codice] Piccoli svaghi.

Cari Amici del NG,
Per chi mi conosce e attende mie notizie:
SCUSATE SCUSATE SCUSATE!
Mi faro vivo al piu' presto!
Ecco qualche "simpatico" svago da caricarsi in autocad
e che richiede solo di muovere il mouse o di dare ESC.
Perdonate le maiuscole che seguiranno, sono solo dei
taglia-incolla e non alzate di voce.
La prima procedura puo' forse essere interessante,
e' un temporizzatore, dati tot centesimi di secondo
fa passare tale lasso di tempo prima di riprendere
la procedura in corso (la var passata si chiama
eroneamente ms ma sono cs).
Per il resto divertitevi, o perdonatemi; o se vogliamo
buttarci sul culturale, sapevate che il Lisp e' (o era)
usato per la programmazione dell'inteligenza artificiale (IA)?
Ecco io sto usando qua l'AutoLisp per l'(SA) la stupidita'
artificiale! :-)
Quattro i CMD disponibili:
s-base        : portate a spasso il serpentello
a-base        : portate a spasso l' ameba
s-pollicino   : lasciate una scia di sassolini
s-inseguito  : non fatevi mangiare al coda
Per tornare a cose un po' piu' inteligenti: qualcuno ha un
buon algoritmo di ramdomizzazione in autolisp (generazione
di numeri casuali)?
Volevo far passeggiare il serpentello da solo senza
l'uso del "topo", non vorrei che se lo mangiasse
pff... ha ha :-).
Ciao Giovanni Anzani
;---------------------------------------------------------------------------
----------
;  Procedure sviluppate a scopo didattico, dal dott. Giovanni Anzani,
;  per un seminario sulla programmazione in autolisp. Gennaio 2001
;---------------------------------------------------------------------------
----------
;------------------  PROCEDURA INTERESSANTE  ----------------------
(defun PAUSE (ms);millisecondi di pausa (centesimi di secondo)
  (setq ini-ms (fix (* 100000000 (rem (getvar "cdate") 0.0001))))
  (setq new-ms ini-ms)
  (while (< (setq delta-ms (abs (- ini-ms new-ms))) ms)
    (setq new-ms (fix (* 100000000 (rem (getvar "cdate") 0.0001))))))
;-------------------------  PROCEDURE VARIE  ----------------------------
(defun GET-MOUSE () (car(cdr(grread T 5 1))))
(defun GET-COL ( ) (setq oldcol (getvar "cecolor")))
(defun GET-OSM ()  (setq oldosm (getvar "osmode")))
(defun GET-CMD ()  (setq oldcmd (getvar "cmdecho")))
(defun SET-COL (#) (setvar "cecolor" #))
(defun SET-OSM (#) (setvar "osmode" #))
(defun SET-CMD (#) (setvar "cmdecho" #))
(defun PUT-COL ( ) (command "cecolor" oldcol))
(defun PUT-OSM ()  (setvar "osmode" oldosm))
(defun PUT-CMD ()  (setvar "cmdecho" oldcmd))
(defun DEL-A () (command "_erase" "all" ""))
(defun DEL-L () (command "_erase" "last" ""))
(defun £com (lcom) (mapcar 'command lcom))
(defun DSPLIN-a (lP) (£com (append (list "_SPLINE") lP (list "" "" "")))
(entlast))
(defun DSPLIN-c (lP) (£com (append (list "_SPLINE") lP (list "c" "")))
(entlast))
(defun iniser-a (PT)  (setq lPT (append      lPT  (list PT))) (DEL-A)
(DSPLIN-a lPT))
(defun iniser-c (PT)  (setq lPT (append      lPT  (list PT))) (DEL-A)
(DSPLIN-c lPT))
(defun newser-a (PT)  (setq lPT (append (cdr lPT) (list PT))) (DEL-A)
(DSPLIN-a lPT))
(defun newser-c (PT)  (setq lPT (append (cdr lPT) (list PT))) (DEL-A)
(DSPLIN-c lPT)(command "hatch" "s" "last" ""))
(defun newser-p (PT)
  (setq lPT (append (cdr lPT) (list PT)))
  (if (<=(distance (nth cont2 lPT) (nth (+ cont2 4) lPT)) 0.5) (setq cont2
(1+ cont2)))
  (DEL-A) (command "_circle" (nth cont2 lPT) "1" "_circle" (last lPT) "1")
  ;(command "_circle" (last lPT) "1")
  (DSPLIN-a (member (nth (+ cont2 4) lPT) lPT)))
(defun newser-t (PT)  (setq lPT (append (cdr lPT) (list PT))) (DEL-L)
(command "_point" (car lPT))(DSPLIN-a lPT))
;-------------------------------  PROGRAMMI
SERPENTE  -------------------------------
(defun c:s-base () (alert "portate a spasso il serpentello")
  (GET-COL) (GET-CMD) (SET-CMD 0) (GET-OSM) (SET-OSM 0)
(setq cont 0 lPT nil)
(while (setq PTn (GET-MOUSE))
       (SET-COL (itoa(rem (setq cont (1+ cont)) 255)))
       (if (< (length lPT) 16) (iniser-a PTn) (newser-a PTn))
       (PUT-COL)
       (PAUSE 1))
(PUT-OSM) (PUT-CMD))
;---------------------------------------------------------------------------
----------
(defun c:s-pollicino () (alert "lasciate una scia di sassolini")
  (GET-COL) (GET-CMD) (SET-CMD 0) (GET-OSM) (SET-OSM 0)
(setq cont 0 lPT nil)
(while (setq PTn (GET-MOUSE))
       (SET-COL (itoa(rem (setq cont (1+ cont)) 255)))
       (if (< (length lPT) 16) (iniser-a PTn) (newser-t PTn))
       (PUT-COL)
       (PAUSE 1))
(PUT-OSM) (PUT-CMD))
;---------------------------------------------------------------------------
----------
(defun c:s-inseguito () (alert "non fatevi mangiare al coda!")
  (GET-COL) (GET-CMD) (SET-CMD 0) (GET-OSM) (SET-OSM 0)
(setq cont 0 cont2 0 lmax 32 lPT nil)
(while (setq PTn (GET-MOUSE))
       (SET-COL (itoa(rem (setq cont (1+ cont)) 255)))
       (if (= cont2 (- lmax 5)) (progn (alert "sei morto!")(exit)))
       (if (< (length lPT) lmax) (iniser-a PTn) (newser-p PTn))
       (PUT-COL))
(PUT-OSM) (PUT-CMD))
;------------------------  PROGRAMMI  AMEBA  ---------------------------
(defun c:a-base () (alert "portate a spasso l' ameba")
  (GET-COL) (GET-CMD) (SET-CMD 0) (GET-OSM) (SET-OSM 0)
(setq cont 0 lPT nil)
(while (setq PTn (GET-MOUSE))
       (SET-COL (itoa(rem (setq cont (1+ cont)) 255)))
       (if (< (length lPT) 8) (iniser-a PTn) (newser-c PTn))
       (PUT-COL))
(PUT-OSM) (PUT-CMD))
;---------------------------------------------------------------------------
----------

 e che richiede solo di muovere il mouse o di dare ESC.
[cut]
Come si fa ad utilizzarle?
Io ho provato a copiare una delle procedure in un file di testo che ho
chiamato pippo.lsp e poi ho fatto strumenti > carica applicazione.
E poi?
(Scusate ma non sono molto esperto.)
Tiziano.

 (Scusate ma non sono molto esperto.)
Non ti devi scusare, non si nasce "imparati".
Ciao Giovanni A.

 fanno delle "chiamate" alle procedure sovastanti; in breve:
[cut]
Grazie per la spiegazione.
Adesso funziona.
Ciao. Tiziano.

  - " Ciao Giovanni Anzani"
[cut]
Mi sono perso l'inizio (parto dal msg di Tiziano del 10.01).
Di quale lisp state parlando??????
Lo ripostate per favore ??
Grazie
--
Massimo Ghio

Come non detto è arrivato adesso. [strano].
--
Massimo Ghio