I limiti dell’ottimizzazione sono prima di tutto il budget…
La mia definizione iniziale prendeva una semplice geometria (il parallelepipedo) e lo trasformava, che è una operazione leggera (senza fare operazioni pesanti come booleane solide).
Nel caso delle mesh, una trasformazione è praticamente istantanea, mentre per le brep/polisuperfici, purtroppo rhino/grasshopper ricalcola la “rendermesh” ogni volta che viene trasformata.
Nel caso di parallelepipedi forati, quello che stai facendo ora è fare una operazione di sottrazione solida per ogni coppia box/cilindro … cosa pesantissima!
Ancora peggio:
facendo flatten, i due input A e B contengono liste di elementi, e quindi Rhino deve cercare tutte le possibili collisioni per ogni elemento in A con
tutti gli elementi in B.
Nota invece che, se fai graft per portare A e B con la stessa struttura, ogni singola mesh in A verrà combinata con una singola mesh in B, senza dover cercare… molto più veloce!
Detto questo, io eviterei entrambe le soluzioni.
Quello che farei sarebbe il creare un singolo elemento forato, un campione unitario mesh
ben pulito, alto 1mm, e procederei semplicemente spostandolo e scalandolo in Z di quanto serve.
Questo probabilmente renderà la definizione come minimo decine di volte più veloce.
(in pratica vedi lo stesso metodo che ho usato nel mio primo file)
ulteriori ottimizzazioni le farei con c# e andando di multithread…