Volume interno tra superfici

Buongiorno e buon 2025 a tutti.

Volevo chiedervi se siete a conoscenza di un modo per conoscere il volume interno di una zona che si ottiene da Intersezione di tanti piani.

Supponendo di avere piani tra solo secanti, vorrei poter ottenere tutti i volumi chiusi ottenuti e… vabbè poi numerarli.

Sapete come potrei fare?
Grazie
L.

Ciao Luca e Buon Anno a tutti.
Prova questa definizione.
volumi.gh (14,0 KB)

3 Mi Piace

Così come la descrivi sembra completamente generalizzato come caso…

Coprire la casistica dove, due piani quasi paralleli formano un lunghissimo “cuneo”, è un po scomodo…

Se sai per certo che casi estremi come quello non capitano, io farei semplicemente un enorme volume iniziale (una sfera o bbox gonfiato) e iterativamente andrei a fare una differenza booleana con i vari piani (usando una enorme superficie ad ogni piano) e alla fine fai il calcolo del volume del solido rimasto.
(do per scontato che l’orientamento della normale dei piani è coerente al risultato che stai cercando… se le normali sono indefinite, mi viene da pensare che il problema non abbia una soluzione certa)

Hai dei dati di partenza d’esempio?

Grazie ad entrambi. Non ho ancora avuto modo di provare la tua soluzione @leopoldomonzani però posso dirti/dirvi che non si parte da un unico ambiente che si tagliuzza, ma gli ambienti sono creati da piani paralleli verticali, orizzontali e trasversali che si intersecano creando volumi chiusi di varia dimensione. Il caso deve essere generalizzato al momento, non serve il campo di applicazione forse, ma posso condividerlo: siamo in ambito edilizia e devo fare uno studio di acustica. Per tale studio mi serve conoscere il volume di ogni ambiente chiuso.
Posso importare la geometria 3D da altro software solo in dwg. Vorrei poter estrapolare in una tabella tutte i volumi abitabili, mapparli, per poi continuare con lo sviluppo del codice C# in corso.

Interessante.
Vorrei fare qualche prova ma senza un esempio di dati di input ho difficoltà a immaginare completamente la situazione.

fai 4 piani paralleli nelle tre direzioni, che si Intersecano creando volumi chiusi.

Finalmente posso metterci mano.
ForumLocaliInterni.3dm (98,3 KB)
In allegato un esempio di intersezione di piani, ma potrebbero non essere paralleli, potrebbero avere anche angoli a 60,70, gradi… quelli che potete immaginare in un edificio.
@leopoldomonzani non riesco ad installare anemone. Non si può fare senza?

Si può fare certamente raggruppando i piani che hanno la stessa direzione e per ogni gruppo splittare i solidi ottenuti dalla suddivisione precedente.
Qui ho usato un cubo da suddividere con Split Brep.
Potresti risolvere il problema anche con uno script.
volumi a.gh (34,4 KB)

Non c’è un volume chiuso iniziale da tagliuzzare. I volumi si possono originare dall’intersezione dei piani.

Senza un esempio concreto è difficile.

come senza un esempio, ho caricato il file 3dm.

Proprio non l’avevo visto.
La vecchiaia.

1 Mi Piace

Sto facendo troppa confusione.
Il file l’ho scaricato ma ho capito male.
Comunque il procedimento è lo stesso.

lo stesso di quale? Nel gh che hai postato c’è una brep che non ho.

La brep l’ho aggiunta per avere qualcosa su cui lavorare.

eh ho capito, ma è un altra cosa, io non ho brep.

Ciao

parti dal boundingbox dato dai piani. Per sicurezza incrementa le dimensioni del boundingbox “A”. Elabora ogni piano, estendendolo per garantire l’intersezione con il boundingbox “A” ed esegui lo split. Infine chiudi i due solidi. Elaborato il primo piano ottieni due solidi, elaborato il secondo piano ottieni quattro solidi ecc. Al termine ottieni n solidi. Elimini tutti i solidi con boundingbox che interseca (adicenza) il boundingbox “A”. A questo punto hai tutto.

1 Mi Piace

Ok come posso escludere le zone esterne non realmente chiuse, ma i singoli volumi interni non ho capito come ottenerli.
Immagina il cubo di Rubik: dalle intersezioni cerco i “cubi colorati”, ovvero i locali da analizzare.

Se prendi l’asse x, sia il boundingbox dei piani (-1;1). Lo amplifichi ottenendo (-2;2). Eseguiti tutti gli split ottieni degli intervalli. Se per esempio ottieni questi intervalli sempre rispetto a x:
(-2;-1);(-1;0);(0;0.5);(0.5;2), i solidi associati a (-2;1) e (0.5;2) li devi scartare.
Pensando al cubo di rubik il cui boundingbox corrisponde al boundingbox amplificato, scarterai tutti i cubi esterni e ti rimane solo il cubo centrale.

:scream: beddamaaaatriii … ci riprovo quando sono più lucido, vado in branda, grazie.