• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

エリアの値を自動で書き込む

  • Thread starter Thread starter lollazzo
  • Start date Start date

lollazzo

Guest
ho delle aree e mi servirebbe un modo per avere all'interno dell'area una casella di testo che indichi il valore
 
cercando su internet si trovanoparecchie versioni...

ciao palomat, ciao a tutti.
questo è il mio primo post su questo forum.
ho fatto qualche programma in lisp tra cui anche il calcolo delle aree.
allego il programma area2.lsp, leggermente esemplificato per il forum.
lo ritengo interessante perchè per calcolare l'area non ci deve necessariamente essere un oggetto.
il programma individua automaticamente il contorno e scrive area e perimetro (anche di più contorni sommando le aree).
ho allegato il file (non sò se correttamente).
in ogni modo metto anche il listato.
ciao a tutti e ...... dite che è bello, altrimenti non scrivo più.
ciao a tutti, betoniera


; area2.lsp calcola l'area e il perimetro di piu figure
; soft. betoniera - autocad 2014

(defun c:area2 ()
(if ht nil (setq ht 30)) ;imposta altezza testo
(setq a (strcat "\nimmetti altezza testo ht in unità disegno : <" (rtos ht) "> :")
ht1 (getreal a) ;chiede altezza testo
)
(if (/= ht1 nil) (setq ht ht1)) ;imposta altezza testo
(command "_setvar" "textsize" ht)
(setq gs (ssadd)
str t
ar 0
pe 0
)
(command "_color" 7)
(command "_setvar" "hpname" "solid")

;loop da cui si esce solo con return
(while (not (eq str ""))
(setq p1 (getpoint "\nimmetti punto "))
(cond
((= p1 nil) ;se si schiaccia return
(setq str "") ;cosi esce dal ciclo
)
);cond
(cond
((/= p1 nil)
(setq p2 p1)
(command "_-boundary" p1 "")
(setq en (entlast))
(command "area" "_o" "_l")
(setq ar1 (getvar "area"))
(setq ar (+ ar ar1))
(setq pe1 (getvar "perimeter"))
(setq pe (+ pe pe1))
(command "_-bhatch" "_s" en "" "")
(command "_erase" en "")
)
);cond
);while

(command "_color" 3)
(command "_text" "_j" "_c" p2 "" 0 (strcat "area mq " (rtos ar) " perimetro m " (rtos pe)))
(command "_move" "_l" "" p2)
)
 

Attachments

ciao betoniera, ho provato il tuo fille ma mi da comando sconosciuto quando deve scrivere l'area.....
possiedo autocad 2012 ita...
cosa posso fare?
grazie
 
ciao betoniera, ho provato il tuo fille ma mi da comando sconosciuto quando deve scrivere l'area.....
possiedo autocad 2012 ita...
cosa posso fare?
grazie

ciao manente
ho riprovato il programma area2.lsp perchè l'avevo modificato per esemplificarlo e pensavo che magari si era guastato qualcosa.
ma va tutto bene, per cui non so perchè a te non funziona.
ovviamente devi prima caricarlo (strumenti - autolisp - carica applicazione) e poi devi mandarlo in esecuzione col comandi area2.
ti invito a riprovare. puoi cliccare anche più aree
nel caso non funzionasse fammi sapere, ciao

Area2.jpg
 
Last edited by a moderator:
ciao betoniera, ho di nuovo riprovato ma non mi scrive le scritte.....questo è quello che mi genera dalla linea comando
...................
comando: _appload area2.lsp caricato.
comando:
comando:
comando: area2
immetti altezza testo ht in unità disegno : <30> :50
_setvar digitare nome della variabile o [?]: textsize
digitare nuovo valore per textsize <0.1600>: 50.00000000000000
comando: _color
immettere colore oggetto di default [Truecolor/CAtalogocolori] <3 (verde)>: 7
comando: _setvar digitare nome della variabile o [?] <textsize>: hpname
digitare nuovo valore per hpname <"angle">: solid
comando:
immetti punto _-boundary
specificare punto interno o [opzioni Avanzate]: selezione totale...
selezione di tutto quello che si può vedere...
analisi dei dati selezionati...
analisi di isole interne in corso...
specificare punto interno o [opzioni Avanzate]:
contorni ha creato 1 polilinea
comando: area
specificare primo angolo o [Oggetto/Aggiungi area/Sottrai area] <oggetto>: _o
selezionare oggetti: _l
area = 17555.0000, perimetro = 630.0000
comando: _-bhatch
modello di tratteggio corrente: solid
specificare il punto interno o [Proprietà/Seleziona oggetti/Disegna
contorno/elimina Contorni/Avanzate/ORdine di
visualizzazione/Origine/annotatiVo/COLore tratteggio/LAyer/Trasparenza]: _s
selezionare oggetti: trovato(i) 1
selezionare oggetti:
modello di tratteggio corrente: solid
specificare il punto interno o [Proprietà/Seleziona oggetti/Disegna
contorno/elimina Contorni/Avanzate/ORdine di
visualizzazione/Origine/annotatiVo/COLore tratteggio/LAyer/Trasparenza]:
comando: _erase
selezionare oggetti: trovato(i) 1
selezionare oggetti:
comando:
immetti punto
_color
immettere colore oggetto di default [Truecolor/CAtalogocolori] <7 (bianco)>: 3
comando: _text
stile di testo corrente: "quote non annotative" altezza del testo: 0.1600
annotativo: no
specificare punto iniziale del testo o [Giustificato/Stile]: _j digitare
un'opzione
[Proporzionale/adaTta/Centro/Mezzo/Destra/AS/AC/AD/MS/MC/MD/BS/BC/BD]: _c
specificare centro del testo:
specificare angolo di rotazione del testo <0>:
digitare testo: 0
comando: area mq 17555 perimetro m 630 comando sconosciuto "area mq 17555
perimetro m 630". premere f1 per la guida.
comando: _move
selezionare oggetti: _l trovato(i) 1
selezionare oggetti:
specificare punto base o [Spostamento] <spostamento>:
specificare secondo punto oppure <utilizza primo punto come spostamento>: nil
specificare secondo punto oppure <utilizza primo punto come spostamento>:
..................
grazie per l'interessamento, perchè non riesco a capire............
 
e' il solito problema dello stile con l'altezza già impostata. con il comando stile devi mettere l'altezza testo a 0.
 
ovviamente confutatis è più esperto di me. io, al volo, non ci sarei arrivato.
confutatis: vorrà dire che dopo la famosa cena a base di pesce, ti offrirò anche il limoncello.
ciao, alla prosiima
 
ciao a tutti,
ho provato questa utilissima app su autocad 15 e funziona alla grande,
mi domandavo se fosse possibile mettere il perimetro e l'area su due righe e ridurre a due i valori dopo la virgola.
grazie in anticipo.
 
ho fatto le modifiche richieste.
ecco il nuovo listato.
ciao

; area2.lsp calcola l'area e il perimetro di piu figure
; soft. betoniera - autocad 2014

(defun c:area2 ()
(if ht nil (setq ht 30)) ;imposta altezza testo
(setq a (strcat "\nimmetti altezza testo ht in unità disegno : <" (rtos ht) "> :")
ht1 (getreal a) ;chiede altezza testo
)
(if (/= ht1 nil) (setq ht ht1)) ;imposta altezza testo
(command "_setvar" "textsize" ht)
(setq gs (ssadd)
str t
ar 0
pe 0
)
(command "_color" 7)
(command "_setvar" "hpname" "solid")
;loop da cui si esce solo con return
(while (not (eq str ""))
(setq p1 (getpoint "\nimmetti punto "))
(cond
((= p1 nil) ;se si schiaccia return
(setq str "") ;cosi esce dal ciclo
)
);cond
(cond
((/= p1 nil)
(setq p2 p1
p3 (list (car p2) (+ (cadr p2) ht ht))
)
(command "_-boundary" p1 "")
(setq en (entlast))
(command "area" "_o" "_l")
(setq ar1 (getvar "area"))
(setq ar (+ ar ar1))
(setq pe1 (getvar "perimeter"))
(setq pe (+ pe pe1))
(command "_-bhatch" "_s" en "" "")
(command "_erase" en "")
)
);cond
);while
(command "_color" 3)
(command "_text" "_j" "_l" p2 "" 0 (strcat "area mq " (rtos ar 2 2)))
(command "_text" "_j" "_l" p3 "" 0 (strcat "perimetro m " (rtos pe 2 2)))
(command "_move" p2 p3 "" p2)
)
 
ho fatto le modifiche richieste.
ecco il nuovo listato.
ciao

; area2.lsp calcola l'area e il perimetro di piu figure
; soft. betoniera - autocad 2014

(defun c:area2 ()
(if ht nil (setq ht 30)) ;imposta altezza testo
(setq a (strcat "\nimmetti altezza testo ht in unità disegno : <" (rtos ht) "> :")
ht1 (getreal a) ;chiede altezza testo
)
(if (/= ht1 nil) (setq ht ht1)) ;imposta altezza testo
(command "_setvar" "textsize" ht)
(setq gs (ssadd)
str t
ar 0
pe 0
)
(command "_color" 7)
(command "_setvar" "hpname" "solid")
;loop da cui si esce solo con return
(while (not (eq str ""))
(setq p1 (getpoint "\nimmetti punto "))
(cond
((= p1 nil) ;se si schiaccia return
(setq str "") ;cosi esce dal ciclo
)
);cond
(cond
((/= p1 nil)
(setq p2 p1
p3 (list (car p2) (+ (cadr p2) ht ht))
)
(command "_-boundary" p1 "")
(setq en (entlast))
(command "area" "_o" "_l")
(setq ar1 (getvar "area"))
(setq ar (+ ar ar1))
(setq pe1 (getvar "perimeter"))
(setq pe (+ pe pe1))
(command "_-bhatch" "_s" en "" "")
(command "_erase" en "")
)
);cond
);while
(command "_color" 3)
(command "_text" "_j" "_l" p2 "" 0 (strcat "area mq " (rtos ar 2 2)))
(command "_text" "_j" "_l" p3 "" 0 (strcat "perimetro m " (rtos pe 2 2)))
(command "_move" p2 p3 "" p2)
)

grazie !!!
 
esempio per lisp.jpg

io sto usando a2f per il calcolo delle aree. vorrei inserire anche il perimetro e vorrei prima del valore dell'area e del perimetro una parte fissa di testo con scritto:

area (valore dell'area)
peri (valore del perimetro).

spero di essermi spiegato bene, allego anche una foto. visto che devo ripetere questo procedimento n volte, in questo modo risparmierei moltissimo tempo, senza dover ogni volta riscrivere tutto a mano.

grazie in anticipo.

p.s se doveste linkare un file txt, mi spiegate anche come si crea poi il lisp? non lo so fare :)
 
ciao!! quando carico il lisp mi scrive:
area2.lsp caricato.
comando: ; errore : parentesi destra in eccesso nell'input.

ringrazio sin d'ora per l'eventuale aiuto....

ho ancora il listato di quel file (io ne uso uno più complesso che rileva le unità di misura utilizzate)
l'ho provato e funziona. ti rimando il listato, copialo in un file chiamato a2.lsp e inseriscilo nella directory "support".
e' probabile che quando hai fatto queste operazioni col file precedente non hai copiato l'ultima parentesi. fai attenzione.
l'ho rinominato a2.lsp per agevolare il comando (a2)
se hai unità di misura differenti modifica pure le scritte in fondo: "area mq " e "perimetro m " e metti quello che vuoi.
ciao

; a2.lsp calcola l'area e il perimetro di piu figure
; soft. betoniera - autocad 2014

(defun c:a2 ()
(if ht nil (setq ht 30)) ;imposta altezza testo
(setq a (strcat "\nimmetti altezza testo ht in unità disegno : <" (rtos ht) "> :")
ht1 (getreal a) ;chiede altezza testo
)
(if (/= ht1 nil) (setq ht ht1)) ;imposta altezza testo
(command "_setvar" "textsize" ht)
(setq gs (ssadd)
str t
ar 0
pe 0
)
(command "_color" 7)
(command "_setvar" "hpname" "solid")
;loop da cui si esce solo con return
(while (not (eq str ""))
(setq p1 (getpoint "\nimmetti punto "))
(cond
((= p1 nil) ;se si schiaccia return
(setq str "") ;cosi esce dal ciclo
)
);cond
(cond
((/= p1 nil)
(setq p2 p1
p3 (list (car p2) (+ (cadr p2) ht ht))
)
(command "_-boundary" p1 "")
(setq en (entlast))
(command "area" "_o" "_l")
(setq ar1 (getvar "area"))
(setq ar (+ ar ar1))
(setq pe1 (getvar "perimeter"))
(setq pe (+ pe pe1))
(command "_-bhatch" "_s" en "" "")
(command "_erase" en "")
)
);cond
);while
(command "_color" 3)
(command "_text" "_j" "_l" p2 "" 0 (strcat "area mq " (rtos ar 2 2)))
(command "_text" "_j" "_l" p3 "" 0 (strcat "perimetro m " (rtos pe 2 2)))
(command "_move" p2 p3 "" p2)
)
 
salve a tutti.
complimenti per il forum e grazie per questo lisp!
da quando ho scoperto i file lsp mi si è aperto un mondo :)

ho intenzione di imparare a creare queste "macro" ma fino ad allora.... come posso fare per evitare di far creare il retino solido a questo lips?
quando uso il comand "a2" per scrivere area e perimetro mi si crea anche un non necessario retino pieno all'interno dell'area che sto calcolando e non so come fare ad evitarlo.

grazie grazie grazie

ho ancora il listato di quel file (io ne uso uno più complesso che rileva le unità di misura utilizzate)
l'ho provato e funziona. ti rimando il listato, copialo in un file chiamato a2.lsp e inseriscilo nella directory "support".
e' probabile che quando hai fatto queste operazioni col file precedente non hai copiato l'ultima parentesi. fai attenzione.
l'ho rinominato a2.lsp per agevolare il comando (a2)
se hai unità di misura differenti modifica pure le scritte in fondo: "area mq " e "perimetro m " e metti quello che vuoi.
ciao

; a2.lsp calcola l'area e il perimetro di piu figure
; soft. betoniera - autocad 2014

(defun c:a2 ()
(if ht nil (setq ht 30)) ;imposta altezza testo
(setq a (strcat "\nimmetti altezza testo ht in unità disegno : <" (rtos ht) "> :")
ht1 (getreal a) ;chiede altezza testo
)
(if (/= ht1 nil) (setq ht ht1)) ;imposta altezza testo
(command "_setvar" "textsize" ht)
(setq gs (ssadd)
str t
ar 0
pe 0
)
(command "_color" 7)
(command "_setvar" "hpname" "solid")
;loop da cui si esce solo con return
(while (not (eq str ""))
(setq p1 (getpoint "\nimmetti punto "))
(cond
((= p1 nil) ;se si schiaccia return
(setq str "") ;cosi esce dal ciclo
)
);cond
(cond
((/= p1 nil)
(setq p2 p1
p3 (list (car p2) (+ (cadr p2) ht ht))
)
(command "_-boundary" p1 "")
(setq en (entlast))
(command "area" "_o" "_l")
(setq ar1 (getvar "area"))
(setq ar (+ ar ar1))
(setq pe1 (getvar "perimeter"))
(setq pe (+ pe pe1))
(command "_-bhatch" "_s" en "" "")
(command "_erase" en "")
)
);cond
);while
(command "_color" 3)
(command "_text" "_j" "_l" p2 "" 0 (strcat "area mq " (rtos ar 2 2)))
(command "_text" "_j" "_l" p3 "" 0 (strcat "perimetro m " (rtos pe 2 2)))
(command "_move" p2 p3 "" p2)
)
 
.... come posso fare per evitare di far creare il retino solido a questo lisp?
quando uso il comand "a2" per scrivere area e perimetro mi si crea anche un non necessario retino pieno all'interno dell'area che sto calcolando e non so come fare ad evitarlo.

il retino ha la funzione di evidenziare visivamente l'area oggetto di calcolo.
le aree possono essere più di una (il programma le somma).
il retino continuo ha il difetto che non si capisce quando un'area è stata cliccata 2 volte.
per questo fatto ho modificato il programma con un retino a righe la cui inclinazione varia ad ogni clik.
così, se si clicca 2 volte un'area si vede la doppia retinatura.
quindi la retinatura la ritengo necessaria.
se però non la vuoi fare disegnare è sufficiente sostituire la riga
(command "_-bhatch" "_s" en "" "") con
;(command "_-bhatch" "_s" en "" "") (in questo modo quella riga diventa un semplice commento e non viene eseguita)
ti mando il nuovo listato
ciao



; a2.lsp calcola l'area e il perimetro di piu figure
; soft. betoniera - autocad 2014

(defun c:a2 ()
(prompt "\n ")
(setq n (getvar "useri1"))
(cond
((= n 0);unità cm
(setq um "cm" coef 100)
)
((= n 1);unità mm
(setq um "mm" coef 1000)
)
((= n 2);unità m
(setq um "m" coef 1)
)
);cond

(if ht1 nil (setq ht1 5)) ;se valore nil imposta 5
(if retino-ds nil (setq retino-ds 5)) ;se valore nil imposta 5
(setq sc (getvar "dimscale")
ort (getvar "orthomode")
osm (getvar "osmode")
b (strcat "\naltezza testo in mm <" (rtos ht1) ">: ") ;corrente in mm
ht (getreal b) ;chiede altezza
a (strcat "\ndistanza linee retino mm <" (rtos retino-ds) ">: ")
ds (getreal a)
angr 0
)

(if ht nil (setq ht ht1)) ;imposta altezza testo;
(if (/= ds nil) (setq retino-ds ds))
(setq ds1 (* retino-ds sc 0.1) ;imposta distanza retino
ht (* ht (getvar "dimscale") 0.1)
gs (ssadd)
str t
ar 0
pe 0
)

(command "_color" 7)
(command "_setvar" "hpname" "_u")
(command "_setvar" "hpspace" ds1)
;(command "_setvar" "hpang" angr)
(command "_setvar" "textsize" ht)
(command "_setvar" "orthomode" 0)
(command "_setvar" "osmode" 0)

;loop da cui si esce solo con return
(while (not (eq str ""))
(setq p1 (getpoint "\nimmetti punto "))
(setq angr (+ angr 45))
(command "_setvar" "hpang" angr)
(cond
((= p1 nil) ;se si schiaccia return
(setq str "") ;cosi esce dal ciclo
)
);cond
(cond
((/= p1 nil)
(setq p2 p1)
(command "_-boundary" p1 "")
(setq en (entlast))
(command "area" "_o" "_l")
(setq ar1 (/ (getvar "area") coef coef))
(setq ar (+ ar ar1))
(setq pe1 (/ (getvar "perimeter") coef))
(setq pe (+ pe pe1))
(command "_-bhatch" "_s" en "" "")
(command "_erase" en "")
)
);cond
);while

(command "_color" 3)
(command "_text" "_j" "_c" p2 "" 0 (strcat "area mq " (rtos ar) " perimetro m " (rtos pe)))
(command "_setvar" "orthomode" ort)
(command "_setvar" "osmode" osm)
(command "_move" "_l" "" p2)
)
 

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top