forked from LeenkxTeam/LNXSDK
moisesjpelaez - Include external blend files on build
This commit is contained in:
@ -116,7 +116,73 @@ def remove_readonly(func, path, excinfo):
|
||||
os.chmod(path, stat.S_IWRITE)
|
||||
func(path)
|
||||
|
||||
|
||||
appended_scenes = []
|
||||
|
||||
def load_external_blends():
|
||||
global appended_scenes
|
||||
|
||||
wrd = bpy.data.worlds['Lnx']
|
||||
if not hasattr(wrd, 'lnx_external_blends_path'):
|
||||
return
|
||||
|
||||
external_path = getattr(wrd, 'lnx_external_blends_path', '')
|
||||
if not external_path or not external_path.strip():
|
||||
return
|
||||
|
||||
abs_path = bpy.path.abspath(external_path.strip())
|
||||
if not os.path.exists(abs_path):
|
||||
return
|
||||
|
||||
# Walk recursively through all subdirs
|
||||
for root, dirs, files in os.walk(abs_path):
|
||||
for filename in files:
|
||||
if not filename.endswith(".blend"):
|
||||
continue
|
||||
|
||||
blend_path = os.path.join(root, filename)
|
||||
try:
|
||||
with bpy.data.libraries.load(blend_path, link=True) as (data_from, data_to):
|
||||
data_to.scenes = list(data_from.scenes)
|
||||
|
||||
for scn in data_to.scenes:
|
||||
if scn is not None and scn not in appended_scenes:
|
||||
# make name unique with file name
|
||||
scn.name += "_" + filename.replace(".blend", "")
|
||||
appended_scenes.append(scn)
|
||||
|
||||
log.info(f"Loaded external blend: {blend_path}")
|
||||
except Exception as e:
|
||||
log.error(f"Failed to load external blend {blend_path}: {e}")
|
||||
|
||||
def clear_external_scenes():
|
||||
global appended_scenes
|
||||
if not appended_scenes:
|
||||
return
|
||||
|
||||
for scn in appended_scenes:
|
||||
try:
|
||||
bpy.data.scenes.remove(scn, do_unlink=True)
|
||||
except Exception as e:
|
||||
log.error(f"Failed to remove scene {scn.name}: {e}")
|
||||
|
||||
for lib in list(bpy.data.libraries):
|
||||
try:
|
||||
if lib.users == 0:
|
||||
bpy.data.libraries.remove(lib)
|
||||
except Exception as e:
|
||||
log.error(f"Failed to remove library {lib.name}: {e}")
|
||||
|
||||
try:
|
||||
bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True)
|
||||
except Exception as e:
|
||||
log.error(f"Failed to purge orphan data: {e}")
|
||||
|
||||
appended_scenes = []
|
||||
|
||||
def export_data(fp, sdk_path):
|
||||
load_external_blends()
|
||||
|
||||
wrd = bpy.data.worlds['Lnx']
|
||||
rpdat = lnx.utils.get_rp()
|
||||
|
||||
@ -323,6 +389,8 @@ def export_data(fp, sdk_path):
|
||||
state.last_resy = resy
|
||||
state.last_scene = scene_name
|
||||
|
||||
clear_external_scenes()
|
||||
|
||||
def compile(assets_only=False):
|
||||
wrd = bpy.data.worlds['Lnx']
|
||||
fp = lnx.utils.get_fp()
|
||||
|
Reference in New Issue
Block a user