Memorizza e sostituisci la mesh

Oct 09 2020

Devo creare uno scafo convesso sui miei oggetti, renderizzare un'immagine e quindi eliminare di nuovo lo scafo. La mia idea era quella di memorizzare l'oggetto, i dati dell'oggetto o la mesh stessa, quindi creare lo scafo e renderizzare l'immagine e quindi sostituire semplicemente l'oggetto / dati / mesh con i dati memorizzati.

Per esempio prima lo farei

self.backup[obj.name] = obj.data

e poi dopo il rendering completo vorrei fare qualcosa di simile

orig_data= self.backup[obj.name]
obj.data = orig_data
obj.data.update()

Ma questo non sta ripristinando i dati precedenti, lo scafo rimane. Immagino che in questo momento memorizzo solo collegamenti invece di dati reali, ma non so come risolvere questo problema perché non so molto sui diversi tipi di dati di Blender, ecc.

Dopo aver provato a sostituire la mesh degli oggetti, i dati e l'oggetto stesso e nessuno di questi ha funzionato, ho finito le idee. Sarei felice di qualsiasi input =)

PS: sto usando 2.8. nel caso in cui ciò faccia la differenza.

Risposte

3 batFINGER Oct 09 2020 at 19:14

Fare una copia

la risposta semplice è `

self.backup[obj.name] = obj.data.copy()

senza fare una copia avevi un riferimento alla stessa mesh. Se stai usando bpy.ops.mesh.convex_hullsuggerisci invece di usare bmesh vedi

Esiste un modo per creare più oggetti scafi convessi?

Scafo convesso come rete

I dati sono già memorizzati per noi nei dati del file di fusione,

me = context.object.data

che senza dover rinominare le maglie in mezzo è ancora

bpy.data.objects[me.name]

Quindi potrebbe semplicemente mantenere il nome, creare una nuova mesh con un altro nome per lo scafo convesso e scambiare usando le mesh recuperate tramite nomi.

Se dopo aver creato una mesh di scafo convessa e desideri averla disponibile in modo permanente Un approccio da considerare sarebbe quello di dare a un oggetto mesh una proprietà di puntatore alla mesh del suo scafo convesso.

bpy.props.Object.convex_hull_mesh = PointerProperty(type=bpy.types.Mesh)

creare la maglia convessa dello scafo e assegnarla a questa proprietà per salvarla. Un'altra proprietà booleana potrebbe essere utilizzata come flag per scambiare tra la mesh dello scafo originale e quella convessa.