feat: mimic blender undo handling

This commit is contained in:
Swann 2020-10-15 17:21:14 +02:00
parent 9f8222afa7
commit f151c61d7b
No known key found for this signature in database
GPG Key ID: E1D3641A7C43AACB
2 changed files with 19 additions and 11 deletions

View File

@ -128,9 +128,9 @@ class BlDatablock(ReplicatedDatablock):
if instance and hasattr(instance, 'uuid'):
instance.uuid = self.uuid
self.diff_method = DIFF_BINARY
# self.diff_method = DIFF_BINARY
def resolve(self):
def resolve(self, construct = True):
datablock_ref = None
datablock_root = getattr(bpy.data, self.bl_id)
datablock_ref = utils.find_from_attr('uuid', self.uuid, datablock_root)
@ -139,14 +139,18 @@ class BlDatablock(ReplicatedDatablock):
try:
datablock_ref = datablock_root[self.data['name']]
except Exception:
name = self.data.get('name')
logging.debug(f"Constructing {name}")
datablock_ref = self._construct(data=self.data)
if construct:
name = self.data.get('name')
logging.debug(f"Constructing {name}")
datablock_ref = self._construct(data=self.data)
if datablock_ref:
if datablock_ref is not None:
setattr(datablock_ref, 'uuid', self.uuid)
self.instance = datablock_ref
return True
else:
return False
self.instance = datablock_ref
def remove_instance(self):
"""

View File

@ -686,10 +686,14 @@ def sanitize_deps_graph(dummy):
A future solution should be to avoid storing dataclock reference...
"""
if session and session.state['STATE'] == STATE_ACTIVE:
for node_key in session.list():
session.get(node_key).resolve()
if session and session.state['STATE'] == STATE_ACTIVE:
session.lock()
for node_key in session.list():
node = session.get(node_key)
if node and not node.resolve(construct=False):
session.remove(node_key)
session.unlock()
@persistent
def load_pre_handler(dummy):