-
Notifications
You must be signed in to change notification settings - Fork 72
/
blender_server.py
52 lines (43 loc) · 1.28 KB
/
blender_server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# pip3 install codelab_adapter_client # blender
from io import StringIO
import contextlib
import sys
import time
from codelab_adapter_client import AdapterNode
from codelab_adapter_client.utils import threaded
import bpy
from loguru import logger
class BlenderNode(AdapterNode):
def __init__(self):
super().__init__()
self.EXTENSION_ID = "eim/blender"
@contextlib.contextmanager
def stdoutIO(self, stdout=None):
old = sys.stdout
if stdout is None:
stdout = StringIO()
sys.stdout = stdout
yield stdout
sys.stdout = old
def extension_message_handle(self, topic, payload):
python_code = payload["content"]
logger.info(f'python_code: {python_code}')
# extension_python_kernel.py
try:
output = eval(python_code, {"__builtins__": None}, {
"bpy": bpy,
})
except Exception as e:
output = e
payload["content"] = str(output)
message = {"payload": payload}
self.publish(message)
def exit_message_handle(self, topic, payload):
self.terminate()
@threaded
def run(self):
while self._running:
time.sleep(0.5)
node = BlenderNode()
node.receive_loop_as_thread()
# node.run()