Autointersezioni e contours

Buongiorno a tutti,

mi trovo di fronte a questo problema:
partendo da un stl devo sezionarlo n volte (ad una distanza z di ad esempio 0.005 mm) prendendo però il solo bordo esterno delle mesh (all’interno sono presenti altre mesh).

Utilizzando il comando _Contours va ad intersecare anche le mesh interne al solido ed inoltre genera oltre 2000 autointersezioni…

A questo punto le domande sono 2:

  1. C’è un modo di sezionare le mesh prendendo/intersecando i soli bordi esterni del solido?
  2. Esiste un modo (magari anche con Grasshopper) per risolvere/eliminare in maniera automatica il problema delle autointersezioni nelle curve?

Lascio in allegato il file in esame:
Test autointersezioni.3dm (2,9 MB)

Il problema delle autointersezioni con il comando _contours mi è capitato anche in altri casi, in cui l’stl non sembrava presentare porzioni “interne”.

P.S. Ho già ridotto al massimo le tolleranze, notando che il numero di autointersezioni in generale diminuisce:
image

Ciao, a giudicare dalla geometria sembra che non ti servano delle parti presenti nello spessore (che poi sono i 1340 bordi non-manifold…) mentre vorresti quelle sul rilievo:

  • quando lanci il comando Contour ti chiede in alto se vuoi effettuarlo su un “range” → dopo averci cliccato ti basta dare come base point un vertice del bordo superiore;
  • mentre per i bordi esterni basta prendere la prima curva creata dal countour e fare un array lineare verso il basso di quanto vuoi.

Se ho capito quello che vuoi

Giusto quello che dice Alex, però secondo me va rifatto il solido.
Ci sono facce che si intersecano rendendo impossibile qualunque operazione.
Almeno così credo io.


In ordine eseguo:

Così facendo però mi effettua la sezione anche delle porzioni “interne” e non solamente quelle esterne. Cosa sbaglio?
image

ahimè non è stato realizzato da me, non posso modificarlo/rifarlo.
Tuttavia la stessa problematica mi si è verificata anche con altri stl.

Invece per quanto riguarda le curve autointersecanti c’è qualche modo per risolverle in modo automatico?

Perché la direzione del contour l’hai data verso il basso, mentre i contorni che ti servono a 0.005 sono quelli dal bordo superiore e poi verso l’alto (giusto?)

Se ti servono poi anche solo quelle del bordo esterno verso il basso: prendi la prima curva del contour e la copi verso il basso ogni 0.005 con un array lineare

PS: si la mesh così com’è è sballata quindi non sono sicurissimo che la soluzione ti dia quello che vuoi

PPS: quando hai curve intersecanti puoi usare anche boolean curve (facendo attenzione a mettere remove:yes o ti sposti su un altro layer) e poi cliccando sull’esterno. Ovviamente per ogni curva (o solo la prima e poi array lineare). Quindi questa forse converrebbe farla su gh per automatizzare

Purtroppo si, mi serve sezionarlo completamente lungo z e prendere solamente tutti i contorni esterni.

Si chiaro, ma speravo esistesse un qualche modo “automatico” che consentisse di realizzarlo piuttosto che doverlo fare a mano. Anche perchè mi si verifica anche su altre tipologie di stl, per cui cercavo una soluzione il più generica possibile…

Forse con uno script.

@leopoldomonzani @alex.coppola7
in un caso come questo, in cui trovo 3 autointersezioni, come posso fare per generare un riempimento senza utilizzare le curve limite e modificare manualmente le curve? Esiste un modo?

Vorrei trovare un modo per aggirare questo limite delle autointersezioni…

TEST autointersezioni.dxf (614,9 KB)

Visto che le intersezioni sono solo tre si possono selezionare i punti che determinano le intersezioni e spostarli senza alterare la forma della curva.

Grazie Leopoldo, ma dato che questa cosa si ripete su diversi layer (per un totale di 44 o 200 autointersezioni al valiare delle tolleranze utilizzate), ho bisogno di un comando/procedura per eliminarle tutte in maniera “automatica” e non manualmente.

Se vuoi, ti lascio in allegato il file stl in cui i “_contour” (a distanza Z 0.01) mi danno le 44 autointersezioni che vorrei evitare:
Test autointersezioni.3dm (493,2 KB)

La mesh non ha problemi io comunque ottengo 84 intersezioni con Rhino 7.
Prova con Rhino 8: nessuna intersezione.

1 Mi Piace

Ciao allora per questo caso sembra funzionare una procedura abbastanza semplice ma ripetitiva, quindi ne ho scritto una macro:

-_SelSelfIntersectingCrv
_Explode
_SelNone
_SelDupAll
_Delete
_SelAll
_Join
_SelNone
_SelSelfIntersectingCrv

Se ti copi questi comandi così come sono scritti nel Macro Editor e lo lanci, dovrebbe andare (se ho capito bene lo scopo… che poi quale sarebbe di preciso?). L’ultimo comando l’ho inserito solo come verifica.
Se ho tempo verifico sul file 3dm dopo il contour.
E se funziona puoi anche crearti un button dedicato per questo: tasto destro sulla barra, new button e copi e incolli la macro nello spazio command, poi gli dai un nome ecc

1 Mi Piace

Per quanto riguarda quest’altra mesh… ho fatto qualche prova anche su GH e su MeshMixer ma sembra che il problema sia doppio: sembra quasi che qualcuno abbia tappato dei fori presenti sulla mesh originale. Comunque se ho tempo ci riguardo, tuttavia se ci dicessi a cosa servono queste passate così precise, magari ci sono soluzione completamente diverse dal contour.

Ciao Leopoldo,

se installo Rhino 8 WIP, mi rimuove/aggiorna in automatico Rhino 7 o posso utilizzare entrambi?

Io li utilizzo entrambi.

…ora è già disponibile la versione Beta di Rhino 8

Si, grazie, ho installato quella e confermo, fortunatamente si può usare in contemporanea a Rhino 7

Grazie Leopoldo!
Rhino 8 sembra aver risolto parzialmente il problema delle autointersezioni dato che le unità/tolleranze sono diminuite di ulteriori 1/2 cifre decimali.

Tuttavia in casi complessi in cui su rhino 7 avevo 2000 autointersezioni, su rhino 8 continuo ad avere 200 autointersezioni.
Monitorerò la cosa nei prossimi giorni su altri modelli.

Grazie per la risposta Alex!

La macro sembra funzionare correttamente, tuttavia in alcuni punti (in disegni complessi) mi ha generato una serie di artefatti (oltre a richiedere un discreto tempo computazionale).

Per ora con rhino 8 le cose sembrano andare meglio, testerò nei prossimi giorni la tua macro anche su altri modelli!