feat: mimic blender undo handling
This commit is contained in:
parent
9f8222afa7
commit
f151c61d7b
@ -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,15 +139,19 @@ 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):
|
||||
"""
|
||||
Remove instance from blender data
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user