Armazene e substitua a malha

Oct 09 2020

Preciso criar um casco convexo sobre meus objetos, renderizar uma imagem e excluir esse casco novamente. Minha ideia era armazenar o objeto, os dados do objeto ou a própria malha, então criar o casco e renderizar a imagem e então apenas substituir o objeto / dados / malha com os dados armazenados.

Por exemplo, primeiro eu faria

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

e depois de full & rendering, gostaria de fazer algo como

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

Mas isso não é restaurar os dados anteriores, o casco permanece. Eu estou supondo que agora eu apenas armazeno links em vez de dados reais, mas não sei como consertar isso porque eu realmente não sei muito sobre os diferentes tipos de dados do blender etc.

Depois de tentar substituir a malha dos objetos, os dados e o próprio objeto e nada funcionou, fiquei sem ideias. Eu ficaria feliz com qualquer entrada =)

PS: Estou usando o 2.8. caso isso faça alguma diferença.

Respostas

3 batFINGER Oct 09 2020 at 19:14

Faça uma cópia

a resposta simples é `

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

sem fazer uma cópia, você tinha uma referência à mesma malha. Se você estiver usando bpy.ops.mesh.convex_hullsugestão ao invés de usar bmesh veja

Existe alguma maneira de fazer cascos convexos de vários objetos?

Casco convexo como malha

Os dados já estão armazenados para nós nos dados do arquivo blend,

me = context.object.data

que sem qualquer renomeação de malhas entre ainda é

bpy.data.objects[me.name]

Portanto, poderia simplesmente manter o nome, fazer uma nova malha com outro nome para casco convexo e trocar usando malhas recuperadas por meio de nomes.

Depois de criar uma malha de casco convexa e desejar tê-la disponível permanentemente, uma abordagem a ser considerada seria atribuir a um objeto de malha uma propriedade de ponteiro para a malha de seu casco convexo.

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

crie uma malha de casco convexa e atribua-a a esta propriedade para salvá-la. Outra propriedade booleana pode ser usada como uma bandeira para trocar entre a malha do casco original e a convexa.