Simpan dan ganti jaring

Oct 09 2020

Saya perlu membuat lambung cembung di atas objek saya, membuat gambar, lalu menghapus lambung itu lagi. Ide saya adalah menyimpan objek, data objek atau mesh itu sendiri kemudian membuat lambung dan membuat gambar dan kemudian hanya mengganti objek / data / mesh dengan data yang disimpan.

Misalnya pertama saya lakukan

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

dan kemudian setelah & rendering penuh saya ingin melakukan sesuatu seperti

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

Tapi ini tidak mengembalikan data sebelumnya, lambung tetap ada. Saya menebak sekarang saya hanya menyimpan tautan alih-alih data nyata tetapi saya tidak tahu cara memperbaikinya karena saya tidak benar-benar tahu banyak tentang tipe data blender yang berbeda, dll.

Setelah mencoba untuk mengganti objek mesh, data dan objek itu sendiri dan tidak ada yang berhasil saya semacam kehabisan ide. Saya akan senang dengan masukan apa pun =)

PS: Saya menggunakan 2.8. dalam hal itu membuat perbedaan.

Jawaban

3 batFINGER Oct 09 2020 at 19:14

Buat salinan

jawaban sederhananya adalah '

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

tanpa membuat salinan Anda memiliki referensi ke tautan yang sama. Jika Anda menggunakan bpy.ops.mesh.convex_hullsarankan daripada menggunakan bmesh, lihat

Apakah ada cara untuk membuat beberapa objek lambung cembung?

Convex Hull sebagai Mesh

Data sudah disimpan untuk kita dalam data file campuran,

me = context.object.data

yang tanpa penggantian nama meshes peralihan masih

bpy.data.objects[me.name]

Oleh karena itu, cukup simpan namanya, buat mesh baru dengan nama lain untuk convex hull dan tukar menggunakan mesh yang diambil melalui nama.

Jika setelah membuat mesh lambung cembung dan ingin membuatnya tersedia secara permanen. Pendekatan yang perlu dipertimbangkan adalah memberikan properti penunjuk pada objek mesh ke mesh lambung cembungnya.

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

buat mesh lambung cembung dan tetapkan ke properti ini untuk menyimpannya. Properti boolean lain dapat digunakan sebagai bendera untuk bertukar antara mesh lambung asli dan cembung.