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

Somma valori属性

  • Thread starter Thread starter CristianC
  • Start date Start date

CristianC

Guest
premessa: scusate il doppio post (mi sono accorto più tardi dell'esistenza di questa sezione che penso sia la più appropriata)

salve a tutti, vorrei chiedervi se conoscete un lisp free che faccia la somma di valori contenuti in un determinato attributo.
in pratica io ho una bom con svariati attributi, molti di questi si chiamano weight ed hanno un valore oppure sono vuoti ed in alcuni casi contengono lettere (per es. "-")...vorrei in pratica che questa lisp sommi i valori numerici di questi attributi e lasci perdere valori nulli o caratteri.
qualcuno sa se esiste un programma free del genere?
grazie mille.

cristian
 
ho scitto questa routine qualche anno fa, credo sia quello che vai cercando lo dovresti
adattare al tuo caso, te la descrivo velocemente

(defun dxf(code elist)
(cdr (assoc code elist)))
questa funzione ti trova i valori dxf


(defun get-dat (/)
(setq ss (ssget "x" ' ((2 . "dat-pre") (8 . "0"))));seleziono tutti gli attributi di nome "dat-pre" sul piano "0"
(if ss (progn (setq con 0 mas (sslength ss));se li trovo setto un contatore a 0 e li conto
(while (< con mas) (setq s (ssname ss con);eseguo il ciclo per quanti sono
s1 (entget s)
s2 (entget (entnext (dxf -1 s1)))
po (cons (atoi (dxf 1 s2)) po)
s3 (entget (entnext (dxf -1 s2)))
n-pez (dxf 1 s3) ;qui mi trova il n-pezzi
s4 (entget (entnext (dxf -1 s3)))
prof (dxf 1 s4);qui mi trova il profilo
s5 (entget (entnext (dxf -1 s4)))
lung (dxf 1 s5);qui mi trova la lunghezza
s6 (entget (entnext (dxf -1 s5)))
p-tot (cons (atof (dxf 1 s6)) p-tot);qui il aggiungo il peso alla lista del peso totale
s7 (entget (entnext (dxf -1 s6)))
materale (cons (atof (dxf 1 s7)) s-ver)
con (1+ con))
)))
(setq p-tot (apply '+ p-tot));sommo tutti i valori della lista peso totale
(setq pos (apply ' max po )))

valuta e prova
ciao
 
grazie 1000 ragazzi, visto che l'appetito vien mangiando ;) non è che mi aiutereste a modificare il programma in modo che la somma venga restituita in un messaggio dentro una finestrella (funzione alert se non ricordo male) e presenti un tasto copy che praticamente cliccandoci sopra copia il risultato nella clipboard e chiude la finestra?
ho già modificato il sorgente in modo che utilizzi l'attributo da me definito (weight) ma non riesco appunto a fare quello che vi ho chiesto sopra:

(defun c:wgt2 (/ tm ss i en an ad at av vl)
(initget 1)
(setq tm (strcase "weight"))
(and (setq ss
(ssget "x" (list (cons 0 "insert")
(cons 66 1)
(cons 67 (if (= (getvar "tilemode") 1) 0 1)))))
(setq i (sslength ss))
(while (not (minusp (setq i (1- i))))
(setq en (ssname ss i)
an (entnext en))
(while (= "attrib" (cdr (assoc 0 (entget an))))
(setq ad (entget an)
at (strcase (cdr (assoc 2 ad)))
av (cdr (assoc 1 ad)))
(if (= at tm)
(setq vl (cons (atof av) vl)))
(setq an (entnext an)))))
(apply '+ vl))

aspetto fiducioso....grazie ancora. :):):)
cristian
 
non arrivando ad una soluzione e dovendo arrangiarmi farei così, senza dcl:

supponedo che il tuo totale sia 300


(setq totale 300)
(setq totale (rtos totale))
(command "_text" "0,0" "" "" totale)
(command "_copyclip" "_l" "")
(command "_erase" "_l" "")
(setq riepilogo (strcat "totale valore attributi = " totale))
(alert riepilogo)
 
Last edited:
prego, mi piacerebbe però sapere se è proprio necessario questo giro contorto o se ci sono comandi specifici da inserire nel codice.
 
(command "_text" "0,0" "" "" totale)

attenzione che dal 2008 ( credo.... non so nel 2007) per passare valori al comando _text bisogna disabilitare l'input a "monitor" del testo con la variabile dtexted altrimenti il valore non viene passato alla riga di comando.
 
dtexted

esiste dalla versione 2006

infatti ho detto "credo" io sono passato dalla 2004 al 2008 quindi 2006 e 2007 non li ho avuti sotto mano...

di fatto il problema c'è, con i programmi "lisp o vba" creati per passare valori direttamente alla riga di comando.
 
ho provato la miniroutine con dtexted = 0,1,2 e non ha dato problemi.

boh.

può essere che il lisp essendo linguaggio nativo lo interpreti correttamente allora... da vba (sendcommand text) con dtexted impostato 2 non funziona.
 
... e questo è un punto a vantaggio del lisp ;)

ho sempre sostenuto che il lisp è il linguaggio "madre" per autocad... è nato e lo stesso autocad si basava principalmente sul lisp ( prima degli arx ovviamente ).

e' macchino e poco intuitivo, e sopratutto privo di interfaccia grafica per la creazione di form (dcl) anche se ci sono alcuni applicativi per creare dcl da interfaccia grafica.

ma come integrazione e compatibilità con autocad non ha eguali !!!
 

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