Main

Guida Ad Auto Lisp

Main.GuidaAdAutoLisp History

Hide minor edits - Show changes to output

January 17, 2008, at 02:19 PM by Massimiliano Vessi -
Changed lines 17-18 from:

to:
!Attenzione

'''Tutti i programmi LISP esistenti in internet fanno riferimento alla versione in lingua INGLESE,''' '''''NON USATE ALTRE VERSIONI!'''''

La versione corretta di un AutoCAD e' quella in inglese, perche' i comando, sfortunatamente, sono tradotti. Se Provate ad usare un qualunque programma AutoLisp su internet, nella vostra versione localizzata, 9 volte su 10 non vi funzionera'.

'''Ce' un rimedio!'', Basta sostituire il file '''acad.pgp''' presente con quello della versione inglese, eccolo (zippato):
Attach:acad.pgp.zip


Added lines 827-832:
 (cdr lista)

Restituisce la lista senza il primo elemento.


Changed line 101 from:
: '''Reali''': Sono numeri con il punto, deve sempre essere indicata una cifra sia prima che dopo il punto. La lettera E indica "per 10 elevato", quindi 5E+2 significa img1.png.Esempi:  \\
to:
: '''Reali''': Sono numeri con il punto, deve sempre essere indicata una cifra sia prima che dopo il punto. La lettera E indica "per 10 elevato", quindi 5E+2 significa 5*10^2 .Esempi:  \\
Changed lines 14-16 from:


to:
Se volete una versione pdf basta che clicchiate sull'apposito link in alto o in basso.



Changed lines 45-46 from:
E' bene conoscere dei comandi che ci risparmiano del tempo prezioso per ottenere alcuni risultati:
to:
E' bene conoscere dei comandi che ci risparmiano del tempo prezioso per ottenere alcuni risultati, senza dover ricorrere ad autolisp:
Added lines 44-72:
! Prima di cominciare
E' bene conoscere dei comandi che ci risparmiano del tempo prezioso per ottenere alcuni risultati:

:BOUNDARY : Crea una polilinea da una serie di linee chiuse
:CAL : Calcolatrice multifunzione
:DIVIDE : Divide un oggetto in numero uguale di parti facendo apparire dei punti di demarcazione (non divide nulla effettivamente)
:DONUT : Crea ciambelle bidimensionali
:DRAWORDER : Come scegliere quello che appare sopra al resto
: DSVIEWER : Metodo molto comodo per muoversi nel disegno, usa i tasti dx e sx del mouse per fermarti
:FILTER : per selezionare oggetti che corrispondono a determinati requisiti
:FIND : Cerca test all'interno del disegno
:GROUP : come i blocchi, si possono fare i gruppi, ma sono piu' difficili da esplodere
:IMAGE : Gestore delle immagini
:IMAGEADJUST : Editor di immagini
:IMAGECLIP : Decidi i limiti dell'immagine
:LIST :Lista l'elenco delle informazioni di un elemento
:MENU: Carichi le macro dei menu
:MINSERT : I blocchi inseriti con questo comando non possono essere esplosi
:PASTEBLOCK : incolla la clipboard come un blocco
:PASTEORIG :  incolla la selezione con la stessa origine di dove e' stata presa, cosi' si evita di dover riposizionare precisamente
:PEDIT: Poliline edit
:PUBLISH: Crea un documento autocad non editabile che si vede con VoloView
:PUBLISHTOWEB:Crea un documento autocad non editabile che si vede in un browser
:QDIM : Quotatura rapida, si seleziona un oggetto, e dopo partono in automatiche le quote nella direzione che indicate
:QSELECT: La soluzione finale a tutti i problemi, o quasi, volete selezionare qualcosa che e' difficile, con questo comando si riesce a selezionare qualsiasi cosa in base ad un qualunque criterio: provare per credere.
:RENAME: cambia il nome di un oggetto
:SKETCH: Scarabocchiare il disegno come i programmi di grafica
:TIME:Da' varie informazioni

Changed lines 1813-1814 from:
: [[#foot184]]... disegno[[autolisp.html#tex2html4 | '^1^']]: In realta' per complicare ancora di piu' l'esistenza a noi utonti, le variabili cambiano a seconda della versione di autocad, nella versione 2000 i file si chiamano ''acad2000.lsp'' e ''acad2000doc.lsp''.
to:
: [[#foot184]]... disegno: In realta' per complicare ancora di piu' l'esistenza a noi utonti, le variabili cambiano a seconda della versione di autocad, nella versione 2000 i file si chiamano ''acad2000.lsp'' e ''acad2000doc.lsp''.
Changed lines 38-39 from:
!! [[#SECTION00011000000000000000]] Convenzioni tipografiche
to:
!!  Convenzioni tipografiche
Changed lines 44-45 from:
! [[#SECTION00020000000000000000]] Struttura di un file Autolisp
to:
!  Struttura di un file Autolisp
Changed lines 48-49 from:
! [[#SECTION00030000000000000000]] Impostare una variabile
to:
!  Impostare una variabile
Changed lines 60-61 from:
!! [[#SECTION00031000000000000000]] Impostare una variabile di sistema
to:
!!  Impostare una variabile di sistema
Changed lines 456-457 from:
! [[#SECTION00040000000000000000]] COMMAND
to:
!  COMMAND
Changed lines 468-469 from:
! [[#SECTION00050000000000000000]] Prendere l'input dall'utente
to:
!  Prendere l'input dall'utente
Changed lines 478-479 from:
!! [[#SECTION00051000000000000000]] GETPOINT
to:
!!  GETPOINT
Changed lines 486-487 from:
!! [[#SECTION00052000000000000000]] GETCORNER
to:
!!  GETCORNER
Changed lines 492-493 from:
!! [[#SECTION00053000000000000000]] GETDIST
to:
!!  GETDIST
Changed lines 498-499 from:
!! [[#SECTION00054000000000000000]] GETANGLE
to:
!!  GETANGLE
Changed lines 504-505 from:
!! [[#SECTION00055000000000000000]] GETREAL
to:
!!  GETREAL
Changed lines 510-511 from:
!! [[#SECTION00056000000000000000]] GETINT
to:
!!  GETINT
Changed lines 516-517 from:
!! [[#SECTION00057000000000000000]] GETSTRING
to:
!!  GETSTRING
Changed lines 524-525 from:
!! [[#SECTION00058000000000000000]] Comandi pericolosi: INITGET
to:
!! Comandi pericolosi: INITGET
Changed lines 562-563 from:
! [[#SECTION00060000000000000000]] Esempio di un programma
to:
!  Esempio di un programma
Changed lines 631-632 from:
! [[#SECTION00070000000000000000]] Le funzioni matematiche
to:
!  Le funzioni matematiche
Changed lines 637-638 from:
!! [[#SECTION00071000000000000000]] +
to:
!!  +
Changed lines 643-644 from:
!! [[#SECTION00072000000000000000]] *
to:
!!  *
Changed lines 649-650 from:
!! [[#SECTION00073000000000000000]] -
to:
!!  -
Changed lines 658-659 from:
!! [[#SECTION00074000000000000000]] /
to:
!!  /
Changed lines 667-668 from:
!! [[#SECTION00075000000000000000]] min
to:
!!  min
Changed lines 673-674 from:
!! [[#SECTION00076000000000000000]] max
to:
!!  max
Changed lines 679-680 from:
!! [[#SECTION00077000000000000000]] Massimo comune divisore
to:
!!  Massimo comune divisore
Changed lines 685-686 from:
!! [[#SECTION00078000000000000000]] Resto della divisione
to:
!!  Resto della divisione
Changed lines 691-692 from:
!! [[#SECTION00079000000000000000]] Valore assoluto
to:
!!  Valore assoluto
Changed lines 697-698 from:
!! [[#SECTION000710000000000000000]] Radice quadrata
to:
!!  Radice quadrata
Changed lines 703-704 from:
!! [[#SECTION000711000000000000000]] Logaritmo
to:
!!  Logaritmo
Changed lines 709-710 from:
!! [[#SECTION000712000000000000000]] Elevamento a potenza
to:
!!  Elevamento a potenza
Changed lines 715-716 from:
!! [[#SECTION000713000000000000000]] Elevamento di img5.png
to:
!!  Elevamento di ''e''
Changed lines 719-720 from:
Eleva il numero img5.png (numero di Nepero, pari a 2.718281828) alla potenza desiderata.
to:
Eleva il numero ''e'' (numero di Nepero, pari a 2.718281828) alla potenza desiderata.
Changed lines 15-16 from:
Se invece preferite scaricarlo in pdf, lo trovate nella sezione apposita del mio sito [[http://maxint.altervista.org/downloads/pdf/autolisp.pdf | clicca qui]].
to:

Changed lines 17-18 from:
! [[#SECTION00010000000000000000]] Introduzione
to:
!  Introduzione
Added lines 1-2:
(:toc:)
Deleted line 5:
Changed lines 11-13 from:
Tutto il materiale e' coperto da copyleft, potete farci quello che volete. Questo e' un wiki, potete amche editarlo.

to:
Tutto il materiale e' coperto da copyleft, potete farci quello che volete. Questo e' un wiki, potete anche editarlo.

Changed lines 1805-1890 from:
\\

!! [[#SECTION000270000000000000000]] Indice

* [[#tex2html90]][[autolisp.html#SECTION00010000000000000000 | Introduzione]]
** [[#tex2html91]][[autolisp.html#SECTION00011000000000000000 | Convenzioni tipografiche]] \\
* [[#tex2html92]][[autolisp.html#SECTION00020000000000000000 | Struttura di un file Autolisp]]
* [[#tex2html93]][[autolisp.html#SECTION00030000000000000000 | Impostare una variabile]]
** [[#tex2html94]][[autolisp.html#SECTION00031000000000000000 | Impostare una variabile di sistema]] \\
* [[#tex2html95]][[autolisp.html#SECTION00040000000000000000 | COMMAND]]
* [[#tex2html96]][[autolisp.html#SECTION00050000000000000000 | Prendere l'input dall'utente]]
** [[#tex2html97]][[autolisp.html#SECTION00051000000000000000 | GETPOINT]]
** [[#tex2html98]][[autolisp.html#SECTION00052000000000000000 | GETCORNER]]
** [[#tex2html99]][[autolisp.html#SECTION00053000000000000000 | GETDIST]]
** [[#tex2html100]][[autolisp.html#SECTION00054000000000000000 | GETANGLE]]
** [[#tex2html101]][[autolisp.html#SECTION00055000000000000000 | GETREAL]]
** [[#tex2html102]][[autolisp.html#SECTION00056000000000000000 | GETINT]]
** [[#tex2html103]][[autolisp.html#SECTION00057000000000000000 | GETSTRING]]
** [[#tex2html104]][[autolisp.html#SECTION00058000000000000000 | Comandi pericolosi: INITGET]] \\
* [[#tex2html105]][[autolisp.html#SECTION00060000000000000000 | Esempio di un programma]]
* [[#tex2html106]][[autolisp.html#SECTION00070000000000000000 | Le funzioni matematiche]]
** [[#tex2html107]][[autolisp.html#SECTION00071000000000000000 | +]]
** [[#tex2html108]][[autolisp.html#SECTION00072000000000000000 | *]]
** [[#tex2html109]][[autolisp.html#SECTION00073000000000000000 | -]]
** [[#tex2html110]][[autolisp.html#SECTION00074000000000000000 | /]]
** [[#tex2html111]][[autolisp.html#SECTION00075000000000000000 | min]]
** [[#tex2html112]][[autolisp.html#SECTION00076000000000000000 | max]]
** [[#tex2html113]][[autolisp.html#SECTION00077000000000000000 | Massimo comune divisore]]
** [[#tex2html114]][[autolisp.html#SECTION00078000000000000000 | Resto della divisione]]
** [[#tex2html115]][[autolisp.html#SECTION00079000000000000000 | Valore assoluto]]
** [[#tex2html116]][[autolisp.html#SECTION000710000000000000000 | Radice quadrata]]
** [[#tex2html117]][[autolisp.html#SECTION000711000000000000000 | Logaritmo]]
** [[#tex2html118]][[autolisp.html#SECTION000712000000000000000 | Elevamento a potenza]]
** [[#tex2html119]][[autolisp.html#SECTION000713000000000000000 | Elevamento di ]] \\
* [[#tex2html120]][[autolisp.html#SECTION00080000000000000000 | Funzioni con le stringhe]]
** [[#tex2html121]][[autolisp.html#SECTION00081000000000000000 | Concatenazione]]
** [[#tex2html122]][[autolisp.html#SECTION00082000000000000000 | Caratteri tutti maiuscoli o tutti minuscoli]]
** [[#tex2html123]][[autolisp.html#SECTION00083000000000000000 | Lunghezza di una stringa]]
** [[#tex2html124]][[autolisp.html#SECTION00084000000000000000 | Estrarre stringhe]] \\
* [[#tex2html125]][[autolisp.html#SECTION00090000000000000000 | Funzioni con liste]]
** [[#tex2html126]][[autolisp.html#SECTION00091000000000000000 | Creazione]]
** [[#tex2html127]][[autolisp.html#SECTION00092000000000000000 | Estrazioni di elementi]]
** [[#tex2html128]][[autolisp.html#SECTION00093000000000000000 | Ordinare una lista al contrario]]
** [[#tex2html129]][[autolisp.html#SECTION00094000000000000000 | Numero di elementi di una lista]]
** [[#tex2html130]][[autolisp.html#SECTION00095000000000000000 | Fusione di liste]] \\
* [[#tex2html131]][[autolisp.html#SECTION000100000000000000000 | Definire funzioni personalizzate]]
* [[#tex2html132]][[autolisp.html#SECTION000110000000000000000 | Funzioni logiche]]
** [[#tex2html133]][[autolisp.html#SECTION000111000000000000000 | AND]]
** [[#tex2html134]][[autolisp.html#SECTION000112000000000000000 | OR]]
** [[#tex2html135]][[autolisp.html#SECTION000113000000000000000 | NOT]]
** [[#tex2html136]][[autolisp.html#SECTION000114000000000000000 | EQ, equal, =]]
** [[#tex2html137]][[autolisp.html#SECTION000115000000000000000 | Maggiore, minore, diverso]] \\
* [[#tex2html138]][[autolisp.html#SECTION000120000000000000000 | Scegliere (IF)]]
* [[#tex2html139]][[autolisp.html#SECTION000130000000000000000 | Esecuzioni cicliche]]
** [[#tex2html140]][[autolisp.html#SECTION000131000000000000000 | Repeat]]
** [[#tex2html141]][[autolisp.html#SECTION000132000000000000000 | while]]
** [[#tex2html142]][[autolisp.html#SECTION000133000000000000000 | foreach]] \\
* [[#tex2html143]][[autolisp.html#SECTION000140000000000000000 | Visualizzare lo schermo del prompt]]
* [[#tex2html144]][[autolisp.html#SECTION000150000000000000000 | Visualizzazione e stampa di dati]]
* [[#tex2html145]][[autolisp.html#SECTION000160000000000000000 | Approssimazioni]]
** [[#tex2html146]][[autolisp.html#SECTION000161000000000000000 | Approssimazioni con gli angoli]] \\
* [[#tex2html147]][[autolisp.html#SECTION000170000000000000000 | Conversioni di unita' di misura]]
* [[#tex2html148]][[autolisp.html#SECTION000180000000000000000 | Selezionare un'oggetto]]
** [[#tex2html149]][[autolisp.html#SECTION000181000000000000000 | Eliminare un oggetto]]
** [[#tex2html150]][[autolisp.html#SECTION000182000000000000000 | Far ''scomparire'' e ''riapparire'' un oggetto]]
** [[#tex2html151]][[autolisp.html#SECTION000183000000000000000 | Selezionare piu' oggetti]] \\
* [[#tex2html152]][[autolisp.html#SECTION000190000000000000000 | Le proprieta' delle entita']]
** [[#tex2html153]][[autolisp.html#SECTION000191000000000000000 | Modificare le proprieta' di un oggetto]] \\
* [[#tex2html154]][[autolisp.html#SECTION000200000000000000000 | Creare un'entita']]
* [[#tex2html155]][[autolisp.html#SECTION000210000000000000000 | Identificatori degli elementi del disegno]]
* [[#tex2html156]][[autolisp.html#SECTION000220000000000000000 | Le tabelle dei simboli]]
* [[#tex2html157]][[autolisp.html#SECTION000230000000000000000 | Input/Output sui files]]
** [[#tex2html158]][[autolisp.html#SECTION000231000000000000000 | Scrivere]]
** [[#tex2html159]][[autolisp.html#SECTION000232000000000000000 | Leggere]]
** [[#tex2html160]][[autolisp.html#SECTION000233000000000000000 | Trovare i file]]
** [[#tex2html161]][[autolisp.html#SECTION000234000000000000000 | Formattazione dei dati in un file]] \\
* [[#tex2html162]][[autolisp.html#SECTION000240000000000000000 | Usare gli attributi di Autocad]]
** [[#tex2html163]][[autolisp.html#SECTION000241000000000000000 | Estrarre i dati]] \\
* [[#tex2html164]][[autolisp.html#SECTION000250000000000000000 | Funzioni geometriche]]
** [[#tex2html165]][[autolisp.html#SECTION000251000000000000000 | Angle]]
** [[#tex2html166]][[autolisp.html#SECTION000252000000000000000 | Distance]]
** [[#tex2html167]][[autolisp.html#SECTION000253000000000000000 | Polar]] \\
* [[#tex2html168]][[autolisp.html#SECTION000260000000000000000 | Programmi]]
** [[#tex2html169]][[autolisp.html#SECTION000261000000000000000 | Scrivere del testo lungo un arco di circonferenza]]
** [[#tex2html170]][[autolisp.html#SECTION000262000000000000000 | Selezionare uno ad uno tutti gli oggetti]]

to:


Deleted line 0:
Deleted lines 1890-1903:
! [[#SECTION000280000000000000000]] About this document ...

'''Autolisp per utonti'''

This document was generated using the [[http://www.latex2html.org/ | '''LaTeX'''2@@HTML@@]] translator Version 2002-2 (1.70)

Copyright © 1993, 1994, 1995, 1996, [[http://cbl.leeds.ac.uk/nikos/personal.html | Nikos Drakos]], Computer Based Learning Unit, University of Leeds.  \\
Copyright © 1997, 1998, 1999, [[http://www.maths.mq.edu.au/~ross/ | Ross Moore]], Mathematics Department, Macquarie University, Sydney.

The command line arguments were:  \\
'''latex2html''' @@-split 0 autolisp.tex@@

The translation was initiated by Massimiliano Vessi on 2006-04-16  \\

Deleted lines 1896-1900:
----

file:/usr/local/share/lib/latex2html/icons/nx_grp_g.png file:/usr/local/share/lib/latex2html/icons/up_g.png file:/usr/local/share/lib/latex2html/icons/prev_g.png \\

 Massimiliano Vessi 2006-04-16
Deleted line 1:
Changed lines 4-8 from:
'''Massimiliano Vessi  \\ [[#tex2html1]][[mailto:maxint@tiscali.it | maxint@tiscali.it]] \\ [[#tex2html2]][[
 http://maxint.altervista.org | http://maxint.altervista.org]] '''

\\

to:

Changed lines 10-17 from:
 Questa guida spero possa essere utile a chi si e' mai chiesto se con autolisp e' possibili velocizzare il lavoro con Autocad. Dalla versione 12, che girava su Unix/Linux, ad oggi, il linguaggio non e' cambiato, mantenendo quindi la compatibilita' con il passato, e anche un sistema di manipolazione dei dati alquanto complicato.

Tutto il materiale e' coperto da copyleft, potete farci quello che volete. Se volete salvarlo in questo formato basta lanciare:

 wget -r -np maxint.altervista.org/autolisp/index.html

 Se invece preferite scaricarlo in pdf, lo trovate nella sezione apposita del mio sito [[#tex2html3]]
[[http://maxint.altervista.org/downloads/pdf/autolisp.pdf | clicca qui]].
to:
Questa guida spero possa essere utile a chi si e' mai chiesto se con autolisp e' possibili velocizzare il lavoro con Autocad. Dalla versione 12, che girava su Unix/Linux, ad oggi, il linguaggio non e' cambiato, mantenendo quindi la compatibilita' con il passato, e anche un sistema di manipolazione dei dati alquanto complicato.

Tutto il materiale e' coperto da copyleft, potete farci quello che volete. Questo e' un wiki, potete amche editarlo.


Se invece preferite scaricarlo in pdf, lo trovate nella sezione apposita del mio sito
[[http://maxint.altervista.org/downloads/pdf/autolisp.pdf | clicca qui]].
Added lines 1-1921:


! Autolisp per utonti

'''Massimiliano Vessi  \\ [[#tex2html1]][[mailto:maxint@tiscali.it | maxint@tiscali.it]] \\ [[#tex2html2]][[
 http://maxint.altervista.org | http://maxint.altervista.org]] '''

\\

''Date:'' Cominciato il 1/1/2005

!!! Sommario:

 Questa guida spero possa essere utile a chi si e' mai chiesto se con autolisp e' possibili velocizzare il lavoro con Autocad. Dalla versione 12, che girava su Unix/Linux, ad oggi, il linguaggio non e' cambiato, mantenendo quindi la compatibilita' con il passato, e anche un sistema di manipolazione dei dati alquanto complicato.

Tutto il materiale e' coperto da copyleft, potete farci quello che volete. Se volete salvarlo in questo formato basta lanciare:

 wget -r -np maxint.altervista.org/autolisp/index.html

 Se invece preferite scaricarlo in pdf, lo trovate nella sezione apposita del mio sito [[#tex2html3]][[http://maxint.altervista.org/downloads/pdf/autolisp.pdf | clicca qui]].

! [[#SECTION00010000000000000000]] Introduzione

Autolisp, ma il LISP in generale, e' un linguaggio di programmazione che ha una struttura ben determinata, fortemente diversa da altri linguaggi. Ogni funzione o comando deve essere racchiuso tra parentesi tonde (), inoltre ogni comando e' la prima parola all'interno delle parentesi; la struttura e' quindi la seguente:

 (COMANDO ARGOMENTO1 ARGOMENTO2)
 (COMANDO ARGOMENTO1 (comando argomento))

Per esempio per sommare due numeri:

 (+ 1 2)

Un file Autolisp e' un normalissimo file di testo con estensione ''.lsp'', e puo' essere scritto con qualunque editor di testi, come il semplice Blocco di windows. (mi raccomando non usate mai Word che combina solo pasticci con i file, perche' e' un word-processor e perche' e' micro$oft ;-) ).

Per caricare un file Autolisp e' necessario lanciare il comando:

 appload

In Lisp, come altri linguaggi di programmazione, il valore come FALSO viene considerato il valore 0 (zero), mentre viene considerato come VERO qualsiasi altro valore. Per facilitare la comprensione dei programmi si puo' mettere anche la lettere F al posto del valore FALSO e la lettera T (true) al posto del valore vero.

 (getstring T "Scrivi nome e cognome:")

!! [[#SECTION00011000000000000000]] Convenzioni tipografiche

Quando in questo testo verra mostrato come si scrive un comando, si seguira' la seguente sintassi:

 (comando argomento_obbligatorio [argomento opzionale])

! [[#SECTION00020000000000000000]] Struttura di un file Autolisp

Un file autolisp e' un normalissimo file di testo con estensione LSP, per poter essere eseguito deve essere caricato dal programma autocad con il comando APPLOAD. Il punto e virgola (;) e' interpretato da autocad come l'inizio di un commento, percio' tutto quello che segue il punto e virgola e' ignorato fino alla fine della riga.

! [[#SECTION00030000000000000000]] Impostare una variabile

Per impostare una variabile c'e' il comando SETQ, per esempio per impostare la variabile x con il valore 3:

 (setq x 3)

Per richiamare il valore di una variabile, si usa il punto esclamativo (!), per esempio per richiamare il valore della variabile x:

 !x

Inoltre, si puo' lavorare con le variabili di sistema di autocad, per esempio CLAYER e' la variabile contiene il numero del layer corrente.

!! [[#SECTION00031000000000000000]] Impostare una variabile di sistema

Le varibili di sistema, sono variabili gia' impostate da Autocad il cui valore indica uno stato o una impostazione, per esempio se la varibile SNAPMODE ha il valore 1 allora lo SNAP e' attivo, se ha il valore 0 lo SNAP e' disattivato.

Le varibili di sistema sono di tre tipi:

: '''Stringhe''': Il valore viene sempre indicato fra virgolette, e puo' essere un qualunque insieme di carattere (lettere o numeri) compreso di spazi, esempi:  \\
"C:", "3.1", "tanto va la gatta al lardo..."
: '''Interi''': Sono numeri senza virgola, sia positivi che negativi, compresi tra -32768 e +32761 (16 bit). Se si utilizzano valori maggiori o minori di essi sorge un errore che pero' non viene segnalato. Esempi:  \\
115, 23, -12, -1156
: '''Reali''': Sono numeri con il punto, deve sempre essere indicata una cifra sia prima che dopo il punto. La lettera E indica "per 10 elevato", quindi 5E+2 significa img1.png.Esempi:  \\
0.43, 12.0, 56.87, 1.23E+17, 4.6E-5
: '''Liste''': Le liste sono insiemi di valori raggruppati da parentesi, i punti, per esempio, sono liste di almeno due valori reali, la coordinata X e la coordinata Y del punto. Se si lavora in 3 dimensioni allora i punti avranno tre coordinate (X Y Z), esempio:  \\
(10.2 2.5 5.0)

Non tutte le variabili di sistema possono essere modificate, alcune sono in "sola lettura". L'area di una figura geometrica rimane cio' che e' non e' possibile modificarla (bisogna modificare la figura); la variabile che indica il layer corrente non puo' essere impostata con un nome immaginario, il nome deve corrispondere ad un layer gia' esistente.

Le variabili di sistema sono totalmente scollegate dalle variabili normali, e possono avere anche lo stesso nome, tanto per richiamarle e modificarle si utilizzano comandi diversi.

Per conoscere tutte la variabili di sistema basta digitare SETVAR, poi ? e infine *:

 SETVAR
 Enter variable name or [?]: ?
 Enter variable(s) to list <*>: *
 ACADLSPASDOC      0
 ACADPREFIX       
 "C:\Programmi\ACAD2000\support;C:\Programmi\ACAD2000\fonts;C:..." (read only)
 ACADVER          "15.0"                              (read only)
 ACISOUTVER        40
 AFLAGS            0
 ANGBASE          0
 ANGDIR            0
 APBOX            0
 APERTURE          10
 AREA              0.0000                              (read only)
 ATTDIA            0
 ATTMODE          1
 ATTREQ            1
 AUDITCTL          0
 AUNITS            0
 AUPREC            0
 AUTOSNAP          55
 BACKZ            0.0000                              (read only)
 BINDTYPE          0
 BLIPMODE          0
 CDATE            20050209.11534074                    (read only)
 Press ENTER to continue:
 CECOLOR          "BYLAYER"
 CELTSCALE        1.0000
 CELTYPE          "BYLAYER"
 CELWEIGHT        -1
 CHAMFERA          10.0000
 CHAMFERB          10.0000
 CHAMFERC          20.0000
 CHAMFERD          0
 CHAMMODE          0
 CIRCLERAD        0.0000
 CLAYER            "0"
 CMDACTIVE        1                                    (read only)
 CMDDIA            1
 CMDECHO          1
 CMDNAMES          "SETVAR"                            (read only)
 CMLJUST          0
 CMLSCALE          20.0000
 CMLSTYLE          "STANDARD"
 COMPASS          0
 COORDS            1
 CPLOTSTYLE        "ByColor"
 CPROFILE          "<<Unnamed Profile>>"                (read only)
 CTAB              "Model"
 Press ENTER to continue:
 CURSORSIZE        5
 CVPORT            2
 DATE              2453411.60437235                    (read only)
 DBMOD            4                                    (read only)
 DCTCUST          "C:\Programmi\ACAD2000\support\sample.cus"
 DCTMAIN          "enu"
 DEFLPLSTYLE      "ByColor"
 DEFPLSTYLE        "ByColor"
 DELOBJ            1
 DEMANDLOAD        3
 DIASTAT          0                                    (read only)
 DIMADEC          0
 DIMALT            OFF
 DIMALTD          3
 DIMALTF          0.0394
 DIMALTRND        0.0000
 DIMALTTD          3
 DIMALTTZ          0
 DIMALTU          2
 DIMALTZ          0
 DIMAPOST          ""
 DIMASO            ON
 DIMASZ            2.5000
 Press ENTER to continue:
 DIMATFIT          3
 DIMAUNIT          0
 DIMAZIN          0
 DIMBLK            ""
 DIMBLK1          ""
 DIMBLK2          ""
 DIMCEN            2.5000
 DIMCLRD          0
 DIMCLRE          0
 DIMCLRT          0
 DIMDEC            2
 DIMDLE            0.0000
 DIMDLI            3.7500
 DIMDSEP          ","
 DIMEXE            1.2500
 DIMEXO            0.6250
 DIMFIT            3
 DIMFRAC          0
 DIMGAP            0.6250
 DIMJUST          0
 DIMLDRBLK        ""
 DIMLFAC          1.0000
 DIMLIM            OFF
 Press ENTER to continue:
 DIMLUNIT          2
 DIMLWD            -2
 DIMLWE            -2
 DIMPOST          ""
 DIMRND            0.0000
 DIMSAH            OFF
 DIMSCALE          1.0000
 DIMSD1            OFF
 DIMSD2            OFF
 DIMSE1            OFF
 DIMSE2            OFF
 DIMSHO            ON
 DIMSOXD          OFF
 DIMSTYLE          "ISO-25"                            (read only)
 DIMTAD            1
 DIMTDEC          2
 DIMTFAC          1.0000
 DIMTIH            OFF
 DIMTIX            OFF
 DIMTM            0.0000
 DIMTMOVE          0
 DIMTOFL          ON
 DIMTOH            OFF
 Press ENTER to continue:
 DIMTOL            OFF
 DIMTOLJ          0
 DIMTP            0.0000
 DIMTSZ            0.0000
 DIMTVP            0.0000
 DIMTXSTY          "Standard"
 DIMTXT            2.5000
 DIMTZIN          8
 DIMUNIT          2
 DIMUPT            OFF
 DIMZIN            8
 DISPSILH          0
 DISTANCE          0.0000                              (read only)
 DONUTID          10.0000
 DONUTOD          20.0000
 DRAGMODE          2
 DRAGP1            10
 DRAGP2            25
 DWGCHECK          0
 DWGCODEPAGE      "ANSI_1252"                          (read only)
 DWGNAME          "Drawing1.dwg"                      (read only)
 DWGPREFIX        "C:\Programmi\ACAD2000\"            (read only)
 DWGTITLED        0                                    (read only)
 Press ENTER to continue:
 EDGEMODE          0
 ELEVATION        0.0000
 EXPERT            0
 EXPLMODE          1
 EXTMAX            -1.0000E+20,-1.0000E+20,-1.0000E+20  (read only)
 EXTMIN            1.0000E+20,1.0000E+20,1.0000E+20    (read only)
 EXTNAMES          1
 FACETRATIO        0
 FACETRES          0.5000
 FILEDIA          1
 FILLETRAD        10.0000
 FILLMODE          1
 FONTALT          "simplex.shx"
 FONTMAP          "C:\Programmi\ACAD2000\support\acad.fmp"
 FRONTZ            0.0000                              (read only)
 FULLOPEN          1                                    (read only)
 GRIDMODE          0
 GRIDUNIT          10.0000,10.0000
 GRIPBLOCK        0
 GRIPCOLOR        5
 GRIPHOT          1
 GRIPS            1
 GRIPSIZE          3
 Press ENTER to continue:
 HANDLES          1                                    (read only)
 HIDEPRECISION    0
 HIGHLIGHT        1
 HPANG            0
 HPBOUND          1
 HPDOUBLE          0
 HPNAME            "ANGLE"
 HPSCALE          1.0000
 HPSPACE          1.0000
 HYPERLINKBASE    ""
 IMAGEHLT          0
 INDEXCTL          0
 INETLOCATION      "C:\Programmi\ACAD2000\Home.htm"
 INSBASE          0.0000,0.0000,0.0000
 INSNAME          ""
 INSUNITS          4
 INSUNITSDEFSOURCE 4
 INSUNITSDEFTARGET 4
 ISAVEBAK          1
 ISAVEPERCENT      50
 ISOLINES          4
 LASTANGLE        0                                    (read only)
 LASTPOINT        326.0832,118.2193,0.0000
 Press ENTER to continue:
 LASTPROMPT        "LASTANGLE        0                                   
 (read..." (read only)
 LENSLENGTH        50.0000                              (read only)
 LIMCHECK          0
 LIMMAX            420.0000,297.0000
 LIMMIN            0.0000,0.0000
 LISPINIT          1
 LOCALE            "ITA"                                (read only)
 LOGFILEMODE      0
 LOGFILENAME      "C:\Programmi\ACAD2000\Drawing1_1_1_0041.log" (read only)
 LOGFILEPATH      "C:\Programmi\ACAD2000\"
 LOGINNAME        "max"                                (read only)
 LTSCALE          1.0000
 LUNITS            2
 LUPREC            4
 LWDEFAULT        25
 LWDISPLAY        OFF
 LWUNITS          1
 MAXACTVP          64
 MAXSORT          200
 MBUTTONPAN        1
 MEASUREINIT      1
 MEASUREMENT      1
 MENUCTL          1
 Press ENTER to continue:
 MENUECHO          0
 MENUNAME          "C:\Programmi\ACAD2000\support\acad" (read only)
 MIRRTEXT          1
 MODEMACRO        ""
 MTEXTED          "Internal"
 NOMUTT            0
 OFFSETDIST        1.0000
 OFFSETGAPTYPE    0
 OLEHIDE          0
 OLEQUALITY        1
 OLESTARTUP        0
 ORTHOMODE        0
 OSMODE            39
 OSNAPCOORD        2
 PAPERUPDATE      0
 PDMODE            0
 PDSIZE            0.0000
 PELLIPSE          0
 PERIMETER        0.0000                              (read only)
 PFACEVMAX        4                                    (read only)
 PICKADD          1
 PICKAUTO          1
 PICKBOX          3
 Press ENTER to continue:
 PICKDRAG          0
 PICKFIRST        1
 PICKSTYLE        1
 PLATFORM          "Microsoft Windows NT Version 5.1 (x86)" (read only)
 PLINEGEN          0
 PLINETYPE        2
 PLINEWID          0.0000
 PLOTID            ""
 PLOTROTMODE      2
 PLOTTER          0
 PLQUIET          0
 POLARADDANG      ""
 POLARANG          90
 POLARDIST        0.0000
 POLARMODE        0
 POLYSIDES        4
 POPUPS            1                                    (read only)
 PROJECTNAME      ""
 PROJMODE          1
 PROXYGRAPHICS    1
 PROXYNOTICE      1
 PROXYSHOW        0
 PSLTSCALE        1
 Press ENTER to continue:
 PSPROLOG          ""
 PSQUALITY        75
 PSTYLEMODE        1                                    (read only)
 PSTYLEPOLICY      1
 PSVPSCALE        0.00000000
 PUCSBASE          ""
 QTEXTMODE        0
 RASTERPREVIEW    1
 REFEDITNAME      ""                                  (read only)
 REGENMODE        1
 RTDISPLAY        1
 SAVEFILE          ""                                  (read only)
 SAVEFILEPATH      "C:\DOCUME~1\max\IMPOST~1\Temp\"
 SAVENAME          ""                                  (read only)
 SAVETIME          15
 SCREENBOXES      0                                    (read only)
 SCREENMODE        3                                    (read only)
 SCREENSIZE        725.0000,358.0000                    (read only)
 SDI              0
 SHADEDGE          3
 SHADEDIF          70
 SHORTCUTMENU      11
 SHPNAME          ""
 Press ENTER to continue:
 SKETCHINC        1.0000
 SKPOLY            0
 SNAPANG          0
 SNAPBASE          0.0000,0.0000
 SNAPISOPAIR      0
 SNAPMODE          0
 SNAPSTYL          0
 SNAPTYPE          0
 SNAPUNIT          10.0000,10.0000
 SOLIDCHECK        1
 SORTENTS          96
 SPLFRAME          0
 SPLINESEGS        8
 SPLINETYPE        6
 SURFTAB1          6
 SURFTAB2          6
 SURFTYPE          6
 SURFU            6
 SURFV            6
 SYSCODEPAGE      "ANSI_1252"                          (read only)
 TABMODE          0
 TARGET            0.0000,0.0000,0.0000                (read only)
 TDCREATE          2453411.47756546                    (read only)
 Press ENTER to continue:
 TDINDWG          0.12690797                          (read only)
 TDUCREATE        2453411.43589880                    (read only)
 TDUPDATE          2453411.47756546                    (read only)
 TDUSRTIMER        0.12690924                          (read only)
 TDUUPDATE        2453411.43589880                    (read only)
 TEMPPREFIX        "C:\DOCUME~1\max\IMPOST~1\Temp\"    (read only)
 TEXTEVAL          0
 TEXTFILL          1
 TEXTQLTY          50
 TEXTSIZE          2.5000
 TEXTSTYLE        "Standard"
 THICKNESS        0.0000
 TILEMODE          1
 TOOLTIPS          1
 TRACEWID          1.0000
 TRACKPATH        0
 TREEDEPTH        3020
 TREEMAX          10000000
 TRIMMODE          1
 TSPACEFAC        1.0000
 TSPACETYPE        1
 TSTACKALIGN      1
 TSTACKSIZE        70
 Press ENTER to continue:
 UCSAXISANG        90
 UCSBASE          ""
 UCSFOLLOW        0
 UCSICON          3
 UCSNAME          ""                                  (read only)
 UCSORG            0.0000,0.0000,0.0000                (read only)
 UCSORTHO          1
 UCSVIEW          1
 UCSVP            1
 UCSXDIR          1.0000,0.0000,0.0000                (read only)
 UCSYDIR          0.0000,1.0000,0.0000                (read only)
 UNDOCTL          5                                    (read only)
 UNDOMARKS        0                                    (read only)
 UNITMODE          0
 VIEWCTR          301.1597,148.5000,0.0000            (read only)
 VIEWDIR          0.0000,0.0000,1.0000                (read only)
 VIEWMODE          0                                    (read only)
 VIEWSIZE          297.0000                            (read only)
 VIEWTWIST        0                                    (read only)
 VISRETAIN        1
 VSMAX            1806.9580,891.0000,0.0000            (read only)
 VSMIN            -1204.6387,-594.0000,0.0000          (read only)
 WHIPARC          0
 Press ENTER to continue:
 WMFBKGND          ON
 WORLDUCS          1                                    (read only)
 WORLDVIEW        1
 WRITESTAT        1                                    (read only)
 XCLIPFRAME        0
 XEDIT            1
 XFADECTL          50
 XLOADCTL          1
 XLOADPATH        "C:\DOCUME~1\max\IMPOST~1\Temp\"
 XREFCTL          0
 ZOOMFACTOR        10

! [[#SECTION00040000000000000000]] COMMAND

Il comando COMMAND permette di dare tutta una serie di comandi, come se si digitasse direttamente con la tastiera nel programma autocad. Per esempio se si vuole ottenere una circonferenza di raggio 3, centrata nel punto (2,5) basta scrivere:

 (command CIRCLE "2,5" 3)

Questo perche' digitando su autocad il comando circle, succede quanto segue:

 circle
 CIRCLE 3P/2P/TTR/<Center point>:2,5
 Diameter/<Radius>:3

! [[#SECTION00050000000000000000]] Prendere l'input dall'utente

Per richiedere un input dall'utente come un punto, sia attraverso il mouse sia attraverso la tastiere, esiste la funzione GETPOINT:

 (setq primopunto (getpoint "Immetti le coordinate del primo punto"))

Per immettere dei caratteri esiste la funzione getstring, che peremette di contenere al massimo 132 caratteri. Sfortunatamente il comandi interpretata gli spazi come dei comandi di enter:

 (setq nome (getstring "Digitare il proprio nome (senza spazi):"))

!! [[#SECTION00051000000000000000]] GETPOINT

 (getpoint [puntodipartenza] ["frase"])

Serve per prendere un punto, il punto di partenza indica dove far partire una linea elastica che aiuta a capire dove si sta per cliccare, mentre generalmente nelle alttre funzioni sostituisce il primo input nel caso di piu' input.

Se si preme ENTER, invece di indicare un punto, e' restituito il valore nil.

!! [[#SECTION00052000000000000000]] GETCORNER

 (getcorner puntodipartenza ["frase"])

Serve per prendere un punto, pero' verra' disegnato un rettangolo elastico a partire dal puntobase indicato (obbligatoriamente). Cio' aiuta quando un punto serve per costruire un rettangolo ad esempio, ma anche in tante altre situazioni.

!! [[#SECTION00053000000000000000]] GETDIST

 (getdist [puntodipartenza] ["frase"])

Fornisce la distanza fra 2 punti e basta, ne' img2.png ne' altro.

!! [[#SECTION00054000000000000000]] GETANGLE

 (getangle [puntodipartena] ["frase"])

Restituisce l'angolo in RADIANTI (anche se usate altre unita' di misura) del segmento che unisce i due punti rispetto all'orizzontale, contando in senso antiorario.

!! [[#SECTION00055000000000000000]] GETREAL

 (getreal ["frase"])

Si usa per prendere un numero reale dall'utente. (Se si digita 9, per esempio, diventera' 9.0)

!! [[#SECTION00056000000000000000]] GETINT

 (getint ["Frase"])

Si usa per prendere un numero intero dall'utente. Se l'utente non inserisce un intero, verra' visualizzato un messaggio di errore e il programma continuera' a chiedere un intero finche' l'utente non inserira' un intero, e poi il programma continuera' normalmente.

!! [[#SECTION00057000000000000000]] GETSTRING

 (getstring [flag] ["frase"])

Serve a prendere delle frasi dall'utente, se flag e' VERO (cioe' un qualsiasi valore diverso da 0) allora accetta anche gli spazi e per dare il comando di fine inserimento l'utente puo' solo digitare invio. Se il flag non e' indicato, si suppone falso, e percio' lo spazio sara' considerato come invio.

Un altro problema con le stringhe riguarda il massimo numero di caratteri digitabili in autocad (non in un file autolisp) durante un comando e' 132, questo limita fortemente l'input dell'utente (se dovesse scriverci una lettera...); comunque le variabili non hanno limiti nel contenere i dati stringa, quindi e' possibile unire piu' input nella stessa variabile grazie a piu' comandi (e' solo molto scomodo).

!! [[#SECTION00058000000000000000]] Comandi pericolosi: INITGET

Un comando molto comodo quanto insidioso e' INITGET, questo comando permette di definire il tipo di input per tutte le funzioni GETxxx (GETPOINT, GETCORNER, ecc.), ma il suo funzionamento e' talmente semplice, che puo' accadere di averlo attivato:

 (initget [bit] [stringa])

Come vedete non contiene fra parentesi tonde i comandi su cui ha effetto, ma una volta attivato ha effetto sempre e bisgna ridigitarlo per elimiare il suo effetto. Ma quale effetto ha?

Il bit permette di decidere il formato dell'input secondo la tabella sotostante:

|| border="1" cellpadding="3"
||!'''Bit di controllo'''||!'''Risultato del controllo'''||
||1||Non nullo||
||2||Non zero||
||4||Maggiore di zero||
||8||Solo punti contenuti nella variabile LIMCHECK||
||32||Utilizza una linea elastica grafica||
||64||Ignora la coordinata Z||
||128||Accetta tutto||

La stringa permette di definire delle parole chiave che digitando poche lettere verranno immediatamente interpretate, per esempio il comando CIRCLE quando lo chiamate fa apparire:

 CIRCLE Specify center point fo circle or [3P/2P/Ttr (tan tan radius)]:

Digitando semplicemente 2P, 3P o T, il computer capisce immediatamente cosa volete, con il comando INITGET si possono aggiungere delle nostre parole:

 (initget "Ciao Mondo")
 (getpoint)
 M            ;digito M
 "Mondo"      ;appare "Mondo"
 (getpoint)
 c
 "Ciao"

La parte che scriviamo in maiuscolo e' l'abbreviazione che possiamo usare, quindi se scriviamo come stringa "Ciao MONDO" dovremo scrivere tutto ''mondo'', altrimenti non verra' interpretato.

Pero' usate initget con attenzione, una volta attivato non si torna indietro...

! [[#SECTION00060000000000000000]] Esempio di un programma

Ecco come puo' essere scritto un programma:

 ;Programma per ottenere un riquadro ombreggiato
 (setq bs (getpoint "\nIndica il punto in basso a sinistra del riquadro:"))
 (setq ad (getcorner bs "\nIndica il punto in alto a destra del riquadro:"))
 (setq x1 (car bs))
 (setq y1 (cadr bs))
 (setq x2 (car ad))
 (setq y2 (cadr ad))
 (setq as (list x1 y2))
 (setq bd (list x2 y1))
 (setq tx (/ (- y2 y1) 4))
 (setq pw (/ tx 3.0))
 (setq deltax (- x2 x1))
 (setq hdeltax (/ deltax 2.0))
 (setq deltay (- y2 y1))
 (setq hdeltay (/ deltay 1.75))
 (setq pt (list (+ x1 hdeltax) (+ y1 hdeltay)))
 (command "_.PLINE" bs "_W" pw "" bd ad "_W" 0 "" as "_C")
 (command "_.TEXT" "_S" "STANDARD" "_C" pt tx 0 "INSIDE" "_.TEXT" "" "AutoLISP")
 (command "_.FILLET" "_R" tx "_.FILLET" "_P" bs)

Analizziamo cosa fa:

# Chiede il punto in basso a sinistra del quadrato da disegnare e lo memorizza nella variabile ''bs''. (Il simbolo img3.png indica di iniziare il testo con una nuova riga)
# Ciede il punto in alto a destra del quadrato con la funzione getcorner, cosi' apparira' un quadrato elastioche da' l'idea di come verra fuori il quadrato che stiamo facendo. (se avessimo utilizzato il comado getpoint nuovamente, sarebbe apparsa una linea elastica invece del quadrato.)
# Memorizza il valore dell'ascissa x del punto bs, nella variabile x1
# Memorizza il valore dell'ordinata y del punto bs, nella variabile y1
# Memorizza il valore dell'ascissa x del punto ad, nella variabile x2
# Memorizza il valore dell'ordinata y del punto ad, nella variabile y2
# Memorizza le coordinate del vertice in alto a sinistra del quadrato che vogliamo disegnare, dentro la variabile ''as''.
# Memorizza le coordinate del vertice in basso a destra del quadrato che vogliamo disegnare, dentro la variabile ''bd''.
# Memorizza il valore dell'altezza del testo, prendendola dalla variabile di sistema TEXTSIZE, e la mette nella variabile ''tx''.
# pw=tx/3
# deltax=x2-x1
# hdeltax=deltax/2
# deltay=y2-y1
# hdeltay=deltay/1.75
# pt=(hdeltax+x1 , hdeltay+y1)
# Crea una poligonale con il comando PLINE e i primi due segmenti li fa' di spessore pari ad un terzo del testo (pw).
# Scrive all'interno del riquadro "Indise Autolisp".
# Arrotonda gli angoli del quadrato con il COMANDO FILLET.

I comandi SETQ e COMMAND si potevano raggruppare per evitare di doverli digitare ogni volta come segue:

 ;Programma per ottenere un riquadro ombreggiato
 (setq bs (getpoint "\nIndica il punto in basso a sinistra del riquadro:")
      ad (getcorner bs "\nIndica il punto in alto a destra del riquadro:")
      x1 (car bs)
      y1 (cadr bs)
      x2 (car ad)
      y2 (cadr ad)
      as (list x1 y2)
      bd (list x2 y1)
      tx (/ (- y2 y1) 4))
      pw (/ tx 3.0)
      deltax (- x2 x1)
      hdeltax (/ deltax 2.0)
      deltay (- y2 y1)
      hdeltay (/ deltay 1.75)
      pt (list (+ x1 hdeltax) (+ y1 hdeltay))
      )
 (command "_.PLINE" bs "_W" pw "" bd ad "_W" 0 "" as "_C"
          "_.TEXT" "_S" "STANDARD" "_C" pt tx 0 "INSIDE" "_.TEXT" "" "AutoLISP"
          "_.FILLET" "_R" tx "_.FILLET" "_P" bs
  )

! [[#SECTION00070000000000000000]] Le funzioni matematiche

Le funzioni matematiche sono considerate al pari di una qualunque altra funzione. La sottrazione e la divisione creano sempre grossi problemi se non si capisce come funzionino.

Altra nota dolente, soprattutto in campo scientifico, e' la precisione di Autocad; quando i valori rimangono all'interno di variabili, la precisione e' di 14 cifre, ma se vengono mostrati i risultati all'utente, la precisione cala a 6 cifre, quindi se si richiede all'utente, e non al programma, di reinserire un risultato, potreste ottenere effetti inaspettati.

!! [[#SECTION00071000000000000000]] +

 (+ numero [numero] [numero] ...)

Si ottiene la somma di tutti i numeri. Con un numero solo viene resituito il numero.

!! [[#SECTION00072000000000000000]] *

 (* numero [numero] [numero] ...)

Si ottiene il prodotto di tutti i numeri. con un numero solo viene restituito il numero

!! [[#SECTION00073000000000000000]] -

 (- numero [numero] [numero] ...)

Si ottiene la differenza tra il primo numero e LA SOMMA degli altri numeri. Con un numero solo si sottrae a 0 il numero:

 (- 6)
 -6

!! [[#SECTION00074000000000000000]] /

 (/ numero [numero] [numero] ...)

Si ottiene la divisione fra il primo numero e il PRODOTTO dei restanti. Con un numero solo viene restiuito il numero. '''Se i numeri sono tutti interi verra' restituito come numero il risultato della divisione con la soppressione del decimale:'''

 (/ 5 2)
 2

!! [[#SECTION00075000000000000000]] min

 (min numero numero [numero] ...)

Resituisce il numero piu' piccolo.

!! [[#SECTION00076000000000000000]] max

 (max numero numero [numero] ..)

Restituisce il numero piu' grande.

!! [[#SECTION00077000000000000000]] Massimo comune divisore

 (gcd intero intero)

Resituisce il massimo comune divisore fra due interi.

!! [[#SECTION00078000000000000000]] Resto della divisione

 (rem numero numero [numero] [numero] ...)

Resistuisce il resto della divisione fra il primo numero e il PRODOTTO dei rimanenti.

!! [[#SECTION00079000000000000000]] Valore assoluto

 (abs numero)

Restituisce il valore assoluto (o modulo) del numero dato.

!! [[#SECTION000710000000000000000]] Radice quadrata

 (sqrt numero)

Restituisce la radice quadrata del numero dato, ma il numero deve essere posistivo (non esiste la radice di un numero negativo e autocad non usa i numeri immaginari). Si consiglia di utilzzare la funzione ABS per rendere il numero positivo.

!! [[#SECTION000711000000000000000]] Logaritmo

 (log numero)

Restituisce il logaritmo naturale (img4.png) di un numero, che deve essere positivo. Si consiglia di utilzzare la funzione ABS per rendere il numero positivo.

!! [[#SECTION000712000000000000000]] Elevamento a potenza

 (expt base potenza)

Restituisce la base elevata alla potenza.

!! [[#SECTION000713000000000000000]] Elevamento di img5.png

 (exp potenza)

Eleva il numero img5.png (numero di Nepero, pari a 2.718281828) alla potenza desiderata.

! [[#SECTION00080000000000000000]] Funzioni con le stringhe

Le stringhe sono variabili che contengono testo, sono utili sia per guidare l'utente dicendogli cosa fare, sia per disegnare scritte o altri oggetti letterari.

!! [[#SECTION00081000000000000000]] Concatenazione

 (strcat [stringa] [stringa] [stringa] ...)

Restituisce una stringa che e' l'unione di tutte le stringhe date, se non sono fornite strighe, e' restituita una stringa vuota:

 ""

!! [[#SECTION00082000000000000000]] Caratteri tutti maiuscoli o tutti minuscoli

 (strcase stringa [flag])

La funzione strcase trasforma tutti i caratteri di una stringa in caratteri maiuscoli, sia che il flag non ci sia o sia impostato su VERO, mentre se il flag e' impostato su FALSO, allora la stringa verra' convertita in caratteri tutti minuscoli.

!! [[#SECTION00083000000000000000]] Lunghezza di una stringa

 (strlen [stringa] [stringa] ...)

Restituisce la somma di tutti i caratteri di tutte le stringhe date.

!! [[#SECTION00084000000000000000]] Estrarre stringhe

 (substr stringa inizio_intero [lunghezza_intero])

Restituisce la parte della striga a cominciare dal carattere numero ''inizio'' e per un numero di caratteri pari alla ''lunghezza''. Se ''lunghezza'' non viene indicato o e' piu' lingo della rimanente parte della stringa, verra' comunque estratta tutta la rimanente parte della stringa a partire dal carattere numero ''inizio''.

! [[#SECTION00090000000000000000]] Funzioni con liste

Le liste sono una serie di valori raggruppati da parentesi, sfortunatamente non e' possibile manipolarli o immetterli direttamente, ma e' necessario utilizzare delle funzioni.

Ricordiamo che i punti, per esempio, sono una lista dove il primo valore e' X, il secondo e' Y ed il terzo e' Z.

!! [[#SECTION00091000000000000000]] Creazione

 (list espressione)

Con questo comando si crea una lista a prescindere dai tipi di dati che si raggruppano, esempio:

 (list 0 2.3 "Ciao mondo")
 (0 2.3 "Ciao mondo")

Si possono creare liste dentro liste:

 (setq a (list (list 1 aaa) (list 2 bbbb) (list 3 cccccc) ))
 !a
 ((1 aaa) (2 bbbb) (3 cccccc))

!! [[#SECTION00092000000000000000]] Estrazioni di elementi

Esistono tanti modi per estrarre i valori da una lista, tutti complicati, ecco le funzioni piu' semplici.

 (car lista)

Restituisce il primo elemento della lista.

 (last lista)

Restituisce l'ultimo elemento dell lista.

 (nth ennesimo_intero lista)

Resituisce l'ennesimo elemento della lista, ATTENZIONE, comincia a contare a 0, non da 1; quindi il per ottenere il terzo elemento della lista:

 (nth 2 mialista)

Inoltre se il numero ''ennesimo'' inserito non e' valido (per esempio 7 in una lista di 3 elementi), non verra' estratto nulla.

 (member elemento lista)

Restituisce la lista solo a partire dall'elemento indicato.

!! [[#SECTION00093000000000000000]] Ordinare una lista al contrario

 (reverse lista)

Restituisce la lista data con l'rdine degli elementi invertito (l'ultimo diventa il primo e cosi' via).

!! [[#SECTION00094000000000000000]] Numero di elementi di una lista

 (lenght lista)

Restituisce il numero di elementi di una lista.

!! [[#SECTION00095000000000000000]] Fusione di liste

 (append [lista] [lista] ...)

Unisce tutte le liste in un'unica lista.

! [[#SECTION000100000000000000000]] Definire funzioni personalizzate

La potenza maggiore di Autolisp risiede nel poter creare una serie di funzioni utili al proprio lavoro da poter chiamare quando si vuole.

Le funzioni permettono di scrivere una volta sola una serie di comandi e di richiamarli tutte le volte che si vuole, rimparmiando un sacco di tempo nella scrittura dei programmi.

Fino ad ora, dopo aver scritto un file Autolisp, appena caricato venivano immediatamente eseguite tutte le operazioni descritte. Creando una funzione, quando si carica il file autolisp, e' caricata anche la funzione (o le funzioni, se ne abbiamo scritte piu' di una all'interno dello stesso file autolisp) pronta per l'uso. Bastera' digitare il nome della funzione per attivarla.

E' importante sapere che quando autocad crea un nuovo disegno, va a caricare immediatamente il file ''ACAD.LSP'' (dalla versione 2000 in poi hanno complicato le cose, ''acad.lsp'' viene caricato goni volta che si avvia autocad, ''acaddoc.lsp'' e' caricato per ogni nuovo disegno[[#tex2html4]][[#foot184 | '^1^']]). Dentro questo file possimo aggiungere tutte le funzioni che vogliamo, quelle che cominciano per ''S:'' saranno eseguite automaticamente all'avvio; quelle che cominciano per ''C:'' saranno considerate come dei comando Autocad a tutti gli effetti, pronti per essere esguiti.

ATTENZIONE Se date alla vostra funzione un nome uguale a quello di una funzione di Autocad, quella funzione sara' sovrascritta fino a che o non chiudete il disegno o autocad.

Vediamo la sintassi per indicare una funzione, tutte le parentesi tonde sono obbligatorie:

 (defun nomefunzione ( [argomento] [argomento] ... / [variabilelocale]
 [variabile locale] ...)  espressione )

Esempi:

 (defun prova () (prompt "\n Prova!\n"))
 (defun prova2 (a b ) (prompt "\n Prova 2"))
 (defun prova3 (a / b c d e) (prompt "\n Prova 3"))
 (defune prova4 (/ a b ) (prompt "\n Prova 4"))

Gli argomenti sono delle finestre per passare dei dati direttamente alla funzione in modo che li possa utilizzare, per esempio se dichiaro la seguente funzione:

 (defun ciaobello (nome) (prompt (strcat "Ciao" nome)))
 (setq a (getstring "Inserisci il tuo nome"))
 (ciaobello a)

Il primo, e in questo caso l'unico, argomento viene passato alla funzione per essere elaborato.

Le funzioni da poter chiamare come comandi autocad debbono cominciare per ''C:'' e non debbono avere argomenti.

Se si incasina di brutto Autocad con le nostre funzioni digitare ''reset'' e verranno ripristinate le variabili di ambiente.

! [[#SECTION000110000000000000000]] Funzioni logiche

I test si eseguono attraverso l'uso di funzioni, percio' usano la notazione con le parentesi, vediamo che tipi di test sono possibili.

!! [[#SECTION000111000000000000000]] AND

 (and espressione [espressione] ...)

Ritorna il valore vero solo se tutte le espressioni sono vere, altrimenti falso.

!! [[#SECTION000112000000000000000]] OR

 (or espressione [espressione] ...)

Ritorna il valore vero se almeno una delle espressioni e' vera.

!! [[#SECTION000113000000000000000]] NOT

 (not espressione)

Ritona l'opposto del valore logico dell'espressione, se l'espressione e' vera, ritorna falso, e viceversa.

!! [[#SECTION000114000000000000000]] EQ, equal, =

Sia EQ, EQUAL che = servono per verificare se 2 espressioni sono uguali, ma si usano in maniera leggermente diversa:

 (eq espressione1 espressione2)

EQ verifica che il risultato dell'espressione1 sia identico a quello dell'espressione2, restituitendo T se e' vera, nil se e' falsa.

 (equal espressione1 espressione2 [approssimazione])

Equal e' identico a EQ, ma si puo' dichiarare con quale approssimazione vanno uguagliati i risultati delle due espressioni.

 (= valor1 valor2 [valor3] ... )

La funzione = funziona come EQ, controlla se tutti i valori sono uguali, pero' accetta solo come valori numeri e stringhe (o funzioni che danno tali risultati).

!! [[#SECTION000115000000000000000]] Maggiore, minore, diverso

I confronti maggiore minore e diverso si fanno con le seguenti funzioni:

: '''img6.png''': Minore, serve a confrontare degli elementi e verificare se ogni elemento e' minore del successivo
: '''img7.png''': Minore o uguale, serve a confrontare degli elementi e verificare se ogni elemento e' minore o uguale del successivo
: '''img8.png''': Maggiore, serve a confrontare degli elementi e verificare se ogni elemento e' maggiore del successivo.
: '''img9.png''': Maggioreo uguale, serve a confrontare degli elementi e verificare se ogni elemento e' maggiore o uguale del successivo.
: '''/=''': Diverso, serve a confrontare degli elementi e verificare se ogni elemento e' diverso dal successivo.

Esempi:

 (= (+ 3 2) (- 10 5))
 T
 (< 3 5 7 9 12)
 T

! [[#SECTION000120000000000000000]] Scegliere (IF)

Come in tanti altri linguaggi di programmazione, anche in AutoLisp e' possibile compiere delle scelte, grazie a una funzione: IF.

 (IF test espressione1 [espressione2])

Il computer esegue un test, se il risultato e' vero, allora verra' eseguita l'espressione1 altrimenti l'espressione2. Esempio:

 (if (< a 50) (prompt "a maggiore di 50")
 (prompt "a minore o ugugale di 50") )

Chiaramente noi vorremo eseguire piu' di una istruzione se un test e' vero o falso, per fare cio' bisogna utilizzare la funzione PROGN che serve ad eseguire piu' espressioni in un solo paio di parentesi, e restituisce il valore dell'ultima espressione:

 (progn espressione [espressione]...)

! [[#SECTION000130000000000000000]] Esecuzioni cicliche

Esistono alcune funzioni fondamentali per la ripetizione piu' volte degli stessi comandi.

!! [[#SECTION000131000000000000000]] Repeat

 (repeat intero espressione [espressione] ...)

Ripete il numero di volte indicato dall'intero tutte le espressioni.

!! [[#SECTION000132000000000000000]] while

 (while test espressione [espressione] ...)

La funzione while esegue il test se e' vero esegue tutte le espressioni, poi esegue di nuovo il test, se e' vero riesegue tutte le espressioni, e cosi' via. E' molto utile come funzione, ma e' facile costruire dei circoli da cui non si esce piu'. Esempi corretti:

 (setq a 0)
 (while (< a 5) (promt "Ciao!") (setq a (+ a 1))
 Ciao!Ciao!Ciao!Ciao!Ciao!nil

!! [[#SECTION000133000000000000000]] foreach

 (foreach var lista espressione [espressione]...)

La funzione foreach serve per eseguire un'operazione su tutti gli elementi di una lista, la variabile var serve per indicare nelle espressione dove va l'elemento della lista. Esempio:

 line
 (foreach punto listapunti (command punto))

! [[#SECTION000140000000000000000]] Visualizzare lo schermo del prompt

Puo' capitare spesso che si debbano visualizzare piu' righe di quelle 2 o 3 che si vedono in basso del promt di Autocad, per far apparire una bella finestra ampia con tutte le righe che ci servono basta usare la funzione textscr:

 (textscr)

Per far tornare tutto a posto basta usare la funzione graphscr:

 (graphscr)

! [[#SECTION000150000000000000000]] Visualizzazione e stampa di dati

Una funzione per visualizzare sullo schermo una stringa e' la funzione PROMPT:

 (prompt "Ciao a tutti,\n io sono una stringa!")
 Ciao a tutti,
 io sono una stringa!nil

Chiaramente la funzione restituisce anche il valore nil.

Altre funzioni visualizzare su schermo o stampare sono PRINT, PRINC e PRIN1:

 (print espressione [file-desc])
 (princ espressione [file-desc])
 (prin1 espressione [file-desc])

Tutte e tre scrivono l'espressione o su schermo o, se indicato sul file file-desc, e restituiscono l'espressione. La differenza risiede in:

* PRINT aggiunge sempre una nuova riga prima di un'espressione e uno spazio dopo.
* PRINC non elabora i caratteri come
 \n, \\

! [[#SECTION000160000000000000000]] Approssimazioni

Autocad permette, attraverso il comando UNITS, di decidere come e con che precisione verranno prese le distanze e gli angoli e quindi tutte le altre misure. Comunque di un qualunque risultato e' sempre possibile modificarne l'approssimazione con il comando RTOS:

 (rtos numero [modo] [precisione])

Il modo rappresenta il formato con cui deve essere restituito il numero, la prescisione il numero di decimali dell'approssimazione.

|| border="1" cellpadding="3"
||!'''Modo'''||!'''Sistema di misura'''||!'''Output'''||
||1||Scientifico||8.42E+00||
||2||Decimale||8.42||
||3||Ingegneristico||8.42''||
||4||Architettonico||8 1/2''||
||5||Frazionario||8 1/2||

!! [[#SECTION000161000000000000000]] Approssimazioni con gli angoli

Gli angoli vengono trattati in una maniera completamente diversa dalle altre unita' di misura (che discendono dalle distanze). La funzione per le approssimazione degli angoli e' ANGTOS:

 (angtos angolo [modo] [precisione])

Il numero restituito dipende dal modo scelto (vedi tabella piu' in basso) e dalla precisione.

|| border="1" cellpadding="3"
||!'''Modo'''||!'''Sistema di misura'''||!'''Output'''||
||||Gradi decimali||45.0000||
||1||Gradi/Minuti/Secondi||45d0'0''||
||2||Gradi centesimali||50.0000g||
||3||Radianti||0.784r||
||4||Unita' topografiche||N 45d0'0''E||

! [[#SECTION000170000000000000000]] Conversioni di unita' di misura

Il file ACAD.UNT contiene le definizioni di tutte le unita' di misura che il comando CVUNIT puo' convertire:

 (cvunit numero da_unit a_unit)

Restituisce il numero convertito dall'unita' da_unit all'unita' a_unit. Mi raccomando le unita' sono stringhe, quindi vanno messe tra virgolette.

 (cvunit 1 "minute" "second")
 60.0

Ecco il contenuto del file ACAD.UNT, che potete modificare a vostro piacimento per aggiungere o corregere le conversioni (fatevi una copia di riserva, non si sa mai...):

 ;
 ;  AutoCAD unit definition file -- ACAD.UNT
 ;

 ; Basic SI units
 *meter(s),metre(s),m
 -1,0,1,0,-1,4.1214856408e11,0
 *kilogram(s),kg
 0,0,0,0,1,1.0977481015e30,0
 *second(s),sec
 -2,0,1,0,-1,1.235590484e20,0
 *ampere(s),amp(s)
 2,1,-1,0,1,0.050513907838,0
 *kelvin,k
 2,0,0,-1,1,1.6863043358e-10,0
 *candela,cd
 4,0,-1,0,2,9.885226216e-8,0

 ; Derived SI units
 *celsius,centigrade,c
 2,0,0,-1,1,1.6863043358e-10,4.6061402932e-8
 *rankine
 2,0,0,-1,1,9.3683574212e-11,0
 *fahrenheit
 2,0,0,-1,1,9.3683574212e-11,4.30635285578e-8
 *gram(s),gm,g
 =kg 0.001
 *newton(s),n
 =meter kilogram / second^2
 *pascal,pa
 =newton/meter^2
 *joule(s)
 =newton meter

 ; Exponent synonyms
 *square,sq
 ^2
 *cubic,cu
 ^3

 ; Units of time
 *centur(y.ies)
 =100 year
 *day(s)
 =86400 second
 *decade(s)
 =10 year
 *fortnight(s)
 =14 day
 *hour(s),hr
 =3600 second
 *milleni(um.a)
 =1000 year
 *minute(s),min
 =60 second
 *sidereal_year(s)
 =365.25636 day
 *tropical_year(s)
 =365.24220 day
 *week(s),wk
 =604800 second
 *year(s),yr
 =365 day

 ; Units of length
 *Angstrom(s)
 =meter 1E-10
 *astronomical_unit(s),au     
 =meter 149597870000     
 *bolt(s)
 =meter 36.576
 *cable(s)                    ; U.S. cable length
 =meter 219.456
 *caliber
 =meter 0.000254
 *centimeter(s),centimetre(s),cm(s)
 =meter 0.01
 *chain(s)                    ; Gunther's chain length
 =meter 20.1168
 *cubit(s)
 =meter 0.4572
 *decimeter(s),decimetre(s),dm
 =meter 0.1
 *dekameter(s),dekametre(s),dam
 =meter 10
 *fathom(s),fath
 =meter 1.8288
 *f(oot.eet),ft,'
 =meter 0.3048
 *furlong(s),fur
 =meter 201.168
 *gigameter(s),gigametre(s)
 =meter 1E9
 *hand(s)
 =meter 0.1016
 *hectometer(s),hectometre(s),hm
 =meter 100
 *inch(es),in(s),"
 =meter 2.54E-2
 *kilometer(s),kilometre(s),km
 =meter 1000
 *league_nautical
 =meter 5556
 *league_statute
 =meter 4828.032
 *light_year(s)
 =meter 9.46053E15
 *link(s)                      ; Gunther's link length
 =meter 0.201168
 *microinch(es)
 =meter 2.54E-8
 *micron(s)
 =meter 1E-6
 *mil(s)
 =meter 2.54E-5
 *mile_nautical,inm            ; International Nautical Mile
 =meter 1852
 *mile_statute,mile(s),mi
 =meter 1609.344
 *millimeter(s),millimetre(s),mm(s)
 =meter 0.001
 *millimicron(s),nanometer(s),nanometre(s),nm(s)
 =meter 1E-9
 *pace(s)
 =meter 0.762
 *palm(s)
 =meter 0.0762
 *parsec(s)
 =meter 3.085677E16
 *perch(es)
 =meter 5.0292
 *pica(s)
 =meter 0.0042175176
 *point(s)
 =meter 0.0003514598
 *rod(s),pole(s)
 =meter 5.0292
 *rope(s)
 =meter 6.

! [[#SECTION000180000000000000000]] Selezionare un'oggetto

Ogni linea, cerchio o elemento che disegnamo con Autocad, e' conservato in un database, quindi ogni elemento puo' essere richiamato conoscendo il nome che ha nel database. Sfortunatamente il nome usa una convenzione assurda (''166766'', ''166e544''), quindi e' impossibile stabilire a priori il nome che ha un oggetto senza prima averlo selezionato e chiesto il suo nome.

Per chiedere il nome di un oggetto esiste la funzione ENTSEL:

 (entsel [messaggio])

Restituisce il nome dell'elemento e il punto dove si e' cliccato. Il messaggio rappresenta la frase da far apparire quando chiediamo di selezionare un oggetto.

 (entsel) ;selezioniamo qualcosa
 (<Entity name: 151123> (4.3 1.0 0.0))

Poiche' a noi serve solamente la prima voce, cioe' il nome, possiamo associare la funzione CAR che estrae il primo elemento di una lista:

 (car (entsel)) ;selezioniamo qualcosa
 <Entity name: 151123>

Quindi se vogliamo memorizzare il nome di un'entita' in una varibaile basta:

 (setq a (car (entsel)))

Solo in questa maniera potremo maneggiare agevolmente le entita'.

E' possibile scorrere tutte le voci del database con il comando ENTNEXT:

 (entnext [enome])

Restituisce il nome dell'oggetto successivo nel database al nome (enome) dato, altrimenti il da' il primo nome presente nel database.

Il comando ENTLAST permette di ottenere il nome dell'ultimo oggetto inserito non cancellato:

 (entlast)

!! [[#SECTION000181000000000000000]] Eliminare un oggetto

Per eliminare un oggetto esiste la funzione ENTDEL:

 (entdel enome)

!! [[#SECTION000182000000000000000]] Far ''scomparire'' e ''riapparire'' un oggetto

La funzione REDRAW permette di visualizzare un oggetto tratteggiato come se fosse selezionato, farlo diventare invisibile e farlo riapparire.

 (redraw [enome] [modo])

Se non si specifica il nome (e quindi il modo) verra' ridisegnato tutto il disegno (equivale a rigenera), altrimenti verra' applicato all'oggetto il modo scelto:

# L'oggetto e' semplicemente ridisegnato
# L'oggeto diventa invisibile
# L'oggeto e' evidenziato
# L'oggetto e' disevidenziato (non e' piu' evidenziato).

!! [[#SECTION000183000000000000000]] Selezionare piu' oggetti

Per seleziona piu' oggetti c'e' la funzione SSGET, che e' piena di opzioni. Come principiio di base, SSGET permette di selezionare piu' oggetti:

 (ssget)  ;selezioniamo un gruppo di oggetti
 <Selection set: 4>

La frase ''img6.pngSelection set: 4img8.png'' indica che c'e' una parte della RAM (la quarta) del pc che conserva in memoria la selezione, anche in questo caso possiamo memorizzare in una variabile:

 (setq a (ssget))

Un limite di Autocad e' che non pou' memorizzare contemporaneamente piu' di 128 gruppi distinti di oggetti, quindi non potremo mai usare piu' di 128 variabili distinte per i gruppi di oggetti.

Ora che abbiamo preso dimestichezza con la funzione SSGET, possiamo passare alle sue opzioni:

 (ssget [modo] [punto1 [punto2]] [lista_di_punti] [filtro])

Il modo rappresenta la maniera con cui sono scelti gli oggetti:

: ''''''': Seleziona l'entita' che passa per il punto selezionato:
 (ssget ' ( 10 5))
: '''L''': Seleziona l'ultima entita' disegnata:
 (ssget "L")
: '''P''': Seleziona il precedente gruppo.
 (ssget "P")
: '''I''': Seleziona il gruppo di selezione implicito di un altro comando.
 (ssget "I")
: '''W''': Seleziona gli oggetti interni completamente la finestra:
 (ssget "W" ' (0 10) ' (10 15))
: '''C''': Seleziona gli oggetti interni e che intersecano la finestra:
 (ssget "C" ' (0 10) ' (10 15))
: '''WP''': Seleziona gli oggetti interni al poligono definito dalla lista di punti:
 (ssget "WP" listadipunti)
: '''CP''': Seleziona gli oggetti interni e che intersecano il poligono definito dalla lista di punti:
 (ssget "CP" listadipunti)
: '''F''': Seleziona solo gli oggetti che intersecano la polilinea definita dalla lista di punti:
 (ssget "F" listadipunti)
: '''X''': Seleziona tutto:
 (ssget "X")

Inoltre e' possibile filtrare gli oggetti che vogliamo nella selezione, per fare questo bisogna indicare un codice (per esempio per indicare il colore) seguito da un valore (per esempio ''rosso''). La tabella seguente spiega i codici possibili:

|| border="1" cellpadding="3"
||!'''Codice'''||!'''Descrizione'''||!'''Tipo di dato'''||!'''Esempio'''||
||||Tipo di entita'||Stringa||(0 . ''LINE'')||
||2||Nome del blocco inserito||Stringa||(2 . ''ARROW'')||
||3||Entita' di quotatura (dimstyle)||Stringa||(3 . ''TOLERANCE'')||
||6||Nome del tipo di linea||Stringa||(6 . ''CENTER'')||
||7||Nome dello stile di testo||Stringa||(7 . ''STANDARD'')||
||8||Nome del layer||Stringa||(8 . ''OBJ02'')||
||39||Spessore||Reale||(39 . 6.0)||
||62||Numero del colore||Intero||(62 . 1)||
||66||Attributi per il blocco inserito||Intero||(66 . 1)||
||210||Direzione di estrusione 3D||Lista di punti||(210 1.0 0.0 -0.5)||

Esempio:

 (ssget "X"  '((0 . "CIRCLE") (8 . "ciccio")))

Cosi' selezioniamo tutti i cerchi sul layer ''ciccio''.

Ho usato ' al posto di LIST e . al posto di CONS; ma e' uguale.

Tutto quello che scrivete nel filtro e' sensibile ai caratteri jolly di Autocad, quindi potete sfruttarlo a vostro vantaggio.

Altra nota molto importante e' la possibibilta' di indicare espressioni come ''minore di...'' o ''maggiore di...'' o qualsiasi test ci venga in mente, grazie al codice -4:

 (ssget "X"  '((0 . "CIRCLE") (-4 . "<=") (39 .  1.0))

Abbiamo selezionato tutti i cerchi con spessore minore o uguale di 1mm.

Se facciamo test con punti o altri tipi di liste l'espressione va scritta cosi', per indicare dove va il test:

 ... (-4 . ",,<=") (10 . (0.0 0.0 1.0) ...

Scegliamo cose con quota Z minore o uguale a 1.

Come se tutto questo non bastasse possiamo gli operatori logici AND, OR, XOR e NOT per filtrare ancora meglio. Ogni operatore logico apre con, per esempio AND, '' (ssget "X" ;selezioniamo tutto '( ;inizia il filtro ("<OR") ;inizia OR ("<AND") ;inizia AND (0 . "LINE");solo linee (62 . 5) ;con colore blu ("AND>") ;chiudiamo AND ("<AND") ;apriamo AND (0 . "POLYLINE");polilinee (6 . "DASHED");tratteggiate ("AND>") ;chiudiamo AND ("OR>") ;chiudiamo OR ) )  Quindi selezioneremo linee blu e polilinee tratteggiate.

!!! [[#SECTION000183100000000000000]] Gestione dei gruppi di selezione

Molto comodi sono i seguenti comandi:

 (sslength selection-set)

Resituisce il numero di elementi diun gruppo (il selection-set).

 (ssmemb enome selectio-set)

Restituisce l'enome se fa parte del selection-set.

 (ssadd enome selection-set)

Aggiunge l'elemento enome alla selezione.

 (ssdel enome selection-set)

Cancella l'elemento enome dal gruppo selection-set.

! [[#SECTION000190000000000000000]] Le proprieta' delle entita'

Ogni oggeto ha delle propriet� basta cliccare sul pulsante proprieta' e poi su un oggetto per leggerle, anche AutoLisp ha la possibilita' di accedere alle proprieta'.

 (entget enome [opzioni])

Restituisce una lista delle proprieta' dell'oggetto che ha l'enome.

 (setq a (entget (car (entsel))));selezioniamo una linea
 !a
 ((-1 . <Entity name: 1641158>) (0 . "LINE") (330 . <Entity name: 16410f8>) (5 .
 "2B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
 "AcDbLine") (10 158.265 217.772 0.0) (11 301.16 112.412 0.0)

Come vedete la lista delle proprieta' e' formata da un numero che indica la proprieta' seguito dal valore della proprieta'.

Per maneggiare meglio queste liste di liste esiste il comando ASSOC che restituisce solamente la sottolista (proprieta') che vogliamo noi:

 (assoc identificativo lista)

L'identificativo e' il primo elemento della sottolista che deve essere estratta, facendo riferimento all'esempio precedente:

 (assoc 0 a)
 (0 . "LINE")

oppure

 (assoc 5 a)
 (5 . "2B")

Ecco una tabella con la spiegazione di tutti i codici DXF, cioe' le proprieta' possibili degli oggetti:

|| border="1" cellpadding="3"
||!'''Codice'''||!'''Descrizione'''||
||-3||Dato entita' esteso||
||-2||Nome entita' secondario||
||-1||Nome entita' primario||
||||Tipo entita'||
||1||Contenuto del testo primario||
||2||Nome: modello, blocco, tag||
||3||Prompt||
||5||Identificatore||
||6||Nome del tipo linea||
||7||Nome stile testo||
||8||Nome piano||
||10||X: di partenza, del punto centrale, del punto angolare, di definizione, del punto di elevazione (2d ply).||
||11||X finale: della linea, del punto angolare, del punto di allineamento, del punto medio di Dim.||
||12||X del punto angolare, di inserimento.||
||13||X del punto angolare, di definizione.||
||14, 15, 16||X del punto di inserimento di DIMENSION.||
||20||Y: di partenza, del punto centrale, del punto angolare, di definizione, del punto di elevazione (2d ply).||
||21||Y finale: della linea, del punto angolare, del punto di allineamento, del punto medio di Dim.||
||22||Y del punto angolare, di inserimento.||
||23||Y del punto angolare, di definizione.||
||24, 25, 26||Y del punto di inserimento di DIMENSION.||
||30||Z: di partenza, del punto centrale, del punto angolare, di definizione, del punto di elevazione (2d ply).||
||31||X finale: della linea, del punto angolare, del punto di allineamento, del punto medio di Dim.||
||32||X del punto angolare, di inserimento.||
||33||X del punto angolare, di definizione.||
||34, 35, 36||X del punto di inserimento di DIMENSION.||
||38||Elevazione entita'.||
||39||Spessore entita'.||
||40||Raggio, misura, larghezza o lunghezza principale.||
||41||Fattore di scala X o larghezza.||

|| border="1" cellpadding="3"
||42||Fattore di scala Y o convessita'.||
||43||Fattore di scala Z.||
||44||Spaziatura colonne.||
||45||Spaziatura righe.||
||50||Angolo ri rotazione o di partenza, curva tangente.||
||51||Angolo finale, inclinazione angolo, angolo dall'orizzontale, Dim. direzione orizzontale.||
||52||Dim. inclinazione angolo.||
||53||Dim. angolo di rotazione testo.||
||62||Colore.||
||66||Flag entita' seguente.||
||67||Flag spazio foglio.||
||70||Tipo dimensione, flag vertice o polilinea, flag attribbuto, contatore colonna, flag bordo invisibile.||
||71||Flag generazione testo, contatore riga, contatore vertice mesh M.||
||72||Giustificazione testo, contatore vertice mesh N.||
||73||Lunghezza campo, Densita M supreficie liscia, Giustofocazione verticale testo.||
||74||Densita' N superficie liscia.||
||75||Tipo superficie liscia.||
||210||Punto X di trascinamento.||
||220||Punto Y di trascinamento.||
||230||Punto Z di trascinamento.||

I valori negativi vengono utilizzati solo temporaneamente e non vengono salvati su file.

Tre dei valori precedenti vengono riportati dal comando assoc e simili, SOLO  se non hanno il valore di default: 39 (0.0), 6 (BYLAYER), 62 (BYLAYER).

!! [[#SECTION000191000000000000000]] Modificare le proprieta' di un oggetto

Ora sappiamo come ottenere le proprieta' di un oggetto, pero' e' anche possibile modificarle. Per fare questo bisogna solo aggiornale il database di autocad, cambiando i dati della lista che contiene le proprieta'.

Passiamo ad un esempio pratico per capire bene:

 (setq linea (entget (car (entsel))));selezioniamo una linea
 ((-1 . <Entity name: 1641158>) (0 . "LINE") (330 . <Entity name: 16410f8>) (5 .
 "2B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
 "AcDbLine") (10 158.265 217.772 0.0) (11 301.16 112.412 0.0)

Immaginiamo di volerla fare partire dal punto (0.0 0.0 0.0) invece dell'attuale (158.265 217.772 0.0), allora selezioniamo questo dato con il comando SUBST:

 (subst nuovo_valore vecchio_valore lista)

usandolo cosi':

 (subst (10 0.0 0.0 0.0) (10 158.265 217.772 0.0) linea)

Poi aggiorniamo il database, con il comando ENTMOD, in modo che le nostre modifiche abbino effetto:

 (entmod linea)

Il comando entmod se riesce nell'aggiornamento resituisce i dati aggiornati, se fallisce restituisce nil.

!!! [[#SECTION000191100000000000000]] Modificare le proprita' di ogggetti complessi come polilinee e blocchi

In Autocad esistono oggetti complessi, formati da piu' oggetti, come le polilinee e i blocchi.

Le polilinee sono oggetti formatti da tante linee o archi, tutti attaccati ognuno all'estremo di quello precedente. Quando si seleziona un oggetto della polilinea, si seleziona tutta la polilinea.

I blocchi sono simili, sono un insieme di elementi associati ad un nome, il nome del blocco in questione. Quando si seleziona un elemento del blocco, si seleziona tutto il blocco; se si modifica il blocco, si modificano automaticamente tutti i blocchi con lo stesso nome. In un disegno con la ripetizione di uno stesso oggetto in piu' parti del disgno i blocchi sono utilissimi: immaginiamo di aver disegnato una piastra con 20 viti del diametro di 6mm e decidiamo di sostituire con viti del diametro da 12, bastera modificarne una, se e' un blocco, e tutte le altre si modificheranno nella stessa maniera.

In autocad le polilinee e i blocchi sono memorizzati nel database degli oggetti in una maniera alquanto scomoda da maneggiare, cioe' sono suddivisi in tanti elementi separati tutti uno dietro l'altro e con l'ultimo elemento che si chiama SEQEND (ricordo che il nome e' la proprieta' 0) e generalmente non contiene dati riguardanti l'oggetto. La tabella sottostante dovrebbe dare un'idea:

|| border="1" cellpadding="3"
||Nome||Layer||ecc.||
||POLYLINE||||||
||VERTEX||||||
||VERTEX||||||
||VERTEX||||||
||SEQEND||||||

In una polilinea ogni elemento e' chiamato vertice, anche se una curva.

Abbiamo visto che per maneggiare un oggetto complesso, bisgona per forza utilizzare un ciclo while che ci permetta di memorizzare tutti i dati e che esca quando incontra il nome SEQEND.

! [[#SECTION000200000000000000000]] Creare un'entita'

Per creare un'entita' da zero, basta usare il comando ENTMAKE:

 (entmake edati)

Gli edati sono una lista di dati che definisce l'entita'. Se volete sapere come deve essere scritta li lista date il comando:

 (entget(car(entsel)))

Per esempio, una linea e':

 (
 (0 . "LINE")
 (330 . <Entity name: 16410f8>)
 (5 . "2B")
 (100 . "AcDbEntity")
 (67 . 0)
 (410 . "Model")
 (8 ."0")
 (100 . "AcDbLine" )
 (10 63.5551 243.49 0.0)
 (11 273.744 124.856 0.0)
 (210  0.0 0.0 1.0)
 )

Comunque per creare una entita' c'e' non e' necessario dare molti dati, vediamo come si descriva un punto:

 (entmake '((0 . "POINT") (10 0.0 0.0 0.0)))

oppure un testo:

 (enmake '((0 . "TEXT") (10 2.0 1.0 0.0) (40 . 0.25) (1 . "Autolisp e'
 complicato")))

Se bisogna fare un'entita' complessa, come una polilinea, allora si da un comando ENTMAKE col nome dell'entita' (per es. "POLYLINE"), e poi si creano gli elementi ("VERTEX") e poi si crea il "SEQEND":

 (entmake '((0 . "POLYLINE") (62 . 2)))
 (entmake '((0 . "VERTEX") (10 1.0 1.0 0.0) ))
 (entmake '((0 . "VERTEX") (10 2.0 1.0 0.0) ))
 (entmake '((0 . "VERTEX") (10 2.0 2.0 0.0) ))
 (entmake '((0 . "VERTEX") (10 3.0 1.0 0.0) ))
 (entmake '((0 . "SEQEND")))

! [[#SECTION000210000000000000000]] Identificatori degli elementi del disegno

Una delle cose piu' insopportabili di AutoLisp e' che in un disegno i nomi che sono assegnati agli elementi sono del tutto casuali, e ogni volta che un disegno e' riaperto, i nome nel database degli elementi del disegno cambiano nuovamente in una maniera del tutto imprevedibile.

Per evitare di far impazzire i programmatori di Autolisp, e' stata introdotta la possibilita' di immettere degli identificatori nel file Autocad che diano dei nomi fissi alle entita', in modo che non cambiano ogni volta che il disegno venga riperto: tali identificatori prendono il nome di ''Handles''. Gli Handles possono essere disattivati solo da parte dell'utente, ma non da Autolisp direttamente.

Come se non bastasse a complicare il tutto, gli Handles sono scritti nel file in esadecimale, e oltre un certo numero, benche' scritti correttamente da Autocad, AutoLisp non riesce piu' a gestirli.

Per vedere se gli handles sono attivati, o per attivarli c'e' il comando HANDLES:

 HANDLES

Per avere il nome associato ad un handle, c'e' il comando HANDGET:

 (handget handle)

Esempio:

 (handget "1")
 <Entity name: 1641008>

! [[#SECTION000220000000000000000]] Le tabelle dei simboli

I simboli, in autolisp, sono i rappresentanti degli elementi costituenti un file autocad, i simboli sono i layer, le linee, i testi, e cosi' via. Le tabelle dei simboli sono un modo per organizzare i dati in un disegno autocad, tutti i layer sono indicati nella tabella layer e cosi' via. Poiche' autocad raggruppa i simboli, e' possibile sia ottenere i dati rigurdanti un simbolo, molto velocemente; come al solito l'ordine di memorizzazione e' causale, quindi si dovra' scorrere una tabella fino a trovare l'elemento cercato.

I comando per le tabelle sono i seguenti:

 (tblsearch nome_tabella nome_elemento [flag])

Ritorna l'elemento cercato (per esempio il layer 0), se il flag e' posto a T, restituira' il valore successivo.

! [[#SECTION000230000000000000000]] Input/Output sui files

Autocad per lavorare un file, cioe' per editare un file su cui noi possiamo salvare alcuni dati, tipo il numero di linee o di blocchi, deve dire al sistema operativo che il file e' in uso e altri programmi non debbono interferire con esso. In gergo questa operazione e' chiamata ''aprire uno stream verso un file''.

Per aprire uno stream si usa il comando open:

 (open nome_file modo)

Il modo di aprire uno stream puo' essere:

* Sola lettura (r)
* Scrittura (w)
* Aggiuntadati ad un files esistente (a)

La funzione OPEN, restituisce un descrittore del file, il descrittore del file e' la sigla che utilizza il sistema operativo per identificare il file. Una volta conosciuto il descrittore di un file, non ci serve piu' sapere la posizione o in quale periferica si trova il file.

Attenzione: i sistemi operativi hanno un numero elevato, ma non infinito, di possibili file da poter tenere aperti; ricordatevi sempre di chiudere lo stream verso un file quando siete sicuri che non dovrete piu' utilizzarlo. Per chiudere un file si usa il comano CLOSE:

 (close descrittore_file)

MOLTA ATTENZIONE:  quando non si chiude un file e si spegne il sistema operativo, ogni file non chiuso diventa UN FILE PERSO, lo spazio occupato dal file sul disco fisso e' considerato a tutti gli effetti come UN CLUSTER PERSO.

Esistono dei nomi di files particolari, che in realta' rappresentano particolari dispositivi del pc, ecco un elenco:

: '''CON''': Monitor
: '''PRN''': Stampante collegata alla prima porta
: '''COM1''': Prima porta seriale
: '''COM2''': Seconda porta seriale
: '''LPT1''': Prima porta parallela
: '''LPT2''': Seconda porta parallela
: '''NULL''': L'output viene mandato a NULL, che lo elimina e basta, senza farlo vedere

!! [[#SECTION000231000000000000000]] Scrivere

Vediamo come aprire un file e scriverci:

 (setq fdescr (open "TEST" "w"))
 (write-line "Questa e' una linea con CR e CL alla fine." fdescr)
 (princ (* 3(/ 146.0 4)) fdescr)
 (close fdescr)

Chiariamo subito il programma:

* Prima di tutto apriamo il file con la funzione OPEN, e salviamo il descrittore del file nella ariabile ''fdescr''
* Scriviamo, con la funzione WRITE-LINE, una frase con tutti gli accapo di windows a fine riga (CR-CL)
* Scriviamo qualcosa che non e' una stringa grazie alla funzione PRINC, sempre nel file ''TEST''

La funzione WRITE-LINE scrive una stringa nel file aperto, mentre la funzione PRINC scrive una qualsiasi cosa nel file aperto.

 (write-line "stringa" file_descrittore)
 (princ dato file_descrittore)

!! [[#SECTION000232000000000000000]] Leggere

Vediamo come leggere su un file:

 (setq fdescr (open "TEST" "r"))
 ;ora leggiamo la prima riga e memorizziamola
 (setq primariga (read-line fdescr))
 ;ora leggiamo la seconda
 (setq secondariga (readline fdescr))

Per scegliere di aprire un file esiste la comodissima funzione GETFILED, che permette di visualizzare una comoda finestra per indicare il dove si trova il file di nostro interesse.

 (getfiled "titolo" nomefile "estensione" flags)

Il ''titolo'' e' il titolo della finestra, il nomefile puo' essere preimpostato per facilitare la visualizzazione, e puo' essere comprensivo del percorso del file. La estensione serve per poter mettere un filtro alla visualizzazione, ed e' possibile mettere caratteri jolly. Il flag e' un numero pari alla somma di dei seguenti numeri, tale da ottenere la finestra come si vuole:

: '''1''': Richiede un nuovo nome di file per un'operazione di scrittura. Se l'utente sceglie un nome gia' esistente appare un messaggio di avvertimento che di conferma alla sovrascrittura.
: '''2''': Disabilita la possibilita' di scrivere il nome all'utente.
: '''4''': Permette di scegliere qualsiasi estensione
: '''8''': Fa partire la directory come quella libreria standard.

Esempio:

 (getfiled "" "" "" 0)

!! [[#SECTION000233000000000000000]] Trovare i file

Autocad possiede un solo comando per sapere se un file c'e' o dove si trova: FINDFILE

 (findfile nomefile)

L'output di questo comando e' il percorso del file se esiste, oppure ''nil'' se non esiste. Il comando e' molto veloce, perche' cerca solo nei percorsi stabdard del procramma, cioe' la directory dove si trova, quelle delle librerie e quelle dei file aperti.

!! [[#SECTION000234000000000000000]] Formattazione dei dati in un file

Autolisp puo' leggere i file solo riga per riga (al massimo carattere per carattere con alcune funzioni), quindi maneggare molti dati puo' risultare frustante. Un metodo e' quello di separare i vari dati con degli spazi, questo metodo e' detto in inglese ''SDF'', cioe' Space Delimited Field.

Il metodo SDF e' lo standard nei file lavorati con autolisp, questo perche', benche' si potrebbe pensare di separare i dati su una riga con altri metodi, tipo interporre una virgola (,), autocad e' veloce e efficiente solo nel nel separare le righe con degli spazi; altri metodi sono possibili, ma richiedono cicli e clicli.

Vediamo due esempi:  \\
uno difficile

 (setq str "Pipe-1    12.5    3000 1800 0  134.0")
 (foreach tab '(11 10 5 5 3 5)
  (princ (read (substr str 1 tab)))
  (terpri)
  (setq str (substr str (+ 1 tab)))
  (prompt str)
  (terpri)
  )

\\
e uno semplice e logico:

 (setq str "(Pipe-1    12.5      3000 1800 0  134.0)")
 (setq lista (read str))
 (foreach dato lista (princ dato) (terpri))

Vi ricordo che il comando TERPRI serve solo per andare a capo.

! [[#SECTION000240000000000000000]] Usare gli attributi di Autocad

Gli attributi in Autocad sono utilissimi, già conosciamo i blocchi, elementi che ci permettono di definire un disegno, ripeterlo piu' volte, e modificarne uno solo per avere ripercussioni su tutti gli altri.

Per prima cosa bisogna distinguere gli ''attdef'' dagli ''attrib''. Gli ''attdef'' sono memorizzati in una tabella a parte e descrivono come debbono essere memorizzati e gestiti tutti i vari attributi. Gli ''attrib'' sono gli attributi veri e propri, che vengono memorizzati all'interno di un blocco.

Ma vediamo praticamente cos si puo' fare con questi attributi. Immaginiamo che il nostro scopo si di vole costruire una tabella punteggio di un gioco con quattro giocatori. Per prima cosa lanciamo il comando ATTDEF:

 ATTDEF

Ci apparira' una maschera con una serie di campi:

: '''TAG''': E' l'identificativo del campo, non puo' contenere spazi.
: '''PROMPT''': E' la domanda che vi verra' fatta quando dovra' essere riempito il campo
: '''DEFAULT''': E' il valore di default con cui verra' riempito il campo se si preme direttamente Enter all'immissione, invece di scrivere qualcosa e poi premere enter.
: '''Invisible''': Mettete la spunta a quetsa opzione per rendere il campo invisibile (generalmente dovrebbe essere visibile)
: '''Constant''': Se volete che il campo non sia modificabile

In piu' ci sono altre opzione per la forma e la posizione del testo.

Dovete fare un attributo che sia visibile, con:

* TAG=Giocatore
* PROMPT=Come si chiama il giocaotre?
* DEFAULT=

E poi uno con:

* TAG=Punteggio
* PROMPT=Che punteggio ha ottenuto?
* DEFAULT=0

Ora sistemate questi tag uno vicino all'altro, su una stessa linea, poi copiateli e mettene 4 in colonna, in modo da avere una specia di tabella 4 righe e due colonne. Adesso abellite la tabella con una corice, dei titoli, e quello che vi pare, poi lanciate il comando pre creare i blocchi BLOCK, e selezionate tutto, stando attenti a selezionare gli attributi nello stesso ordine con cui volete vi verra' richiesto di riempire i campi; chiamate il blocco TABELLAPUNTEGGIO

Una volta inserito il blocco TABELLAPUNTEGGIO, vi verranno fatte delle domande per riempire la tabella. Provate da soli e vedete cosa succede.

!! [[#SECTION000241000000000000000]] Estrarre i dati

E' molto complicato, se volete usare il mouse lanciate

 (entget (car (nentsel)))

! [[#SECTION000250000000000000000]] Funzioni geometriche

Ecco una lista di funzioni geometriche:

!! [[#SECTION000251000000000000000]] Angle

 (angle punto punto)

Restituisce l'angolo in radianti fra due punti.

!! [[#SECTION000252000000000000000]] Distance

 (distance punto punto)

Restituisce la distanza fra due punti (sia 2D che 3D).

!! [[#SECTION000253000000000000000]] Polar

 (polar punto angolo distanza)

La funzione polar restituisce il punto che si trova ad un certo angolo ed ad una certa distanza dal punto dato.

! [[#SECTION000260000000000000000]] Programmi

Ecco un po' di programmi (forse) utili.

!! [[#SECTION000261000000000000000]] Scrivere del testo lungo un arco di circonferenza

 ; Programma che crea una funzione per scrivere lungo un arco di circonferenza

 ;ma prima una funzione utile
 (defun angtoc (ang)
  (setq ang (rtos (atof (angtos ang 0 8)) 2 6))
  (strcat "<<" ang)
  )

 (defun C:ATEXT ( / midp radp txt radi txtlen txtspc txthgt arclen arcang sang
    orent txtang txtp char)
  (setq cmdech (getvar "CMDECHO")) ;memoriziamo lo stato dell'ECHO dei comandi
  (setvar "CMDECHO" 0); ora possiamo metterlo a zero e poi lo rimetteremo al
                      ; valore a cui era prima
  (graphscr);modalita' grafica

  ;INSERIMENTO DATI

  (setq
    radp (getpoint "\nImmetti il punto centrale del raggio: ")
    midp (getpoint "\nImmetti il punto medio del testo: " radp)
    txthgt (getdist (strcat "\nAltezza del testo < " (rtos (setq txt (getvar
                "TEXTSIZE"))) " >: " ));Chiede l'altezza del testo, mostrando il
                                      ;valore di default
    txthgt (if txthgt txthgt txt) ;controlla se txthgt contiene un valore, se si
                                  ;lo assegna, altrimenti assegna quello di
                                  ;default
    txt (getstring  T "\nTesto: ")
    radi (distance radp midp)
    txtlen (strlen txt)
    orent (strcase (getstring "\nTesto rivolto verso il centro dell'arco? <S>:
            "))
    )

  ;Elaborazione seria

  (if (or (= orent "") (= orent "S"))
    (setq radi (- radi (/ txthgt 2))) ;se e' vero
    (setq radi (+ radi (/ txthgt 2))) ;se e' falso
    )

  (setq
    arclen (* txtlen txthgt)
    txtspc (/ arclen txtlen)
    arcang (/ arclen radi)
    sang (- (+ (angle radp midp) (/ arcang 2)) (/ txtspc radi 2));angolo di
                                                                  ;partenza
    count 1
    )

  ;attenzione alla magia!

  (repeat txtlen
    (if (or (= orent "") (= orent "S"))
      (setq                            ;se e' vera
  txtang (angtoc (- sang (/ pi 2)))
  txtpos count
  )
      (setq                            ;se e' falsa
  txtang (angtoc (- sang (* pi 1.5) 0) )
  txtpos (- (1+ txtlen) count)
  )
      )
    (setq
      txtp (polar radp sang radi)
      char (substr txt txtpos 1)
      )
    (command "_.TEXT" "_C" txtp txthgt txtang char)
    (setq
      count (1+ count)
      sang (- sang (/ txtspc radi))
      )
    )

  ;chiudiamo rimettendo tutto come era prima

  (setvar "CMDECHO" cmdech)
  (princ)
  )

!! [[#SECTION000262000000000000000]] Selezionare uno ad uno tutti gli oggetti

Questo programma non fa nulla di molto pratico ma evidenzia graficamente ogni elemento de disegno, uno alla volta:

 (setq ent (entnext))
 (redraw ent 3)
 (while (setq ent (entnext ent))
    (command "_.DELAY" 500)
    (redraw ent 3)
    )
 ;puliamo tutto
 (command "_.DELAY" 500)
 (redraw)

\\

!! [[#SECTION000270000000000000000]] Indice

* [[#tex2html90]][[autolisp.html#SECTION00010000000000000000 | Introduzione]]
** [[#tex2html91]][[autolisp.html#SECTION00011000000000000000 | Convenzioni tipografiche]] \\
* [[#tex2html92]][[autolisp.html#SECTION00020000000000000000 | Struttura di un file Autolisp]]
* [[#tex2html93]][[autolisp.html#SECTION00030000000000000000 | Impostare una variabile]]
** [[#tex2html94]][[autolisp.html#SECTION00031000000000000000 | Impostare una variabile di sistema]] \\
* [[#tex2html95]][[autolisp.html#SECTION00040000000000000000 | COMMAND]]
* [[#tex2html96]][[autolisp.html#SECTION00050000000000000000 | Prendere l'input dall'utente]]
** [[#tex2html97]][[autolisp.html#SECTION00051000000000000000 | GETPOINT]]
** [[#tex2html98]][[autolisp.html#SECTION00052000000000000000 | GETCORNER]]
** [[#tex2html99]][[autolisp.html#SECTION00053000000000000000 | GETDIST]]
** [[#tex2html100]][[autolisp.html#SECTION00054000000000000000 | GETANGLE]]
** [[#tex2html101]][[autolisp.html#SECTION00055000000000000000 | GETREAL]]
** [[#tex2html102]][[autolisp.html#SECTION00056000000000000000 | GETINT]]
** [[#tex2html103]][[autolisp.html#SECTION00057000000000000000 | GETSTRING]]
** [[#tex2html104]][[autolisp.html#SECTION00058000000000000000 | Comandi pericolosi: INITGET]] \\
* [[#tex2html105]][[autolisp.html#SECTION00060000000000000000 | Esempio di un programma]]
* [[#tex2html106]][[autolisp.html#SECTION00070000000000000000 | Le funzioni matematiche]]
** [[#tex2html107]][[autolisp.html#SECTION00071000000000000000 | +]]
** [[#tex2html108]][[autolisp.html#SECTION00072000000000000000 | *]]
** [[#tex2html109]][[autolisp.html#SECTION00073000000000000000 | -]]
** [[#tex2html110]][[autolisp.html#SECTION00074000000000000000 | /]]
** [[#tex2html111]][[autolisp.html#SECTION00075000000000000000 | min]]
** [[#tex2html112]][[autolisp.html#SECTION00076000000000000000 | max]]
** [[#tex2html113]][[autolisp.html#SECTION00077000000000000000 | Massimo comune divisore]]
** [[#tex2html114]][[autolisp.html#SECTION00078000000000000000 | Resto della divisione]]
** [[#tex2html115]][[autolisp.html#SECTION00079000000000000000 | Valore assoluto]]
** [[#tex2html116]][[autolisp.html#SECTION000710000000000000000 | Radice quadrata]]
** [[#tex2html117]][[autolisp.html#SECTION000711000000000000000 | Logaritmo]]
** [[#tex2html118]][[autolisp.html#SECTION000712000000000000000 | Elevamento a potenza]]
** [[#tex2html119]][[autolisp.html#SECTION000713000000000000000 | Elevamento di ]] \\
* [[#tex2html120]][[autolisp.html#SECTION00080000000000000000 | Funzioni con le stringhe]]
** [[#tex2html121]][[autolisp.html#SECTION00081000000000000000 | Concatenazione]]
** [[#tex2html122]][[autolisp.html#SECTION00082000000000000000 | Caratteri tutti maiuscoli o tutti minuscoli]]
** [[#tex2html123]][[autolisp.html#SECTION00083000000000000000 | Lunghezza di una stringa]]
** [[#tex2html124]][[autolisp.html#SECTION00084000000000000000 | Estrarre stringhe]] \\
* [[#tex2html125]][[autolisp.html#SECTION00090000000000000000 | Funzioni con liste]]
** [[#tex2html126]][[autolisp.html#SECTION00091000000000000000 | Creazione]]
** [[#tex2html127]][[autolisp.html#SECTION00092000000000000000 | Estrazioni di elementi]]
** [[#tex2html128]][[autolisp.html#SECTION00093000000000000000 | Ordinare una lista al contrario]]
** [[#tex2html129]][[autolisp.html#SECTION00094000000000000000 | Numero di elementi di una lista]]
** [[#tex2html130]][[autolisp.html#SECTION00095000000000000000 | Fusione di liste]] \\
* [[#tex2html131]][[autolisp.html#SECTION000100000000000000000 | Definire funzioni personalizzate]]
* [[#tex2html132]][[autolisp.html#SECTION000110000000000000000 | Funzioni logiche]]
** [[#tex2html133]][[autolisp.html#SECTION000111000000000000000 | AND]]
** [[#tex2html134]][[autolisp.html#SECTION000112000000000000000 | OR]]
** [[#tex2html135]][[autolisp.html#SECTION000113000000000000000 | NOT]]
** [[#tex2html136]][[autolisp.html#SECTION000114000000000000000 | EQ, equal, =]]
** [[#tex2html137]][[autolisp.html#SECTION000115000000000000000 | Maggiore, minore, diverso]] \\
* [[#tex2html138]][[autolisp.html#SECTION000120000000000000000 | Scegliere (IF)]]
* [[#tex2html139]][[autolisp.html#SECTION000130000000000000000 | Esecuzioni cicliche]]
** [[#tex2html140]][[autolisp.html#SECTION000131000000000000000 | Repeat]]
** [[#tex2html141]][[autolisp.html#SECTION000132000000000000000 | while]]
** [[#tex2html142]][[autolisp.html#SECTION000133000000000000000 | foreach]] \\
* [[#tex2html143]][[autolisp.html#SECTION000140000000000000000 | Visualizzare lo schermo del prompt]]
* [[#tex2html144]][[autolisp.html#SECTION000150000000000000000 | Visualizzazione e stampa di dati]]
* [[#tex2html145]][[autolisp.html#SECTION000160000000000000000 | Approssimazioni]]
** [[#tex2html146]][[autolisp.html#SECTION000161000000000000000 | Approssimazioni con gli angoli]] \\
* [[#tex2html147]][[autolisp.html#SECTION000170000000000000000 | Conversioni di unita' di misura]]
* [[#tex2html148]][[autolisp.html#SECTION000180000000000000000 | Selezionare un'oggetto]]
** [[#tex2html149]][[autolisp.html#SECTION000181000000000000000 | Eliminare un oggetto]]
** [[#tex2html150]][[autolisp.html#SECTION000182000000000000000 | Far ''scomparire'' e ''riapparire'' un oggetto]]
** [[#tex2html151]][[autolisp.html#SECTION000183000000000000000 | Selezionare piu' oggetti]] \\
* [[#tex2html152]][[autolisp.html#SECTION000190000000000000000 | Le proprieta' delle entita']]
** [[#tex2html153]][[autolisp.html#SECTION000191000000000000000 | Modificare le proprieta' di un oggetto]] \\
* [[#tex2html154]][[autolisp.html#SECTION000200000000000000000 | Creare un'entita']]
* [[#tex2html155]][[autolisp.html#SECTION000210000000000000000 | Identificatori degli elementi del disegno]]
* [[#tex2html156]][[autolisp.html#SECTION000220000000000000000 | Le tabelle dei simboli]]
* [[#tex2html157]][[autolisp.html#SECTION000230000000000000000 | Input/Output sui files]]
** [[#tex2html158]][[autolisp.html#SECTION000231000000000000000 | Scrivere]]
** [[#tex2html159]][[autolisp.html#SECTION000232000000000000000 | Leggere]]
** [[#tex2html160]][[autolisp.html#SECTION000233000000000000000 | Trovare i file]]
** [[#tex2html161]][[autolisp.html#SECTION000234000000000000000 | Formattazione dei dati in un file]] \\
* [[#tex2html162]][[autolisp.html#SECTION000240000000000000000 | Usare gli attributi di Autocad]]
** [[#tex2html163]][[autolisp.html#SECTION000241000000000000000 | Estrarre i dati]] \\
* [[#tex2html164]][[autolisp.html#SECTION000250000000000000000 | Funzioni geometriche]]
** [[#tex2html165]][[autolisp.html#SECTION000251000000000000000 | Angle]]
** [[#tex2html166]][[autolisp.html#SECTION000252000000000000000 | Distance]]
** [[#tex2html167]][[autolisp.html#SECTION000253000000000000000 | Polar]] \\
* [[#tex2html168]][[autolisp.html#SECTION000260000000000000000 | Programmi]]
** [[#tex2html169]][[autolisp.html#SECTION000261000000000000000 | Scrivere del testo lungo un arco di circonferenza]]
** [[#tex2html170]][[autolisp.html#SECTION000262000000000000000 | Selezionare uno ad uno tutti gli oggetti]]

! [[#SECTION000280000000000000000]] About this document ...

'''Autolisp per utonti'''

This document was generated using the [[http://www.latex2html.org/ | '''LaTeX'''2@@HTML@@]] translator Version 2002-2 (1.70)

Copyright © 1993, 1994, 1995, 1996, [[http://cbl.leeds.ac.uk/nikos/personal.html | Nikos Drakos]], Computer Based Learning Unit, University of Leeds.  \\
Copyright © 1997, 1998, 1999, [[http://www.maths.mq.edu.au/~ross/ | Ross Moore]], Mathematics Department, Macquarie University, Sydney.

The command line arguments were:  \\
'''latex2html''' @@-split 0 autolisp.tex@@

The translation was initiated by Massimiliano Vessi on 2006-04-16  \\

----

!!!! Footnotes

: [[#foot184]]... disegno[[autolisp.html#tex2html4 | '^1^']]: In realta' per complicare ancora di piu' l'esistenza a noi utonti, le variabili cambiano a seconda della versione di autocad, nella versione 2000 i file si chiamano ''acad2000.lsp'' e ''acad2000doc.lsp''.

----

file:/usr/local/share/lib/latex2html/icons/nx_grp_g.png file:/usr/local/share/lib/latex2html/icons/up_g.png file:/usr/local/share/lib/latex2html/icons/prev_g.png \\

 Massimiliano Vessi 2006-04-16

HomePage

Guide

Altro

Translate:

Pubblicità:

Licenza Creative Commons
DuckDuckGo

edit SideBar

edit TopNav

Blix theme adapted by David Gilbert, powered by PmWiki