Сохранить и заменить сетку
Мне нужно создать выпуклую оболочку над моими объектами, отрендерить изображение, а затем снова удалить эту оболочку. Моя идея заключалась в том, чтобы сохранить объект, данные объекта или саму сетку, затем создать корпус и визуализировать изображение, а затем просто заменить объект / данные / сетку сохраненными данными.
Например, сначала я бы сделал
self.backup[obj.name] = obj.data
а затем после полного и рендеринга я хотел бы сделать что-нибудь вроде
orig_data= self.backup[obj.name]
obj.data = orig_data
obj.data.update()
Но это не восстановление прежних данных, корпус остается. Я предполагаю, что сейчас я просто храню ссылки вместо реальных данных, но я не знаю, как это исправить, потому что я мало что знаю о различных типах данных блендера и т. Д.
После попытки заменить сетку объектов, данные и сам объект, но ничего из этого не сработало, у меня как будто закончились идеи. Буду рад любому вкладу =)
PS: Я использую 2.8. в случае, если это имеет значение.
Ответы
Сделать копию
простой ответ:
self.backup[obj.name] = obj.data.copy()
без создания копии у вас была ссылка на ту же сетку. Если вы используете bpy.ops.mesh.convex_hullпредложение вместо использования bmesh, см.
Есть ли способ сделать несколько объектов выпуклыми оболочками?
Выпуклая оболочка как сетка
Данные уже хранятся для нас в данных blend-файла,
me = context.object.data
который без переименования мешей между ними все еще
bpy.data.objects[me.name]
Следовательно, можно просто сохранить имя, создать новую сетку с другим именем для выпуклой оболочки и поменять местами сетки, полученные через имена.
Если после создания сетки выпуклой оболочки и вы хотите, чтобы она была доступна постоянно, следует рассмотреть подход, придающий объекту-сетке свойство указателя на сетку его выпуклой оболочки.
bpy.props.Object.convex_hull_mesh = PointerProperty(type=bpy.types.Mesh)
создать выпуклую сетку корпуса и назначить ее этому свойству, чтобы сохранить ее. Другое логическое свойство можно использовать как флаг для переключения между исходной сеткой и сеткой выпуклой оболочки.