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)
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.
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)
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.
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.