Armazene e substitua a malha
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
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.