Newsgroup: it.comp.software.cad
Titolo: x esperti lisp

salve a tutti
1)cerco un lisp che di una mappa catastale in vettori formato dwg
mi calcoli tutti i contorni chiusi e mi scriva in automatico il risultato
dei mq. al centro di tutti i contorni in un solo colpo
grazie

 wrote in message
0JrH9.56196$3l.15...@twister1.libero.it...


 ha scritto nel messaggio
news:yADH9.40839$qF1.1...@news2.tin.it...


    > puoi considerare anche la mia candidatura per avere il tuo lisp che
scrive
    > l'area cliccando in un punto interno?
Molto volentieri.
Vi allego di seguito il lisp. Se non conoscete la procedura per renderlo
utilizzabile in AutoCAD seguite i seguenti passi:
1) selezionare le righe riportate sotto;
2) copiarle negli appunti (pulsante COPIA);
3) aprire un nuovo documento di testo con NOTEPAD oppureWORD oppure WORDPAD,
ecc...;
4) incollare il contenuto degli appunti (pulsante INCOLLA) e salvare il file
con il nome "Aree.lsp";
5) in AutoCAD caricare il file Aree.lsp con APPLOAD (Carica Applicazione);
6) lanciare il programa digitando AREE alla riga del command.
Ciao Claudio
;;;--------------------
(defun c:Aree ()
(if (= hs nil)(setq hs(getreal "\n....... Altezza delle scritte: ")))
(setq p "")
(setq p(getpoint "\n....... Seleziona il punto all'interno dell'area dove
verrà scritta la superficie: "))
(if (/= p nil)(progn
(setvar "cmdecho" 0)
(setq cpltype(getvar "PLINETYPE"))
(setq clay(getvar "clayer"))
(setvar "PLINETYPE" 1)
(command "_layer" "_m" "aree_nuove" "")
(command "_bpoly" "_a" "_b" "_e" "_o" "_p" "_x" p "")
(setq poli(entlast))
(setq polix(entget poli))
(if (= (cdr(assoc 0 polix)) "LWPOLYLINE")(progn
(command "_area" "_o" poli)
(setq Area(getvar "Area"))
(command "_layer" "_m" "aree_scritte" "")
(command "_text" "_c" p hs "0" (rtos area 2 2) \r)
(princ "\n OK! - NB: sul layer 'aree_nuove' ci sono i contorni aggiunti.")
))
(setvar "clayer" clay)
(setvar "PLINETYPE" cpltype)
))
(princ)
)
(princ "\n<Copyright: ing. Claudio Granuzzo - digitare AREE per lanciare il
programma")
(princ)

 wrote in message
zNKH9.43985$qF1.1...@news2.tin.it...


Personalizzalo pure da solo, è semplice.
Sempre con un editore di testi basta cambiare la riga:
    (command "_text" "_c" p hs "0" (rtos area 2 2) \r)
facendola diventare così:
    (command "_text" "_c" p hs "0" (strcat "Mq. " (rtos area 2 2)) \r)
Dove c'è scritto Mq. (tra le virgolette) puoi scrivere tutto quello che
vuoi. Tale scritta precederà il numero che rappresenta l'area.
(in AutoLISP la funzione 'strcat' somma delle stringhe di testo).
Ciao Claudio

 wrote in message
JBMH9.44752$qF1.1...@news2.tin.it...



Scusa se mi intrometto,
siccome io disegno in mm ma gradirei che l'area fosse comunque espressa in
metri quadrati, dove devo inserire
"diviso 1000000" per convertire i mmq in mq?
Grazie in anticipo per l'aiuto e complimenti per questo lisp, VERAMENTE
UTILE!
Ciao
--
¸.·´¯T¯`·.¸A¸.·´¯F¯`·.¸
________________
No E-Mail NG Only!

 ha scritto nel messaggio
news:JBMH9.44752$qF1.1...@news2.tin.it...


    > Domanda: come hai imparato a programmare lisp?
Utilizzando il manuale del programmatore AutoLISP allegato alla release 10
di AutoCAD e successivamente seguendo tutte le evoluzioni del linguaggio di
cui le più importanti sono state l'introduzione dell'interfaccia DCL
(riquadri di dialogo) gestibile con il LISP e più recentemente il
VisualLISP.
Ciao Claudio

 "diviso 1000000" per convertire i mmq in mq?
Sempre alla riga:
     (command "_text" "_c" p hs "0" (strcat "Mq. " (rtos area 2 2)) \r)
la variabile 'area' contiene il numero che rappresenta la superficie nelle
unità del disegno.
Invece di scrivere area direttamente puoi scrivere (/ area 1000000) e in
questo modo dividi l'area per 1000000.
In AutoLISP gli operatori matematici vanno inseriti prima dei numeri (/ sta
per diviso, * per prodotto, + per somma, - per sottrazione).
In conclusione la nuova riga potrebbe essere la seguente:
     (command "_text" "_c" p hs "0" (strcat "Mq. " (rtos (/ area 1000000) 2
2)) \r)
P.S. se vuoi cambiare il numero di decimali della superficie puoi modificare
l'ultimo numero della funzione 'rtos':
    (rtos (/ area 1000000) 2 2))  per 2 decimali dopo la virgola
    (rtos (/ area 1000000) 2 3))  per 3 decimali
    (rtos (/ area 1000000) 2 4)) per 4 decimali
    (rtos (/ area 1000000) 2 0)) per nessun decimale
Ciao Claudio

 Ciao Claudio
Sei stato gentilissimo!
Grazie 1000!
--
ByE bY TaF® - invalid mail - NG OnLy!
********* E N J O Y ! ************

Complimenti a SePrAm.com, veramente bravo ed esauriente.
G.B.Francesconi

Io ho ottenuto lo stesso comando utilizzando il comando bpoly nella routine,
senza la creazione del poligono..

 ;;;--------------------
--------------------------------
Inviato via 
http://usenet.libero.it