armory/blender/arm/bridge.py

45 lines
2 KiB
Python
Raw Normal View History

2016-10-19 13:28:06 +02:00
# Translating operators from/to Armory player
import bpy
2017-03-15 12:30:14 +01:00
import arm.utils
2016-10-26 09:56:26 +02:00
try:
import barmory
except ImportError:
pass
2016-10-19 13:28:06 +02:00
def parse_operator(text):
if text == None:
return
2016-11-23 15:34:59 +01:00
cmd = text.split('|')
# Reflect commands from Armory player in Blender
if cmd[0] == '__arm':
if cmd[1] == 'quit':
bpy.ops.arm.space_stop('EXEC_DEFAULT')
elif cmd[1] == 'setx':
bpy.context.scene.objects[cmd[2]].location.x = float(cmd[3])
elif cmd[1] == 'select':
2017-02-22 13:24:31 +01:00
if hasattr(bpy.context, 'object') and bpy.context.object != None:
2016-10-19 13:28:06 +02:00
bpy.context.object.select = False
2016-11-23 15:34:59 +01:00
bpy.context.scene.objects[cmd[2]].select = True
bpy.context.scene.objects.active = bpy.context.scene.objects[cmd[2]]
2016-10-19 13:28:06 +02:00
def send_operator(op):
# Try to translate operator directly to armory
2017-03-15 12:30:14 +01:00
if arm.utils.with_krom() and hasattr(bpy.context, 'object') and bpy.context.object != None:
2016-10-19 13:28:06 +02:00
objname = bpy.context.object.name
if op.name == 'Translate':
vec = bpy.context.object.location
js_source = 'var o = armory.Scene.active.getChild("' + objname + '"); o.transform.loc.set(' + str(vec[0]) + ', ' + str(vec[1]) + ', ' + str(vec[2]) + '); o.transform.dirty = true;'
barmory.call_js(js_source)
return True
elif op.name == 'Resize':
vec = bpy.context.object.scale
js_source = 'var o = armory.Scene.active.getChild("' + objname + '"); o.transform.scale.set(' + str(vec[0]) + ', ' + str(vec[1]) + ', ' + str(vec[2]) + '); o.transform.dirty = true;'
barmory.call_js(js_source)
return True
elif op.name == 'Rotate':
vec = bpy.context.object.rotation_euler.to_quaternion()
js_source = 'var o = armory.Scene.active.getChild("' + objname + '"); o.transform.rot.set(' + str(vec[1]) + ', ' + str(vec[2]) + ', ' + str(vec[3]) + ' ,' + str(vec[0]) + '); o.transform.dirty = true;'
barmory.call_js(js_source)
return True
return False