Come far convivere *.stp e *.stl – una soluzione alla problematica posta da Giovanni73

Forum per le domande e le discussioni in Italiano
Forum rules
regole del forum e le informazioni utili

Importante: PRIMA di chiedere aiuto leggete qui!
domad
Posts: 13
Joined: Mon Jun 22, 2020 12:16 pm

Come far convivere *.stp e *.stl – una soluzione alla problematica posta da Giovanni73

Postby domad » Mon Jun 29, 2020 9:04 pm

Buonasera a tutta la comunità!

Purtroppo non ho potuto postare prima per pregressi impegni.

Ho ritenuto più funzionale l’apertura di un nuovo post, poichè la problematica posta da Giovanni73 rientra tra quelle di base ed è una occasione per la formazione nel campo della modellazione tridimensionale.

La problematica risulta essere tra quelle fondamentali, interessante per gli “addetti” e per i tanti che si avvicinano o si vogliono avvicinare alla modellazione 3D.

I file in formato *.stp e *.stl sono estensioni, appunto, del mondo della modellazione 3D di uso molto comune, in particolar modo con l’avvento, prorompente, della stampa 3D e del cnc, tecnologie che possono offrire innegabili opportunità.
Premesso che, nella modellazione 3D, si possono raggiungere gli stessi risultati usando diversificate tecniche e tutte più o meno valide, mi accingo a descriverVi, sinteticame ma passo….passo, come ho affrontato, e portato a soluzione, la problematica senza dover apportare la benchè minima modifica fisica (tranne la scalatura finale dalla “forma.stl”, divenuta un solido, per renderla compatibile con la dimensione della “base.stp”) ai due oggetti, “base.stp” e “forma.stl”, con un risultato, ritengo, ampiamente accettabile.
Ciò premesso, spero che questo mini “wrinter tutorial” aiuti quanti si avviano all’utilizzo di FreeCad con la speranza di accrescere il loro interesse verso questo fantastico sw e in generale alla modellazione virtuale ma soprattutto a “non mollare alla prima difficoltà” ma usare molta fantasia e inventiva.
Consiglio, vivamente, di evitare di fare paragoni, in tutti i sensi, spesso troppo affrettati, con altri famosi CAD e modellatori 3D commerciali, non dimenticando che chi programma FreeCad è un appassionato come noi e che dona, con il suo encomiabile lavoro, il suo prezioso tempo per il bene comune e la LIBERTA’ del conoscere.

Iniziamo chiarendo, senza addentrarci in eccessivi tecnicismi e rigide definizioni (che con molta probabilità annoierebbero i neofiti smaniosi di concretizzare subito….in fondo all’inizio lo siamo stati un po tutti!) i formati *.stp e/o *.step ed *.stl:
- il primo è un formato ormai di uso comune per il CAD, CAM, CAE, ecc. i cui oggetti sono di solito di tipo solido parametrico (in cui tutte le varie “lavorazioni” sono incapsulate a mo di “matrioska”e organizzate con struttura ramificata).
Seguono lo standard normato ISO 10303 (step) il cui fine, codiviso, è rendere fruibile, attraverso regole unificate (protocolli), l’iterscambio di dati a prescidere dal sistema informatico usato.
- il secondo è un formato, chiamato tecnicamente “stereolitografia” o “Linguaggio Standard di Triangolazione”.
Utilizzato di solito per macchine utensili a controllo numerico o cnc, per la stampa 3D e prototipazione rapida.
Questo formato, chiamato con abuso del termine “solido”, in effetti non lo è.
A ben vedere, gli oggetti sono formati da un assieme di “facce” piane (superfici delimitate da linee in successione meglio definite come polilinee “wire” chiuse , le cui componenti unitarie sono propriamente definite “spigoli” e questi delimitati da due punti agli estremi detti “vertici”) aventi spessore “0” non nullo (!), poichè se lo fosse allora avremmo non più, appunto una superficie, ma solo una polilinea “Wire” chiusa (in parole povere la stessa differenza che c’è tra circonferenza e cerchio), opportunamente disposte nello spazio 3D a formare l’oggetto.
Tutte le curve in questo caso sono ricavate, per approssimazione, da linee in sequenza, pertanto, zoomando, quelle che da lontano sembrano archi, circonferanze, ecc. in realtà, come detto, sono degli infinitesimi spigoli, uniti tra loro, a mezzo vertici comuni e, appunto, in sequenza.
Questo oggetto descritto in maniera poco “ortodossa”, prende il nome di mesh che può essere complessa oppure unitaria che, in quest’ultimo caso, coincide con una singola faccia.
La similitudine con una maglia di una rete sia essa metallica o da pesca ne è un classico esempio, l’assieme di queste, oppurtunamente e sapientemente posizionate (modellate), possono creare una copia virtuale identica, magari, di un oggetto reale oppure il concretizzarsi, seppur sempre virtualmente, di un’idea.
Dunque l’oggetto, in questo caso, non è altro che un assieme di mesh (maglia) unitarie (facce), ricordo, di spessore pari a “0” (sono superfici), i cui lati (spigoli) sono in codivisione con quelle attigue.
Si intuisce, pertanto, che si tratta di un oggetto vuoto, similmente un oggetto nodellato con fogli di carta (esempio improprio poichè anche la carta, sottile per quanto possa essere, ha comunque uno spessore, ma adeguato a chiarire il concetto).
Cosa ben diversa dell’oggetto solido, più sopra descritto, poichè in esso “spigoli, facce e soprattutto curve”, che lo compongono sono oggetti diversi da quelli che definiscono le mesh, anche se per certi versi simili.
Ciò è apprezzabile particolarmente in stile visualizzazione wireframe, meno “confusionarie” rispetto ai reticoli mesh.
La differenza sostanziale è data dalle curve: nei solidi esse sono generate da funzioni matematiche che non sono affatto delle approssimazioni di spigoli in successione.
Quindi, in conclusione, spigoli, facce e curve nei solidi delimitano non più una superficie ma una porzione infinitesimale (di spessore con valore mai pari “0”) dello spazio 3D (quindi un infinitesimo volume) e che, a seconda del materiale prestabilito, acquistano un peso.
Per dirla alla FreeCad con riferimento al banco di lavoro Draft: - il massimo grado di “upgrade object” , ovviamente “abusando” dell’accostamento.
Fatta questa brevissima, sicuramente incompleta e poco rigida, ma obbligata premessa, appare chiaro che parliamo di due oggetti diversi che seguono fasi e tecniche di modellazione diverse, anche se apparentemente simili.
E’ impossibile procedere a operazioni booleane tra solidi e mesh poichè, per dirla in termini chimici, non sono tra loro miscibili!
Allora come fare per risolvere il problema?

Bisogna fare in modo che una piuttosto che l’altra, a seconda del fine che si vuole ottenere, “parlino la stessa lingua” cioè bisogna operare, tecnicamente, una “conversione”.

Premettendo che FreeCad ha già di suo un banco di lavoro rivolto all’editing delle mesh ma che rispetto ad altri sw più specifici, diciamo, è dotato di strumenti più “limitati” essendo il suo codice volto alla generazione e alla lavorazione di oggetti solidi.
Attesoché, essendo il file “base.stp” un oggetto solido, quindi più “adatto” a FreeCad, è necessario, per operare con le booleane, che il file “forma.stl” sia convertito da oggetto mesh a oggetto solido.
Freecad come detto, ha strumenti molto potenti per potere operare tale conversione senza errori e/o generazione di oggetti stravolti, a patto che non ci siano, nelle mesh da convertire, intersezioni e/o compenetrazioni e/o parti mancati, (non essere aperte).
Detta condizione è da osservare, ritengo, su qualsiasi dei sw che operano con oggetti solidi.
Posta questa condizione, affinchè essa sia rispettata è necessario, nel gergo, “ripulire” la mesh.
Pertanto il file “forma.stl” va “ripulito” per renderlo adatto agli strumenti che ci mette a disposizione FreeCad per la conversione in solido.
Per fare ciò mi sono avvalso di un altro sw LIBERO (!), che probabilmente già conoscete, Blender (avrei potuto usare MeshLab, un altro sw potentissimo, per arrivare allo stesso risultato).
Dotato/i di potenti strumenti per la gestione ed editing delle mesh (è nato per questo) ci viene in aiuto per “ripulire”, cioè ordinare, riparare, rinormalizzare, eliminare vertici coincidenti, rindondanze, ecc., soprattutto, per il caso che stiamo trattando, separare (attraverso la selezione loop), con relativa facilità e pazienza, i diversi oggetti mesh componenti la “forma.stl”.

Ecco le fasi, appresso descritte succintamente, che ho adottato:

1) Blender: inportazione e centratura della mesh nell’origine dello spazio globale;

2) Blender: suddivisione (mantenendo scrupolosamente le forme originali e le loro posizioni) della mesh complessiva “forma.stl” in mesh di singoli oggetti che ho denominato faccia, cappello, pon, sclera, pupilla e parte_sup_corpo;

2) Blender: “ripulitura” delle mesh dei sigoli oggetti soprattutto unione dei vertici coincidenti o rindondanti (se ne erano generati parecchi);

3) Blender: esportazione, mantenedo la posizione nello spazio 3D, per singolo file in formato “*.stl”, delle varie parti sopra indicate;

Blender a concluso la sua “collaborazione”.
Sono in possesso, finalmente, di mesh perfettamente compatibili con i potenti strumenti di solidificazione di FreeCad.

Ecco le fasi:

4) FreeCad: apro il file “base.step” e importo i sigoli file (sopra indicati) in formato *.stl (facendo attenzione a non spostarli cioè lasciarli lì dove FreeCad li ha inseriti nello spazio 3D, poichè durante l’importazione si ricomporrà l’oggetto “forma.stl” nel suo complesso);

5) FreeCad: dal banco di lavoro “Parte”, selezionata la mesh (una per volta), --> menu parte --> scelgo “crea forma da mesh” quindi nuovamente --> menu parte --> scelgo “converti in solido”.
Questa fase mi ha restituito degli oggetti solidi che possono essere “lavorate” con le funzioni booleane specifiche (unione, differenza e intersezione);

6) FreeCad: unisco in sequenza uno alla volta (non tutto in una volta poichè si potrebbe generare un crash o un errore per via della complessa elaborazione) le varie forme solide (naturalmente escluso l’oggetto solido “base.stp”) banco di lavoro “Parte” --> operazione booleana --> unione.

7) FreeCad: a personaggio (“forma.stl”) ricomposto in solido lo scalo per essere compatibile con la dimensione della “base.stp”: banco di lavoro “Draft” --> Draft modication tools --> Scale

8) FreeCad: ruoto il personaggio di 180° affinchè la parte con gli spigoli arrotondati sia rivolta verso l’interno della “base.stp” (essendo il fine quello di costruire uno stampino, ne agevolerò l’estrazione del pezzo dallo stampino): banco di lavoro “Draft”--> Draft modication tools--> Rotate

9) FreeCad: trasformo (sposto) la “base.stp” nell’origine globale e altrettanto faccio con il personaggio “forma.stl” facendo in modo che sia “affondato quasi (qualche decimo di mm affiorante) per intero sul fondo dell’oggetto “base.stl” e centrato rispetto a quest’ultimo.
Sempre banco di lavoro “Draft” --> Draft modication tools--> Move utilizzando gli appropriati snap per indicare a FreeCad lo spostamento dal punto di partena al punto di arrivo utilizzando, inoltre, l’obligatorietà di spostamento lungo la direzione dell’asse che ci interessa.
Il “quasi affondato” si rende neccessario poichè sono da evitare facce sovrapposte (giacenti sullo stesso piano) che con le operazioni booleane possono dare origine a risultati inaspettati.

10) FreeCad: opero la booleana “diferenza” facendo attenzione a selezionare nella corretta sequenza: banco di lavoro “Part” --> operazione booleana--> differenza. (se si sbaglia l’ordine si annulla con ctrl+z e si inverte nel pannello delle azioni oppure si seleziona invertendo l’ordine)

Dopo un pochino di attesa (il codice deve eseguire calcoli un “pochino” complessi) FreeCad ha restituito uno stampino che può essere esportato in formato *.stl pronto per la lavorazione cnc o per la stampa 3D oppure da dare in “pasto” a MeshLab per l’ulteriore conversione in *.u3d per la successiva creazione del *.pdf 3D (magari da spedire a qualcuno per mostragli l’idea che magari non sa niente di CAD ma sa usare il lettore di *.pdf)

Va precisato che se il personaggio (“forma.stl”), non ruotato, lo avessimo adagiato sulla faccia della parte opposta della “base.stp” e operato la booleana unione avremmo ottenuto un tappo con rilievo, o se affondato in essa, applicando la booleana differenza avremmo ottenuto un tappo con incisione.
Potete cimentarvi utilizzando i file sotto indicati.

Dal link sotto riportato potete scaricare i seguenti file racchiusi nella cartella compressa “LoStampino.zip”:
- base.stp (file di partenza)
- forma.stl (file di partenza)
- suddivisione.blend (da aprire con Blender)
- cappello.stl
- faccia.stl
- parte_sup_corpo.stl
- pon.stl
- pupilla.stl
- sclera.stl
- booleane.FCStd
- stampino-completo.stl
- stampino-completo.pdf (ottenuto col la guida tecnica pubblicata nel form con post dal titolo “Da FreeCad-Blender (o cad 3/D) a pdf 3D con sw gratuiti” che Vi invito a leggere (lì ho inserito la soluzione per la problematica dell’esportazione in *.u3d di MeshLab), ma soprattutto a sperimentare.
Da notare il peso del formato 3D *.pdf (141 KB!!)

Dimenticavo! Ecco le versioni dei sw di modellazione usati:
FreeCad: 0.19 numero 21753 Git
Blender: 2.90.0 Alpha 874af5301cdf
Con la speranza di essere stato chiaro ma soprattutto utile, anche se per uno solo di Voi ne è valsa la pena!
Il link: http://www.filedropper.com/lostampino
Buon lavoro a tutti!