diff --git a/client.py b/client.py index bf008ab..a71c1bf 100644 --- a/client.py +++ b/client.py @@ -23,7 +23,7 @@ DUMP_AGENTS_NUMBER = 1 lock = threading.Lock() logger = logging.getLogger(__name__) -logging.basicConfig(level=environment) +logging.basicConfig(level=logging.DEBUG) instance = None @@ -412,22 +412,21 @@ def net_worker(ctx, store, pipe, serial_product, serial_feed, stop_event,externa logger.debug("snapshot from {} stored".format(msg.id)) elif agent.state == State.ACTIVE: if msg.id != agent.id: + logger.debug("PULL: {} from {}".format(msg.key,msg.id)) - # with lock: - # helpers.load(msg.key, msg.body) msg.store(agent.property_map) - # net_product.put(('LOAD', msg.key, msg.body)) + params = [] params.append(msg.key) params.append(msg.body) external_executor.put((helpers.load,params)) - else: - logger.debug("{} nothing to do".format(agent.id)) - + # Serialisation thread => Net thread if not net_feed.empty(): key, value = net_feed.get() if value: + logger.debug("SERIAL => NET: {} ".format(key)) + # Stamp with id value['id'] = agent.id.decode() diff --git a/environment.py b/environment.py index a18dba2..3e1c549 100644 --- a/environment.py +++ b/environment.py @@ -3,7 +3,6 @@ import subprocess import sys from pathlib import Path import logging -import yaml import collections logger = logging.getLogger(__name__) @@ -61,6 +60,8 @@ ORDERED_TYPES = [ rtypes = [] def load_config(): + import yaml + try: with open(CONFIG, 'r') as config_file: return yaml.safe_load(config_file) @@ -70,12 +71,16 @@ def load_config(): return DEFAULT_CONFIG def genereate_replicated_types(replicated_types): + rtypes.clear() + for t in ORDERED_TYPES: if replicated_types[t]: rtypes.append(t) def save_config(config): + import yaml + logger.info("saving config") with open(CONFIG, 'w') as outfile: yaml.dump(config, outfile, default_flow_style=False) diff --git a/helpers.py b/helpers.py index db226ce..33bcad0 100644 --- a/helpers.py +++ b/helpers.py @@ -2,6 +2,7 @@ import logging import sys from uuid import uuid4 import json +import os import bpy import mathutils @@ -70,7 +71,7 @@ def load(key, value): target = resolve_bpy_path(key) target_type = key.split('/')[0] - logger.debug("load {}".format(key)) + logger.debug("load{}, {}".format(target_type, key)) if value == "None": return @@ -78,7 +79,7 @@ def load(key, value): load_object(target=target, data=value, create=True) if target_type == 'Image': - load_object(target=target, data=value) + load_image(target=target, data=value) elif target_type == 'Mesh': load_mesh(target=target, data=value, create=True) @@ -137,19 +138,26 @@ def load_client(client=None, data=None): draw.renderer.draw_client_selected_objects(data) + def load_image(target=None, data=None): - if not target: - image = bpy.data.image.new( - name=data['name'], - width=data['width'], - height=data['height'], - alpha=data['alpha'], - float_buffer=data['float_buffer'] - ) - else: - image = target - - dump_anything.load(target, data) + try: + if not target: + image = bpy.data.image.new( + name=data['name'], + width=data['width'], + height=data['height'], + alpha=data['alpha'], + float_buffer=data['float_buffer'] + ) + else: + image = target + + image.source = 'FILE' + image.filepath = data['filepath'] + + # dump_anything.load(target, data) + except Exception as e: + log.error(e) def load_armature(target=None, data=None, create=False): @@ -246,7 +254,7 @@ def load_mesh(target=None, data=None, create=False): target.id = data['id'] else: - logger.debug("Mesh can't be loaded") + logger.error("Mesh can't be loaded") def load_object(target=None, data=None, create=False): @@ -556,9 +564,11 @@ def dump(key): if target_type == 'Image': data = dump_datablock(target, 2) data['pixels'] = dump_image(target) + data = dump_datablock_attibute(target,['filepath','source'], 2, data) elif target_type == 'Material': data = dump_datablock(target, 2) - dump_datablock_attibute(target, ['node_tree'], 7, data) + dump_datablock_attibute(target.node_tree, ["nodes","links"] , 3, data['node_tree']) + logger.debug("Material {} dumped".format(key)) elif target_type == 'GreasePencil': data = dump_datablock(target, 2) dump_datablock_attibute( @@ -637,15 +647,21 @@ def dump_datablock_attibute(datablock=None, attributes=[], depth=1, dickt=None): def dump_image(image): - pixels = [] - # for x in range(image.size[0]*image.size[1]): - # px = [ - # image.pixels[x], - # image.pixels[x+1], - # image.pixels[x+2], - # image.pixels[x+3] - # ] - # pixels.append(px) + pixels = None + if image.source == "GENERATED": + img_name = "{}.png".format(image.name) + + image.filepath_raw = os.path.join(environment.CACHE_DIR,img_name) + image.file_format = "PNG" + image.save() + + if image.source == "FILE": + + file = open(image.filepath_raw, "rb") + pixels = file.read() + logger.debug("Reading image file {}".format(image.name)) + else: + logger.error("image format not supported") return pixels diff --git a/operators.py b/operators.py index 5427c6e..a7312ac 100644 --- a/operators.py +++ b/operators.py @@ -91,6 +91,7 @@ def update_client_selected_object(context): def init_datablocks(): for datatype in environment.rtypes: if bpy.context.window_manager.session.supported_datablock[datatype].is_replicated: + logger.debug("INIT: {}".format(datatype)) for item in getattr(bpy.data, helpers.BPY_TYPES[datatype]): item.id = bpy.context.window_manager.session.username key = "{}/{}".format(datatype, item.name)