Skip to content

Commit fbc3b47

Browse files
committed
Networking WIP.
1 parent 19ccfc9 commit fbc3b47

File tree

3 files changed

+138
-91
lines changed

3 files changed

+138
-91
lines changed

BEngine-Py/BEGetBlenderInputs.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,15 @@ def MainWork():
3535

3636
BEUtils.ClearScene()
3737

38-
be_paths = BEUtils.BEPaths()
38+
be_proj_paths = BEUtils.BEProjectPaths()
3939

40-
process_obj, geom_mod, node_tree = BEUtils.LoadNodesTreeFromJSON(context, be_paths)
40+
# Base Stuff
41+
beBaseStuff_path = be_proj_paths.be_tmp_folder + "BEngineBaseFromEngine.json"
42+
js_base_stuff = BEUtils.LoadJSON(beBaseStuff_path)
43+
44+
be_base_stuff = BEUtils.BEBaseStuff(js_base_stuff)
45+
46+
process_obj, geom_mod, node_tree = BEUtils.LoadNodesTreeFromJSON(context, be_proj_paths, be_base_stuff)
4147

4248
if node_tree:
4349

@@ -53,7 +59,7 @@ def MainWork():
5359
js_output_data['Inputs'] = gn_inputs_data
5460

5561
# If No JSON File
56-
gn_js_path = be_paths.blendfolder + be_paths.blendfile_name + '_' + be_paths.node_sys_name + '.json'
62+
gn_js_path = be_base_stuff.blendfolder + be_base_stuff.blendfile_name + '_' + be_base_stuff.node_sys_name + '.json'
5763
BEUtils.SaveJSON(gn_js_path, js_output_data)
5864

5965
return True

BEngine-Py/BERunNodes.py

Lines changed: 62 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import os
1010

1111
import json
12-
from json.decoder import JSONDecodeError
1312

1413
import time
1514

@@ -27,75 +26,81 @@
2726
import BEUtils
2827

2928

30-
def IsInstanceFromSelected(object_instance):
31-
# For instanced objects we check selection of their instancer (more accurately: check
32-
# selection status of the original object corresponding to the instancer).
33-
if object_instance.parent:
34-
return object_instance.parent.original.select_get()
35-
# For non-instanced objects we check selection state of the original object.
36-
return object_instance.object.original.select_get()
29+
# def IsInstanceFromSelected(object_instance):
30+
# # For instanced objects we check selection of their instancer (more accurately: check
31+
# # selection status of the original object corresponding to the instancer).
32+
# if object_instance.parent:
33+
# return object_instance.parent.original.select_get()
34+
# # For non-instanced objects we check selection state of the original object.
35+
# return object_instance.object.original.select_get()
3736

3837

3938
def MainWork():
4039
context = bpy.context
4140

4241
BEUtils.ClearScene()
4342

44-
be_paths = BEUtils.BEPaths()
43+
be_proj_paths = BEUtils.BEProjectPaths()
4544

46-
process_gn_obj, geom_mod, node_tree = BEUtils.LoadNodesTreeFromJSON(context, be_paths)
45+
# Base Stuff
46+
beBaseStuff_path = be_proj_paths.be_tmp_folder + "BEngineBaseFromEngine.json"
47+
js_base_stuff = BEUtils.LoadJSON(beBaseStuff_path)
4748

48-
if node_tree:
49-
50-
# ORIGINAL STUFF
51-
with open(be_paths.be_tmp_folder + "BEngineInputs.json") as js_file:
52-
try:
53-
js_input_data = json.load(js_file)
54-
except JSONDecodeError:
55-
js_input_data = {}
56-
57-
engine_type = js_input_data["BEngineType"]
58-
59-
# If GN
60-
if node_tree.bl_idname == BEUtils.TYPE_GN and process_gn_obj:
61-
# Set Transform
62-
process_gn_obj.location = js_input_data["Pos"]
63-
BEUtils.SetRotationFromJSON(process_gn_obj, js_input_data["Rot"], engine_type)
64-
process_gn_obj.scale = js_input_data["Scale"]
65-
66-
# Setup inputs
67-
BEUtils.SetupInputsFromJSON(context, node_tree, geom_mod,
68-
js_input_data, be_paths, engine_type)
69-
# geom_mod.show_viewport = True
70-
71-
# Set the GN Object Active and Selected
72-
bpy.ops.object.select_all(action='DESELECT')
73-
process_gn_obj.select_set(True)
74-
context.view_layer.objects.active = process_gn_obj
49+
be_base_stuff = BEUtils.BEBaseStuff(js_base_stuff)
7550

76-
process_gn_obj.data.update()
51+
process_gn_obj, geom_mod, node_tree = BEUtils.LoadNodesTreeFromJSON(context, be_proj_paths, be_base_stuff)
7752

78-
# Save Node Outputs
79-
BEUtils.SaveBlenderOutputs(context, [process_gn_obj], be_paths, engine_type, True)
80-
81-
# If SV
82-
elif node_tree.bl_idname == BEUtils.TYPE_SV:
83-
# node_tree = node_tree.evaluated_get(context.evaluated_depsgraph_get())
84-
85-
# Setup inputs
86-
BEUtils.SetupInputsFromJSON(context, node_tree, None,
87-
js_input_data, be_paths, engine_type)
88-
89-
# Update All Nodes
90-
# node_tree.update()
91-
context.view_layer.update()
92-
node_tree.process_ani(True, False)
93-
94-
# Save Node Outputs
95-
BEUtils.SaveBlenderOutputs(context, BEUtils.GetSVOutputObjects(node_tree), be_paths, engine_type, False)
53+
if node_tree:
9654

55+
# GET BLENDER INPUTS
56+
beInputs_path = be_proj_paths.be_tmp_folder + "BEngineInputs.json"
57+
js_input_data = BEUtils.LoadJSON(beInputs_path)
58+
59+
if js_input_data:
60+
# If GN
61+
if node_tree.bl_idname == BEUtils.TYPE_GN and process_gn_obj:
62+
# Set Transform
63+
process_gn_obj.location = js_input_data["Pos"]
64+
BEUtils.SetRotationFromJSON(process_gn_obj, js_input_data["Rot"], be_base_stuff.be_type)
65+
process_gn_obj.scale = js_input_data["Scale"]
66+
67+
# Setup inputs
68+
BEUtils.SetupInputsFromJSON(context, node_tree, geom_mod,
69+
js_input_data, be_proj_paths, be_base_stuff.be_type)
70+
# geom_mod.show_viewport = True
71+
72+
# Set the GN Object Active and Selected
73+
bpy.ops.object.select_all(action='DESELECT')
74+
process_gn_obj.select_set(True)
75+
context.view_layer.objects.active = process_gn_obj
76+
77+
process_gn_obj.data.update()
78+
79+
# Save Node Outputs
80+
BEUtils.SaveBlenderOutputs(context, [process_gn_obj], be_proj_paths, be_base_stuff.be_type, True)
81+
82+
# If SV
83+
elif node_tree.bl_idname == BEUtils.TYPE_SV:
84+
# node_tree = node_tree.evaluated_get(context.evaluated_depsgraph_get())
85+
86+
# Setup inputs
87+
BEUtils.SetupInputsFromJSON(context, node_tree, None,
88+
js_input_data, be_proj_paths, be_base_stuff.be_type)
89+
90+
# Update All Nodes
91+
# node_tree.update()
92+
context.view_layer.update()
93+
node_tree.process_ani(True, False)
94+
95+
# Save Node Outputs
96+
BEUtils.SaveBlenderOutputs(context, BEUtils.GetSVOutputObjects(node_tree),
97+
be_proj_paths, be_base_stuff.be_type, False)
98+
99+
else:
100+
print("Nodes were not Loaded! Please check Paths and NodeTree Name!")
101+
return False
97102
else:
98-
print("Nodes were not Loaded! Please check Paths and NodeTree Name!")
103+
print("JSON Object is Empty: " + beInputs_path)
99104
return False
100105

101106
return True

BEngine-Py/Utils/BEUtils.py

Lines changed: 67 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55

66
import json
7-
# from json.decoder import JSONDecodeError
7+
from json.decoder import JSONDecodeError
88

99
import numpy as np
1010

@@ -47,50 +47,86 @@ class SVConstants:
4747
SV_OUTPUT_OBJ = "BEObjectsOutput.py"
4848

4949

50-
class BEPaths:
50+
class BEProjectPaths:
5151

5252
def __init__(self):
53-
self.blendfile = ""
54-
self.blendfolder = ""
55-
self.section = "/NodeTree/"
56-
self.node_sys_name = ""
57-
self.be_tmp_folder = ""
58-
self.project_path = ""
59-
self.project_path_2 = ""
53+
self.be_tmp_folder = None
54+
self.project_path = None
55+
self.project_path_2 = None
56+
57+
self.run_blender_Type = None
58+
self.host = None
59+
self.port = None
60+
self.max_package_bytes = None
6061

6162
args = sys.argv
6263

6364
for arg in args:
64-
if arg.startswith('BLENDFILE='):
65-
self.blendfile = arg.replace('BLENDFILE=', '')
66-
67-
elif arg.startswith('BLENDFOLDER='):
68-
self.blendfolder = arg.replace('BLENDFOLDER=', '')
69-
70-
if not self.blendfolder.endswith('/'):
71-
self.blendfolder = self.blendfolder + "/"
72-
73-
elif arg.startswith('NODESYSNAME='):
74-
self.node_sys_name = arg.replace('NODESYSNAME=', '')
75-
76-
elif arg.startswith('BE_TMP_FOLDER='):
65+
if arg.startswith('BE_TMP_FOLDER='):
7766
self.be_tmp_folder = arg.replace('BE_TMP_FOLDER=', '')
78-
7967
elif arg.startswith('PROJECT_PATH='):
8068
self.project_path = arg.replace('PROJECT_PATH=', '')
81-
8269
elif arg.startswith('PROJECT_PATH_2='):
8370
self.project_path_2 = arg.replace('PROJECT_PATH_2=', '')
8471

72+
# # Networking
73+
elif arg.startswith('RunBlenderType='):
74+
self.run_blender_Type = arg.replace('RunBlenderType=', '')
75+
elif arg.startswith('Host='):
76+
self.host = arg.replace('Host=', '')
77+
elif arg.startswith('Port='):
78+
self.port = int(arg.replace('Port=', ''))
79+
elif arg.startswith('MaxPackageBytes='):
80+
self.max_package_bytes = int(arg.replace('MaxPackageBytes=', ''))
81+
82+
83+
class BEBaseStuff:
84+
85+
def __init__(self, be_paths: dict):
86+
self.section = "/NodeTree/"
87+
self.blendfile = ""
88+
self.blendfolder = ""
89+
self.node_sys_name = ""
90+
91+
# if arg.startswith('BLENDFILE='):
92+
self.blendfile = be_paths["BLENDFILE"]
93+
94+
# elif arg.startswith('BLENDFOLDER='):
95+
self.blendfolder = be_paths["BLENDFOLDER"]
96+
if not self.blendfolder.endswith('/'):
97+
self.blendfolder = self.blendfolder + "/"
98+
99+
# elif arg.startswith('NODESYSNAME='):
100+
self.node_sys_name = be_paths["NODESYSNAME"]
101+
85102
# blend file name
86103
self.blendfile_basename = os.path.basename(self.blendfile)
87104
self.blendfile_name = os.path.splitext(self.blendfile_basename)[0]
88105

89-
# Load GN
106+
# Load GN Paths
90107
self.filepath = self.blendfile + self.section + self.node_sys_name
91108
self.directory = self.blendfile + self.section
92109
self.filename = self.node_sys_name
93110

111+
self.be_type = be_paths["BEngineType"]
112+
113+
# # Networking
114+
# self.RunBlenderType = be_paths["RunBlenderType"]
115+
# self.Host = be_paths["Host"]
116+
# self.Port = be_paths["Port"]
117+
# self.MaxPackageBytes = be_paths["MaxPackageBytes"]
118+
119+
120+
def LoadJSON(bengineInputs_path: str):
121+
with open(bengineInputs_path) as js_file:
122+
try:
123+
js_input_data = json.load(js_file)
124+
except JSONDecodeError:
125+
print("Problem to Open File: " + bengineInputs_path)
126+
js_input_data = None
127+
128+
return js_input_data
129+
94130

95131
def SaveJSON(gn_js_path, js_data):
96132
with open(gn_js_path, 'w') as json_file:
@@ -275,13 +311,13 @@ def GetGNInputsData(node_group):
275311
return gn_inputs_data
276312

277313

278-
def LoadNodesTreeFromJSON(context, be_paths: BEPaths):
314+
def LoadNodesTreeFromJSON(context, be_paths: BEProjectPaths, be_base_stuff: BEBaseStuff):
279315

280-
bpy.ops.wm.link(filepath=be_paths.filepath, filename=be_paths.filename, directory=be_paths.directory, link=False)
281-
# bpy.ops.wm.append(filepath=be_paths.filepath, filename=be_paths.filename, directory=be_paths.directory)
316+
bpy.ops.wm.link(filepath=be_base_stuff.filepath, filename=be_base_stuff.filename,
317+
directory=be_base_stuff.directory, link=False)
282318

283319
if (bpy.data.node_groups):
284-
node_tree = bpy.data.node_groups[be_paths.node_sys_name]
320+
node_tree = bpy.data.node_groups[be_base_stuff.node_sys_name]
285321

286322
process_gn_obj = None
287323
geom_mod = None
@@ -312,7 +348,7 @@ def LoadNodesTreeFromJSON(context, be_paths: BEPaths):
312348

313349

314350
def SetupInputsFromJSON(context, node_tree, GN_mod, js_input_data,
315-
be_paths: BEPaths, engine_type: str):
351+
be_paths: BEProjectPaths, engine_type: str):
316352

317353
js_inputs = js_input_data["BEngineInputs"]
318354

@@ -795,7 +831,7 @@ def RecordObjectOutputToJSON(inst_dict, the_object, is_instance: bool):
795831
cur_inst_data["Mesh"] = MeshToJSONData(true_obj)
796832

797833

798-
def SaveBlenderOutputs(context, process_objs: list, be_paths: BEPaths, engine_type: str, is_GN: bool):
834+
def SaveBlenderOutputs(context, process_objs: list, be_paths: BEProjectPaths, engine_type: str, is_GN: bool):
799835

800836
depsgraph = context.evaluated_depsgraph_get()
801837

0 commit comments

Comments
 (0)