refactor: move session data to init, class renaming
This commit is contained in:
103
__init__.py
103
__init__.py
@ -13,6 +13,8 @@ import bpy
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import string
|
||||
import random
|
||||
import bpy
|
||||
import addon_utils
|
||||
from pathlib import Path
|
||||
@ -20,6 +22,40 @@ from pathlib import Path
|
||||
python_path = Path(bpy.app.binary_path_python)
|
||||
cwd_for_subprocesses = python_path.parent
|
||||
|
||||
|
||||
# UTILITY FUNCTIONS
|
||||
def client_list_callback(scene, context):
|
||||
global client_keys
|
||||
items = [("Common", "Common", "")]
|
||||
|
||||
username = bpy.context.window_manager.session.username
|
||||
|
||||
if client_keys:
|
||||
for k in client_keys:
|
||||
if 'Client' in k[0]:
|
||||
name = k[1]
|
||||
|
||||
if name == username:
|
||||
name += " (self)"
|
||||
|
||||
items.append((name, name, ""))
|
||||
|
||||
return items
|
||||
|
||||
|
||||
def randomStringDigits(stringLength=6):
|
||||
"""Generate a random string of letters and digits """
|
||||
lettersAndDigits = string.ascii_letters + string.digits
|
||||
return ''.join(random.choice(lettersAndDigits) for i in range(stringLength))
|
||||
|
||||
|
||||
def randomColor():
|
||||
r = random.random()
|
||||
v = random.random()
|
||||
b = random.random()
|
||||
return [r, v, b]
|
||||
|
||||
|
||||
def get_package_install_directory():
|
||||
for path in sys.path:
|
||||
if os.path.basename(path) in ("dist-packages", "site-packages"):
|
||||
@ -34,13 +70,78 @@ except:
|
||||
from . import operators
|
||||
from . import ui
|
||||
|
||||
class RCFSessionProps(bpy.types.PropertyGroup):
|
||||
username = bpy.props.StringProperty(
|
||||
name="Username",
|
||||
default="user_{}".format(randomStringDigits())
|
||||
)
|
||||
ip = bpy.props.StringProperty(
|
||||
name="ip",
|
||||
description='Distant host ip',
|
||||
default="127.0.0.1")
|
||||
port = bpy.props.IntProperty(
|
||||
name="port",
|
||||
description='Distant host port',
|
||||
default=5555)
|
||||
|
||||
add_property_depth = bpy.props.IntProperty(
|
||||
name="add_property_depth",
|
||||
default=1)
|
||||
buffer = bpy.props.StringProperty(name="None")
|
||||
is_admin = bpy.props.BoolProperty(name="is_admin", default=False)
|
||||
load_data = bpy.props.BoolProperty(name="load_data", default=True)
|
||||
init_scene = bpy.props.BoolProperty(name="load_data", default=True)
|
||||
clear_scene = bpy.props.BoolProperty(name="clear_scene", default=True)
|
||||
update_frequency = bpy.props.FloatProperty(
|
||||
name="update_frequency", default=0.008)
|
||||
active_object = bpy.props.PointerProperty(
|
||||
name="active_object", type=bpy.types.Object)
|
||||
session_mode = bpy.props.EnumProperty(
|
||||
name='session_mode',
|
||||
description='session mode',
|
||||
items={
|
||||
('HOST', 'hosting', 'host a session'),
|
||||
('CONNECT', 'connexion', 'connect to a session')},
|
||||
default='HOST')
|
||||
client_color = bpy.props.FloatVectorProperty(
|
||||
name="client_instance_color",
|
||||
subtype='COLOR',
|
||||
default=randomColor())
|
||||
clients = bpy.props.EnumProperty(
|
||||
name="clients",
|
||||
description="client enum",
|
||||
items=client_list_callback
|
||||
)
|
||||
enable_draw = bpy.props.BoolProperty(
|
||||
name="enable_draw",
|
||||
description='Enable overlay drawing module',
|
||||
default=True)
|
||||
|
||||
classes = {
|
||||
RCFSessionProps,
|
||||
}
|
||||
|
||||
def register():
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
bpy.types.ID.id = bpy.props.StringProperty(default="None")
|
||||
bpy.types.ID.is_dirty = bpy.props.BoolProperty(default=False)
|
||||
bpy.types.WindowManager.session = bpy.props.PointerProperty(
|
||||
type=RCFSessionProps)
|
||||
|
||||
operators.register()
|
||||
ui.register()
|
||||
|
||||
|
||||
def unregister():
|
||||
|
||||
ui.unregister()
|
||||
operators.unregister()
|
||||
|
||||
|
||||
del bpy.types.WindowManager.session
|
||||
del bpy.types.ID.id
|
||||
del bpy.types.ID.is_dirty
|
||||
|
||||
for cls in classes:
|
||||
bpy.utils.unregister_class(cls)
|
||||
|
@ -468,8 +468,8 @@ def watchdog_worker(serial_feed,interval, stop_event):
|
||||
logger.info("watchdog thread launched with {} sec of interval".format(interval))
|
||||
while not stop_event.is_set():
|
||||
|
||||
for datatype in helpers.SUPPORTED_TYPES:
|
||||
for item in getattr(bpy.data, helpers.CORRESPONDANCE[datatype]):
|
||||
for datatype in helpers.BPY_TYPES.keys():
|
||||
for item in getattr(bpy.data, helpers.BPY_TYPES[datatype]):
|
||||
key = "{}/{}".format(datatype, item.name)
|
||||
try:
|
||||
if item.is_dirty:
|
||||
|
4
draw.py
4
draw.py
@ -122,7 +122,7 @@ class DrawFactory(object):
|
||||
def draw_client_selected_objects(self, client):
|
||||
if client:
|
||||
name = client['id']
|
||||
local_username = bpy.context.window_manager.session_settings.username
|
||||
local_username = bpy.context.window_manager.session.username
|
||||
|
||||
if name != local_username:
|
||||
if client['active_objects']:
|
||||
@ -165,7 +165,7 @@ class DrawFactory(object):
|
||||
def draw_client(self, client):
|
||||
if client:
|
||||
name = client['id']
|
||||
local_username = bpy.context.window_manager.session_settings.username
|
||||
local_username = bpy.context.window_manager.session.username
|
||||
|
||||
if name != local_username:
|
||||
try:
|
||||
|
28
helpers.py
28
helpers.py
@ -9,12 +9,10 @@ import mathutils
|
||||
from . import draw
|
||||
from .libs import dump_anything
|
||||
|
||||
CORRESPONDANCE = {'GreasePencil': 'grease_pencils', 'Curve': 'curves', 'Collection': 'collections', 'Mesh': 'meshes', 'Object': 'objects', 'Material': 'materials',
|
||||
# TODO: replace hardcoded values...
|
||||
BPY_TYPES = {'GreasePencil': 'grease_pencils', 'Curve': 'curves', 'Collection': 'collections', 'Mesh': 'meshes', 'Object': 'objects', 'Material': 'materials',
|
||||
'Texture': 'textures', 'Scene': 'scenes', 'Light': 'lights', 'SunLight': 'lights', 'SpotLight': 'lights', 'AreaLight': 'lights', 'PointLight': 'lights', 'Camera': 'cameras', 'Action': 'actions', 'Armature': 'armatures', 'Grease Pencil': 'grease_pencils'}
|
||||
|
||||
SUPPORTED_TYPES = ['Curve', 'Material', 'Texture', 'Light', 'Camera', 'Mesh',
|
||||
'Armature', 'Grease Pencil', 'Object', 'Action', 'Collection', 'Scene']
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
# UTILITY FUNCTIONS
|
||||
@ -69,16 +67,6 @@ def get_selected_objects(scene):
|
||||
return selected_objects
|
||||
|
||||
|
||||
def get_all_datablocks():
|
||||
datas = []
|
||||
for datatype in SUPPORTED_TYPES:
|
||||
for item in getattr(bpy.data, CORRESPONDANCE[datatype]):
|
||||
item.id = bpy.context.window_manager.session_settings.username
|
||||
datas.append("{}/{}".format(datatype, item.name))
|
||||
|
||||
return datas
|
||||
|
||||
|
||||
# LOAD HELPERS
|
||||
def load(key, value):
|
||||
target = resolve_bpy_path(key)
|
||||
@ -129,7 +117,7 @@ def resolve_bpy_path(path):
|
||||
|
||||
try:
|
||||
path = path.split('/')
|
||||
item = getattr(bpy.data, CORRESPONDANCE[path[0]])[path[1]]
|
||||
item = getattr(bpy.data, BPY_TYPES[path[0]])[path[1]]
|
||||
|
||||
except:
|
||||
pass
|
||||
@ -140,7 +128,7 @@ def resolve_bpy_path(path):
|
||||
def load_client(client=None, data=None):
|
||||
C = bpy.context
|
||||
D = bpy.data
|
||||
net_settings = C.window_manager.session_settings
|
||||
net_settings = C.window_manager.session
|
||||
|
||||
if client and data:
|
||||
if net_settings.enable_draw:
|
||||
@ -275,7 +263,7 @@ def load_object(target=None, data=None, create=False):
|
||||
|
||||
target.id = data['id']
|
||||
|
||||
client = bpy.context.window_manager.session_settings.username
|
||||
client = bpy.context.window_manager.session.username
|
||||
|
||||
if target.id == client:
|
||||
target.hide_select = False
|
||||
@ -342,7 +330,7 @@ def load_collection(target=None, data=None, create=False):
|
||||
|
||||
target.id = data['id']
|
||||
|
||||
client = bpy.context.window_manager.session_settings.username
|
||||
client = bpy.context.window_manager.session.username
|
||||
|
||||
if target.id == client:
|
||||
target.hide_select = False
|
||||
@ -525,7 +513,7 @@ def load_light(target=None, data=None, create=False, type=None):
|
||||
def load_default(target=None, data=None, create=False, type=None):
|
||||
try:
|
||||
if target is None and create:
|
||||
target = getattr(bpy.data, CORRESPONDANCE[type]).new(data["name"])
|
||||
target = getattr(bpy.data, BPY_TYPES[type]).new(data["name"])
|
||||
|
||||
dump_anything.load(target, data)
|
||||
|
||||
@ -623,7 +611,7 @@ def init_client(key=None):
|
||||
client_dict = {}
|
||||
|
||||
C = bpy.context
|
||||
Net = C.window_manager.session_settings
|
||||
Net = C.window_manager.session
|
||||
client_dict['uuid'] = str(uuid4())
|
||||
client_dict['location'] = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
|
||||
client_dict['color'] = [Net.client_color.r,
|
||||
|
181
operators.py
181
operators.py
@ -1,23 +1,17 @@
|
||||
import asyncio
|
||||
import logging
|
||||
import os
|
||||
import queue
|
||||
import random
|
||||
import string
|
||||
import subprocess
|
||||
import time
|
||||
from operator import itemgetter
|
||||
import queue
|
||||
|
||||
|
||||
import bpy
|
||||
import mathutils
|
||||
from bpy_extras import view3d_utils
|
||||
from gpu_extras.batch import batch_for_shader
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
|
||||
from . import client, draw, helpers, ui
|
||||
from .libs import umsgpack
|
||||
|
||||
@ -28,32 +22,13 @@ client_keys = None
|
||||
client_state = 1
|
||||
server = None
|
||||
context = None
|
||||
update_list = {}
|
||||
history = queue.Queue()
|
||||
|
||||
# UTILITY FUNCTIONS
|
||||
def client_list_callback(scene, context):
|
||||
global client_keys
|
||||
items = [("Common", "Common", "")]
|
||||
|
||||
username = bpy.context.window_manager.session_settings.username
|
||||
|
||||
if client_keys:
|
||||
for k in client_keys:
|
||||
if 'Client' in k[0]:
|
||||
name = k[1]
|
||||
|
||||
if name == username:
|
||||
name += " (self)"
|
||||
|
||||
items.append((name, name, ""))
|
||||
|
||||
return items
|
||||
|
||||
|
||||
def clean_scene(elements=helpers.SUPPORTED_TYPES):
|
||||
|
||||
|
||||
def clean_scene(elements=helpers.BPY_TYPES.keys()):
|
||||
for datablock in elements:
|
||||
datablock_ref =getattr(bpy.data, helpers.CORRESPONDANCE[datablock])
|
||||
datablock_ref =getattr(bpy.data, helpers.BPY_TYPES[datablock])
|
||||
for item in datablock_ref:
|
||||
try:
|
||||
datablock_ref.remove(item)
|
||||
@ -62,23 +37,10 @@ def clean_scene(elements=helpers.SUPPORTED_TYPES):
|
||||
pass
|
||||
|
||||
|
||||
def randomStringDigits(stringLength=6):
|
||||
"""Generate a random string of letters and digits """
|
||||
lettersAndDigits = string.ascii_letters + string.digits
|
||||
return ''.join(random.choice(lettersAndDigits) for i in range(stringLength))
|
||||
|
||||
|
||||
def randomColor():
|
||||
r = random.random()
|
||||
v = random.random()
|
||||
b = random.random()
|
||||
return [r, v, b]
|
||||
|
||||
|
||||
def upload_client_instance_position():
|
||||
global client_instance
|
||||
|
||||
username = bpy.context.window_manager.session_settings.username
|
||||
username = bpy.context.window_manager.session.username
|
||||
if client_instance:
|
||||
|
||||
key = "Client/{}".format(username)
|
||||
@ -96,9 +58,9 @@ def upload_client_instance_position():
|
||||
|
||||
def update_client_selected_object(context):
|
||||
global client_instance
|
||||
session = bpy.context.window_manager.session_settings
|
||||
session = bpy.context.window_manager.session
|
||||
|
||||
username = bpy.context.window_manager.session_settings.username
|
||||
username = bpy.context.window_manager.session.username
|
||||
client_key = "Client/{}".format(username)
|
||||
client_data = client_instance.get(client_key)
|
||||
|
||||
@ -117,13 +79,13 @@ def update_client_selected_object(context):
|
||||
client_data[0][1]['active_objects'] = []
|
||||
client_instance.set(client_key, client_data[0][1])
|
||||
|
||||
# Init configuration
|
||||
#TODO: cleanup
|
||||
def init_datablocks():
|
||||
global client_instance
|
||||
|
||||
for datatype in helpers.SUPPORTED_TYPES:
|
||||
for item in getattr(bpy.data, helpers.CORRESPONDANCE[datatype]):
|
||||
item.id = bpy.context.window_manager.session_settings.username
|
||||
for datatype in helpers.BPY_TYPES.keys():
|
||||
for item in getattr(bpy.data, helpers.BPY_TYPES[datatype]):
|
||||
item.id = bpy.context.window_manager.session.username
|
||||
key = "{}/{}".format(datatype, item.name)
|
||||
client_instance.set(key)
|
||||
|
||||
@ -159,7 +121,7 @@ def unregister_ticks():
|
||||
|
||||
|
||||
# OPERATORS
|
||||
class session_join(bpy.types.Operator):
|
||||
class SessionJoinOperator(bpy.types.Operator):
|
||||
bl_idname = "session.join"
|
||||
bl_label = "join"
|
||||
bl_description = "connect to a net server"
|
||||
@ -172,7 +134,7 @@ class session_join(bpy.types.Operator):
|
||||
def execute(self, context):
|
||||
global client_instance
|
||||
|
||||
net_settings = context.window_manager.session_settings
|
||||
net_settings = context.window_manager.session
|
||||
# Scene setup
|
||||
if net_settings.clear_scene:
|
||||
clean_scene()
|
||||
@ -182,7 +144,7 @@ class session_join(bpy.types.Operator):
|
||||
net_settings.username = "{}_{}".format(
|
||||
net_settings.username, randomStringDigits())
|
||||
|
||||
username = str(context.window_manager.session_settings.username)
|
||||
username = str(context.window_manager.session.username)
|
||||
|
||||
if len(net_settings.ip) < 1:
|
||||
net_settings.ip = "127.0.0.1"
|
||||
@ -202,7 +164,7 @@ class session_join(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class session_refresh(bpy.types.Operator):
|
||||
class SessionRefreshOperator(bpy.types.Operator):
|
||||
bl_idname = "session.refresh"
|
||||
bl_label = "refresh"
|
||||
bl_description = "refresh client ui keys "
|
||||
@ -218,7 +180,7 @@ class session_refresh(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class session_add_property(bpy.types.Operator):
|
||||
class SessionPropertyAddOperator(bpy.types.Operator):
|
||||
bl_idname = "session.add_prop"
|
||||
bl_label = "add"
|
||||
bl_description = "broadcast a property to connected client_instances"
|
||||
@ -239,7 +201,7 @@ class session_add_property(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class session_get_property(bpy.types.Operator):
|
||||
class SessionPropertyGetOperator(bpy.types.Operator):
|
||||
bl_idname = "session.get_prop"
|
||||
bl_label = "get"
|
||||
bl_description = "broadcast a property to connected client_instances"
|
||||
@ -257,7 +219,7 @@ class session_get_property(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class session_remove_property(bpy.types.Operator):
|
||||
class SessionPropertyRemoveOperator(bpy.types.Operator):
|
||||
bl_idname = "session.remove_prop"
|
||||
bl_label = "remove"
|
||||
bl_description = "broadcast a property to connected client_instances"
|
||||
@ -280,7 +242,7 @@ class session_remove_property(bpy.types.Operator):
|
||||
return {"CANCELED"}
|
||||
|
||||
|
||||
class session_create(bpy.types.Operator):
|
||||
class SessionHostOperator(bpy.types.Operator):
|
||||
bl_idname = "session.create"
|
||||
bl_label = "create"
|
||||
bl_description = "create to a net session"
|
||||
@ -294,7 +256,7 @@ class session_create(bpy.types.Operator):
|
||||
global server
|
||||
global client_instance
|
||||
|
||||
net_settings = context.window_manager.session_settings
|
||||
net_settings = context.window_manager.session
|
||||
|
||||
script_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),"server.py")
|
||||
|
||||
@ -315,7 +277,7 @@ class session_create(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class session_stop(bpy.types.Operator):
|
||||
class SessionStopOperator(bpy.types.Operator):
|
||||
bl_idname = "session.stop"
|
||||
bl_label = "close"
|
||||
bl_description = "stop net service"
|
||||
@ -329,7 +291,7 @@ class session_stop(bpy.types.Operator):
|
||||
global server
|
||||
global client_instance, client_keys, client_state
|
||||
|
||||
net_settings = context.window_manager.session_settings
|
||||
net_settings = context.window_manager.session
|
||||
|
||||
if server:
|
||||
server.kill()
|
||||
@ -355,7 +317,7 @@ class session_stop(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class session_rights(bpy.types.Operator):
|
||||
class SessionPropertyRightOperator(bpy.types.Operator):
|
||||
bl_idname = "session.right"
|
||||
bl_label = "Change owner to"
|
||||
bl_description = "stop net service"
|
||||
@ -373,7 +335,7 @@ class session_rights(bpy.types.Operator):
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
net_settings = context.window_manager.session_settings
|
||||
net_settings = context.window_manager.session
|
||||
|
||||
col = layout.column()
|
||||
col.prop(net_settings, "clients")
|
||||
@ -382,7 +344,7 @@ class session_rights(bpy.types.Operator):
|
||||
global server
|
||||
global client_instance, client_keys, client_state
|
||||
|
||||
net_settings = context.window_manager.session_settings
|
||||
net_settings = context.window_manager.session
|
||||
|
||||
if net_settings.is_admin:
|
||||
val = client_instance.get(self.key)
|
||||
@ -398,55 +360,7 @@ class session_rights(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class session_settings(bpy.types.PropertyGroup):
|
||||
username = bpy.props.StringProperty(
|
||||
name="Username",
|
||||
default="user_{}".format(randomStringDigits())
|
||||
)
|
||||
ip = bpy.props.StringProperty(
|
||||
name="ip",
|
||||
description='Distant host ip',
|
||||
default="127.0.0.1")
|
||||
port = bpy.props.IntProperty(
|
||||
name="port",
|
||||
description='Distant host port',
|
||||
default=5555)
|
||||
|
||||
add_property_depth = bpy.props.IntProperty(
|
||||
name="add_property_depth",
|
||||
default=1)
|
||||
buffer = bpy.props.StringProperty(name="None")
|
||||
is_admin = bpy.props.BoolProperty(name="is_admin", default=False)
|
||||
load_data = bpy.props.BoolProperty(name="load_data", default=True)
|
||||
init_scene = bpy.props.BoolProperty(name="load_data", default=True)
|
||||
clear_scene = bpy.props.BoolProperty(name="clear_scene", default=True)
|
||||
update_frequency = bpy.props.FloatProperty(
|
||||
name="update_frequency", default=0.008)
|
||||
active_object = bpy.props.PointerProperty(
|
||||
name="active_object", type=bpy.types.Object)
|
||||
session_mode = bpy.props.EnumProperty(
|
||||
name='session_mode',
|
||||
description='session mode',
|
||||
items={
|
||||
('HOST', 'hosting', 'host a session'),
|
||||
('CONNECT', 'connexion', 'connect to a session')},
|
||||
default='HOST')
|
||||
client_color = bpy.props.FloatVectorProperty(
|
||||
name="client_instance_color",
|
||||
subtype='COLOR',
|
||||
default=randomColor())
|
||||
clients = bpy.props.EnumProperty(
|
||||
name="clients",
|
||||
description="client enum",
|
||||
items=client_list_callback
|
||||
)
|
||||
enable_draw = bpy.props.BoolProperty(
|
||||
name="enable_draw",
|
||||
description='Enable overlay drawing module',
|
||||
default=True)
|
||||
|
||||
|
||||
class session_snapview(bpy.types.Operator):
|
||||
class SessionSnapUserOperator(bpy.types.Operator):
|
||||
bl_idname = "session.snapview"
|
||||
bl_label = "draw client_instances"
|
||||
bl_description = "Description that shows in blender tooltips"
|
||||
@ -477,16 +391,15 @@ class session_snapview(bpy.types.Operator):
|
||||
|
||||
# TODO: Rename to match official blender convention
|
||||
classes = (
|
||||
session_join,
|
||||
session_refresh,
|
||||
session_add_property,
|
||||
session_get_property,
|
||||
session_stop,
|
||||
session_create,
|
||||
session_settings,
|
||||
session_remove_property,
|
||||
session_snapview,
|
||||
session_rights,
|
||||
SessionJoinOperator,
|
||||
SessionRefreshOperator,
|
||||
SessionPropertyAddOperator,
|
||||
SessionPropertyGetOperator,
|
||||
SessionStopOperator,
|
||||
SessionHostOperator,
|
||||
SessionPropertyRemoveOperator,
|
||||
SessionSnapUserOperator,
|
||||
SessionPropertyRightOperator,
|
||||
)
|
||||
|
||||
|
||||
@ -513,6 +426,7 @@ def is_replicated(update):
|
||||
logger.info("{} Not rep".format(key))
|
||||
return False
|
||||
|
||||
|
||||
def get_datablock_from_update(update,context):
|
||||
item_type = update.id.__class__.__name__
|
||||
item_id = update.id.name
|
||||
@ -521,8 +435,8 @@ def get_datablock_from_update(update,context):
|
||||
|
||||
if item_id == 'Master Collection':
|
||||
datablock_ref= bpy.context.scene
|
||||
elif item_type in helpers.CORRESPONDANCE.keys():
|
||||
datablock_ref = getattr(bpy.data, helpers.CORRESPONDANCE[update.id.__class__.__name__])[update.id.name]
|
||||
elif item_type in helpers.BPY_TYPES.keys():
|
||||
datablock_ref = getattr(bpy.data, helpers.BPY_TYPES[update.id.__class__.__name__])[update.id.name]
|
||||
else:
|
||||
if item_id in bpy.data.lights.keys():
|
||||
datablock_ref = bpy.data.lights[item_id]
|
||||
@ -530,6 +444,7 @@ def get_datablock_from_update(update,context):
|
||||
|
||||
return datablock_ref
|
||||
|
||||
|
||||
def toogle_update_dirty(context, update):
|
||||
data_ref = get_datablock_from_update(update,context)
|
||||
|
||||
@ -537,6 +452,7 @@ def toogle_update_dirty(context, update):
|
||||
logger.info(update.id.bl_rna.__class__.__name__)
|
||||
data_ref.is_dirty= True
|
||||
|
||||
|
||||
def depsgraph_update(scene):
|
||||
global client_instance
|
||||
global client_keys
|
||||
@ -548,7 +464,7 @@ def depsgraph_update(scene):
|
||||
|
||||
if ctx.mode in ['OBJECT','PAINT_GPENCIL']:
|
||||
updates = ctx.depsgraph.updates
|
||||
username = ctx.window_manager.session_settings.username
|
||||
username = ctx.window_manager.session.username
|
||||
|
||||
|
||||
selected_objects = helpers.get_selected_objects(scene)
|
||||
@ -577,7 +493,7 @@ def depsgraph_update(scene):
|
||||
logger.info("APPEND {}".format(key))
|
||||
else:
|
||||
try:
|
||||
getattr(bpy.data, helpers.CORRESPONDANCE[update.id.__class__.__name__]).remove(item)
|
||||
getattr(bpy.data, helpers.BPY_TYPES[update.id.__class__.__name__]).remove(item)
|
||||
except:
|
||||
pass
|
||||
break
|
||||
@ -589,10 +505,7 @@ def register():
|
||||
from bpy.utils import register_class
|
||||
for cls in classes:
|
||||
register_class(cls)
|
||||
bpy.types.ID.id = bpy.props.StringProperty(default="None")
|
||||
bpy.types.ID.is_dirty = bpy.props.BoolProperty(default=False)
|
||||
bpy.types.WindowManager.session_settings = bpy.props.PointerProperty(
|
||||
type=session_settings)
|
||||
|
||||
bpy.app.handlers.depsgraph_update_post.append(depsgraph_update)
|
||||
draw.register()
|
||||
|
||||
@ -603,8 +516,8 @@ def unregister():
|
||||
|
||||
draw.unregister()
|
||||
|
||||
|
||||
bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update)
|
||||
if bpy.app.handlers.depsgraph_update_post.count(depsgraph_update) > 0:
|
||||
bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update)
|
||||
|
||||
if server:
|
||||
server.kill()
|
||||
@ -621,10 +534,6 @@ def unregister():
|
||||
for cls in reversed(classes):
|
||||
unregister_class(cls)
|
||||
|
||||
del bpy.types.WindowManager.session_settings
|
||||
del bpy.types.ID.id
|
||||
del bpy.types.ID.is_dirty
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
||||
|
@ -5,6 +5,7 @@ from operator import itemgetter
|
||||
|
||||
import zmq
|
||||
import message
|
||||
|
||||
logger = logging.getLogger("Server")
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
|
57
ui.py
57
ui.py
@ -7,9 +7,7 @@ from . import client, operators
|
||||
ICONS = {'Curve':'CURVE_DATA', 'Client':'SOLO_ON','Collection': 'FILE_FOLDER', 'Mesh': 'MESH_DATA', 'Object': 'OBJECT_DATA', 'Material': 'MATERIAL_DATA',
|
||||
'Texture': 'TEXTURE_DATA', 'Scene': 'SCENE_DATA', 'Light': 'LIGHT_DATA', 'SpotLight': 'LIGHT_DATA', 'SunLight': 'LIGHT_DATA', 'PointLight': 'LIGHT_DATA', 'Camera': 'CAMERA_DATA', 'Action': 'ACTION_DATA', 'Armature': 'ARMATURE_DATA', 'Grease Pencil': 'GREASEPENCIL'}
|
||||
|
||||
|
||||
class SessionSettingsPanel(bpy.types.Panel):
|
||||
"""Creates a Panel in the scene context of the properties editor"""
|
||||
class SESSION_PT_settings(bpy.types.Panel):
|
||||
bl_label = "NET settings"
|
||||
bl_idname = "SCENE_PT_SessionSettings"
|
||||
bl_space_type = 'PROPERTIES'
|
||||
@ -19,8 +17,8 @@ class SessionSettingsPanel(bpy.types.Panel):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
if hasattr(context.window_manager, 'session_settings'):
|
||||
net_settings = context.window_manager.session_settings
|
||||
if hasattr(context.window_manager, 'session'):
|
||||
net_settings = context.window_manager.session
|
||||
window_manager = context.window_manager
|
||||
|
||||
row = layout.row()
|
||||
@ -30,10 +28,10 @@ class SessionSettingsPanel(bpy.types.Panel):
|
||||
row = box.row()
|
||||
row.label(text="USER", icon='TRIA_RIGHT')
|
||||
row = box.row()
|
||||
row.prop(window_manager.session_settings, "username", text="id")
|
||||
row.prop(window_manager.session, "username", text="id")
|
||||
|
||||
row = box.row()
|
||||
row.prop(window_manager.session_settings, "client_color", text="color")
|
||||
row.prop(window_manager.session, "client_color", text="color")
|
||||
row = box.row()
|
||||
|
||||
row = layout.row()
|
||||
@ -48,16 +46,13 @@ class SessionSettingsPanel(bpy.types.Panel):
|
||||
row.label(text="clear blend:")
|
||||
row.prop(net_settings, "clear_scene", text="")
|
||||
row = box.row()
|
||||
|
||||
|
||||
|
||||
row = box.row()
|
||||
row.prop(net_settings, "session_mode", expand=True)
|
||||
row = box.row()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if window_manager.session_settings.session_mode == 'HOST':
|
||||
if window_manager.session.session_mode == 'HOST':
|
||||
box = row.box()
|
||||
row = box.row()
|
||||
row.label(text="init scene:")
|
||||
@ -70,7 +65,7 @@ class SessionSettingsPanel(bpy.types.Panel):
|
||||
row.prop(net_settings, "ip", text="ip")
|
||||
row = box.row()
|
||||
row.label(text="port:")
|
||||
row.prop(window_manager.session_settings, "port", text="")
|
||||
row.prop(window_manager.session, "port", text="")
|
||||
row = box.row()
|
||||
row.label(text="load data:")
|
||||
row.prop(net_settings, "load_data", text="")
|
||||
@ -86,13 +81,6 @@ class SessionSettingsPanel(bpy.types.Panel):
|
||||
row.operator("session.stop", icon='QUIT', text="Exit")
|
||||
row = layout.row()
|
||||
|
||||
# row = layout.row()
|
||||
# row.label(text="serial ",icon="KEYTYPE_EXTREME_VEC")
|
||||
# row = layout.row()
|
||||
# row.label(text="serial ",icon="KEYTYPE_BREAKDOWN_VEC")
|
||||
# row = layout.row()
|
||||
# row.label(text="serial ",icon="KEYTYPE_JITTER_VEC")
|
||||
|
||||
box = row.box()
|
||||
row = box.row()
|
||||
row.label(text="", icon='INFO')
|
||||
@ -110,8 +98,7 @@ class SessionSettingsPanel(bpy.types.Panel):
|
||||
row = layout.row()
|
||||
|
||||
|
||||
class SessionUsersPanel(bpy.types.Panel):
|
||||
"""Creates a Panel in the scene context of the properties editor"""
|
||||
class SESSION_PT_user(bpy.types.Panel):
|
||||
bl_label = "NET users"
|
||||
bl_idname = "SCENE_PT_SessionUsers"
|
||||
bl_space_type = 'PROPERTIES'
|
||||
@ -126,7 +113,7 @@ class SessionUsersPanel(bpy.types.Panel):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
net_settings = context.window_manager.session_settings
|
||||
net_settings = context.window_manager.session
|
||||
scene = context.window_manager
|
||||
# Create a simple row.
|
||||
row = layout.row()
|
||||
@ -156,8 +143,7 @@ class SessionUsersPanel(bpy.types.Panel):
|
||||
def get_client_key(item):
|
||||
return item[0]
|
||||
|
||||
class SessionPropertiesPanel(bpy.types.Panel):
|
||||
"""Creates a Panel in the scene context of the properties editor"""
|
||||
class SESSION_PT_properties(bpy.types.Panel):
|
||||
bl_label = "NET properties"
|
||||
bl_idname = "SCENE_PT_SessionProps"
|
||||
bl_space_type = 'PROPERTIES'
|
||||
@ -171,10 +157,10 @@ class SessionPropertiesPanel(bpy.types.Panel):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
if hasattr(context.window_manager,'session_settings'):
|
||||
net_settings = context.window_manager.session_settings
|
||||
if hasattr(context.window_manager,'session'):
|
||||
net_settings = context.window_manager.session
|
||||
scene = context.window_manager
|
||||
# Create a simple row.
|
||||
|
||||
row = layout.row()
|
||||
|
||||
row = layout.row(align=True)
|
||||
@ -185,6 +171,7 @@ class SessionPropertiesPanel(bpy.types.Panel):
|
||||
add.property_path = net_settings.buffer
|
||||
add.depth = net_settings.add_property_depth
|
||||
row = layout.row()
|
||||
|
||||
# Property area
|
||||
area_msg = row.box()
|
||||
area_msg.operator("session.refresh", text="",
|
||||
@ -203,14 +190,8 @@ class SessionPropertiesPanel(bpy.types.Panel):
|
||||
item_box = area_msg.box()
|
||||
|
||||
detail_item_box = item_box.row(align = True)
|
||||
|
||||
# detail_item_box = item_box.row()
|
||||
detail_item_box.label(text="",icon=ICONS[store_type])
|
||||
|
||||
detail_item_box.label(text="{} ".format(store_name))
|
||||
|
||||
# detail_item_box.prop(net_settings, "clients", text="")
|
||||
|
||||
detail_item_box.label(text="{} ".format(owner))
|
||||
|
||||
right_icon = "DECORATE_UNLOCKED"
|
||||
@ -229,9 +210,9 @@ class SessionPropertiesPanel(bpy.types.Panel):
|
||||
|
||||
|
||||
classes = (
|
||||
SessionSettingsPanel,
|
||||
SessionUsersPanel,
|
||||
SessionPropertiesPanel,
|
||||
SESSION_PT_settings,
|
||||
SESSION_PT_user,
|
||||
SESSION_PT_properties,
|
||||
|
||||
)
|
||||
|
||||
|
Reference in New Issue
Block a user