armory/blender/armutils.py

112 lines
3.4 KiB
Python
Raw Normal View History

2016-06-30 13:22:05 +02:00
import bpy
import json
import os
2016-07-10 00:51:39 +02:00
import glob
2016-07-20 17:33:17 +02:00
import lib.umsgpack
2016-08-12 02:29:09 +02:00
import platform
2016-10-15 12:17:33 +02:00
import zipfile
2016-06-30 13:22:05 +02:00
2016-07-20 17:33:17 +02:00
def write_arm(filepath, output):
2016-10-15 12:17:33 +02:00
if filepath.endswith('.zip'):
with zipfile.ZipFile(filepath, 'w', zipfile.ZIP_DEFLATED) as zip_file:
2016-10-17 00:02:51 +02:00
if bpy.data.worlds['Arm'].arm_minimize:
2016-10-15 12:17:33 +02:00
zip_file.writestr('data.arm', lib.umsgpack.dumps(output))
else:
zip_file.writestr('data.arm', json.dumps(output, sort_keys=True, indent=4))
2016-07-20 17:33:17 +02:00
else:
2016-10-17 00:02:51 +02:00
if bpy.data.worlds['Arm'].arm_minimize:
2016-10-15 12:17:33 +02:00
with open(filepath, 'wb') as f:
f.write(lib.umsgpack.dumps(output))
else:
with open(filepath, 'w') as f:
f.write(json.dumps(output, sort_keys=True, indent=4))
2016-06-30 13:22:05 +02:00
def get_fp():
s = bpy.data.filepath.split(os.path.sep)
s.pop()
return os.path.sep.join(s)
2016-08-12 02:29:09 +02:00
def get_os():
s = platform.system()
if s == 'Windows':
return 'win'
elif s == 'Darwin':
return 'mac'
else:
return 'linux'
def get_sdk_path():
2016-07-10 00:51:39 +02:00
user_preferences = bpy.context.user_preferences
addon_prefs = user_preferences.addons['armory'].preferences
if with_chromium() and addon_prefs.sdk_bundled:
if get_os() == 'mac':
2016-10-25 13:01:20 +02:00
return bpy.path.abspath(os.__file__[:-5] + '../../../armory_sdk/')
else:
2016-10-25 13:01:20 +02:00
return bpy.path.abspath(os.__file__[:-5] + '../../armory_sdk/')
else:
return addon_prefs.sdk_path
def get_ffmpeg_path():
user_preferences = bpy.context.user_preferences
addon_prefs = user_preferences.addons['armory'].preferences
return addon_prefs.ffmpeg_path
def fetch_script_names():
sdk_path = get_sdk_path()
wrd = bpy.data.worlds['Arm']
2016-07-10 00:51:39 +02:00
wrd.bundled_scripts_list.clear()
os.chdir(sdk_path + '/armory/Sources/armory/trait')
for file in glob.glob('*.hx'):
wrd.bundled_scripts_list.add().name = file.rsplit('.')[0]
wrd.scripts_list.clear()
2016-10-17 00:02:51 +02:00
sources_path = get_fp() + '/Sources/' + wrd.arm_project_package
2016-07-10 00:51:39 +02:00
if os.path.isdir(sources_path):
os.chdir(sources_path)
for file in glob.glob('*.hx'):
wrd.scripts_list.add().name = file.rsplit('.')[0]
os.chdir(get_fp())
2016-07-17 23:29:30 +02:00
def to_hex(val):
return '#%02x%02x%02x%02x' % (int(val[3] * 255), int(val[0] * 255), int(val[1] * 255), int(val[2] * 255))
2016-07-27 14:25:01 +02:00
def color_to_int(val):
return (int(val[3] * 255) << 24) + (int(val[0] * 255) << 16) + (int(val[1] * 255) << 8) + int(val[2] * 255)
2016-07-27 14:25:01 +02:00
def safe_filename(s):
2016-09-14 11:49:32 +02:00
# s = s.replace('.', '_').replace('-', '_').replace(' ', '_')
# if s[0].isdigit(): # Prefix _ if first char is digit
# s = '_' + s
2016-08-22 21:56:28 +02:00
return s
def safe_assetpath(s):
return s[2:] # Remove leading '//'
2016-09-14 11:49:32 +02:00
def extract_filename(s):
return s.rsplit('/', 1)[1]
2016-08-15 23:45:03 +02:00
def get_render_resolution(scene_index=0):
render = bpy.data.scenes[scene_index].render
scale = render.resolution_percentage / 100
return int(render.resolution_x * scale), int(render.resolution_y * scale)
2016-09-08 14:08:31 +02:00
def get_project_scene_name():
wrd = bpy.data.worlds['Arm']
2016-10-17 00:02:51 +02:00
if wrd.arm_play_active_scene:
2016-09-08 14:08:31 +02:00
return safe_filename(bpy.context.screen.scene.name)
else:
2016-10-17 00:02:51 +02:00
return safe_filename(wrd.arm_project_scene)
2016-09-12 02:24:20 +02:00
2016-10-19 13:28:06 +02:00
chromium_found = False
2016-09-12 02:24:20 +02:00
def with_chromium():
2016-10-19 13:28:06 +02:00
global chromium_found
return chromium_found
2016-09-12 02:24:20 +02:00
def register():
2016-10-19 13:28:06 +02:00
global chromium_found
2016-09-12 02:24:20 +02:00
import importlib.util
2016-10-19 13:28:06 +02:00
if importlib.util.find_spec('barmory') != None:
chromium_found = True
2016-09-12 02:24:20 +02:00
def unregister():
pass