Python: somma dei volumi

Ciao!
Mi sono fatto uno scriptino in Py per il calcolo del volume e successiva manipolazione e conteggi.
Tutto bene ma è fatto usando .GetObject e successivo filtro a polysrf.
Vorrei usare .GetObjects per selezionare più oggetti ma poi non so come gestire la cosa quando sono più valori.
Concettualmente come funziona?

Spiegati !
Con un oggetto che metodi usi ?
E cosa vuoi ottenere da piu’ oggetti ?

Credo intenda dire che fino ad adesso ha utilizzato lo script su singoli oggetti (getobject) mentre gli piacerebbe utilizzarlo su più oggetti (getobjects).
@giuseppe La differenza concettuale è che il primo metodo ti restituisce un valore stringa che identifica un oggetto (quindi non hai bisogno di elaborarlo) mentre il secondo ti restituisce un array di stringhe che dovrai processare elemento per elemento con un ciclo “for each”.

Credo che Giuspa parli di Python
Ma certo il concetto non cambia :smiley:

No infatti non cambia.
Questo funziona su un oggetto:

import rhinoscriptsyntax as rs

ogg=rs.GetObject(“seleziona oggetti chiusi”, rs.filter.polysurface)
if rs.IsPolysurfaceClosed(ogg):
vol=rs.SurfaceVolume(ogg)
volcorto=(vol[0])
print (“volume”), round((volcorto),1)
else:
print (“polisuperfice non chiusa non posso calcolare il peso”)

Se cerco di creare una definizione che mi restituisca un cacchio di volume per tanti oggetti non riesco.
se faccio così:

import rhinoscriptsyntax as rs

objectIds = rs.GetObjects(“seleziona polisuperfici”, 16)

for id in objectIds:
print “Object identifier:”, id

mi restituisce il/gli id della/delle polysrf
Io vorrei filtrare quelle chiuse e ricavare da queste simpatiche polysrf chiuse il volume…

Se vuoi i volumi separati, metti le stesse linee usate sopra dentro un ciclo:

for ogg in objectids:
if rs.IsPolysurfaceClosed(ogg):
vol=rs.SurfaceVolume(ogg)
volcorto=(vol[0])
print (“volume”), round((volcorto),1)
else:
print (“polisuperfice non chiusa non posso calcolare il peso”)

Se invece vuoi il totale, definisci prima del ciclo un accumulatore per il volume:

volume = 0

e poi dentro al ciclo ci aggiungi i volumi degli oggetti:

volume += volcorto

e sposti la stampa del volume totale dopo il ciclo:

print (“volume”), round( volume,1)

Scusa se sono sbrigativo …
Se ci sono problemi, dimmelo

p.s.
ovviamente anche all’indentazione ci devi pensare tu
Anche perche’ qui sono su una maledetta tastiera italica e non ho le backticks per formattare i programmi
C’e’ un altro modo per formattare ?

Su su, dai dai, no sta a perdar tempo con le backticchete tacchete che il sole mangia le ore!!!
Muoversi su, produzione produzione!!! :wink:
Mi stai diventando un po’ delicatino?

alla fine ce l’ho fatta :smile:
Nonostante che Lucio non contribuisca…

import rhinoscriptsyntax as rs
import math
tot=[]
errore=""
poly = rs.GetObjects(“seleziona polisuperfici”, 16)
for id in poly:
voltupe=rs.SurfaceVolume(id)
if voltupe>0:
vol=voltupe[0]
volcorto=round(vol,1)
print “risultato:”, volcorto
tot.append(volcorto)
else:
errore="ATTENZIONE ci sono polisuperfici aperte"
print "Volume Totale: ",(sum(tot)), errore

Così calcola il volume per i vari oggetti, somma i volumi e ti dice pure se ci sono poly aperte…

Guarda che io ho fatto da supporto morale… serve anche quello… :neutral_face:
Poi lo sai che io sono Vbscrittista e che Python l’ho cominciato parecchie volte ma non l’ho mai finito… son sempre alla seconda pagina… :grin:

alla fine ce l’ho fatta

Ottimo !
Ho provato a formattare il tuo script
(Dopo ricerca su Google mi sono ricordato che …) per inserire i caratteri dato il codice ascii basta premere Alt e digitare il codice ascii.
Per cui per i famosi backticks, per chi usa tastiera italica, basta usare il codice 96

import rhinoscriptsyntax as rs
import math
tot=[]
errore=""
poly = rs.GetObjects("seleziona polisuperfici", 16)
for id in poly:
    voltupe=rs.SurfaceVolume(id)
    if voltupe>0:
        vol=voltupe[0]
        volcorto=round(vol,1)
        print "risultato:", volcorto
        tot.append(volcorto)
    else:
        errore="ATTENZIONE ci sono polisuperfici aperte"
print "Volume Totale: ",(sum(tot)), errore

Cosi’ e’ decisamente piu’ comprensibile :smiley:

Benvenuto nel club a nome degli scriptomani ! :smiley:

Hehe … se ti riferisci agli strumenti, sono sempre stato ultradelicato
Se no mica mi facevo una marea di script … mi arrangiavo con i comandi nativi come gli uomini veri … hehe

Secondo me la tastiera italica e’ terribile per scriptare, ma oggi postavo dal lavoro e li’ devo usare Rhino da tastiera italica per di piu’ su portatile … pauroso…

E comunque e’ gia’ abbastanza scomoda la tastiera USA per gli script.
Non ho mai capito perche’ i computer usano la tastiera della macchina da scrivere.
Deve essere stata l’idea di uno degli uomini veri di cui sopra:
‘Strumenti comodi ? Puah ! Roba per debosciati.
I veri duri usano solo schede perforate … e le bucano con i denti !’

Secondo me e’ il libro che e’ sbagliato …

E pensa quando li facevano lavorare al freddo e battevano i denti… da li hanno deciso che forse le schede perforate non erano il massimo… Comunque, secondo me, se torniamo al codice morse… forse siamo a cavallo… :wink:

Cominciavo ad avere gli stessi dubbi… infatti il paginone centrale con la coniglietta del mese sconcentra parecchio… :smiley:

Sto facendo il corso di Giulio Piacentino!!!

Sto facendo il corso di Giulio Piacentino!!!

Che bello ! Ti invido proprio. :smiley:

Ah, qualche dispensa per il ‘povero’ Lucio, no ? :wink:

O al massimo un calendario da attaccare in ufficio… :smiley:

La famosa “Dispensa Ecclesiastica”… :slight_smile: :slight_smile: :slight_smile:

Eh, la dispensa ecclesiastica me la dai implicitamente lasciandomi scorrazzare in giro facendo casino… ma alla fine sei vescovo o qualcosa di più? :smile:

Direi … Rhino evangelist ! :smiley: