mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Update pack_project script for Blender
This commit is contained in:
@@ -61,7 +61,7 @@ class Blender(BaseRenderEngine):
|
|||||||
scene_info = None
|
scene_info = None
|
||||||
try:
|
try:
|
||||||
results = cls.run_python_script(project_path, os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
results = cls.run_python_script(project_path, os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
||||||
'scripts', 'get_blender_info.py'), timeout=timeout)
|
'scripts', 'blender', 'get_file_info.py'), timeout=timeout)
|
||||||
result_text = results.stdout.decode()
|
result_text = results.stdout.decode()
|
||||||
for line in result_text.splitlines():
|
for line in result_text.splitlines():
|
||||||
if line.startswith('SCENE_DATA:'):
|
if line.startswith('SCENE_DATA:'):
|
||||||
@@ -75,15 +75,9 @@ class Blender(BaseRenderEngine):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def pack_project_file(cls, project_path, timeout=30):
|
def pack_project_file(cls, project_path, timeout=30):
|
||||||
# Credit to L0Lock for pack script - https://blender.stackexchange.com/a/243935
|
# Credit to L0Lock for pack script - https://blender.stackexchange.com/a/243935
|
||||||
pack_expression = "import bpy\n" \
|
|
||||||
"bpy.ops.file.pack_all()\n" \
|
|
||||||
"bpy.ops.file.make_paths_absolute()\n" \
|
|
||||||
"myPath = bpy.data.filepath\n" \
|
|
||||||
"myPath = str(myPath)\n" \
|
|
||||||
"bpy.ops.wm.save_as_mainfile(filepath=myPath[:-6]+'_packed'+myPath[-6:])"
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
results = Blender.run_python_expression(project_path, pack_expression, timeout=timeout)
|
results = cls.run_python_script(project_path, os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
||||||
|
'scripts', 'blender', 'pack_project.py'), timeout=timeout)
|
||||||
|
|
||||||
result_text = results.stdout.decode()
|
result_text = results.stdout.decode()
|
||||||
dir_name = os.path.dirname(project_path)
|
dir_name = os.path.dirname(project_path)
|
||||||
|
|||||||
41
lib/render_engines/scripts/blender/pack_project.py
Normal file
41
lib/render_engines/scripts/blender/pack_project.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import bpy
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
|
||||||
|
def zip_files(file_paths, output_zip_path):
|
||||||
|
# Create a new Zip file
|
||||||
|
with zipfile.ZipFile(output_zip_path, 'w') as myzip:
|
||||||
|
for file_path in file_paths:
|
||||||
|
# Add each file to the Zip file
|
||||||
|
myzip.write(file_path)
|
||||||
|
|
||||||
|
|
||||||
|
# Get File path
|
||||||
|
project_path = str(bpy.data.filepath)
|
||||||
|
|
||||||
|
# Pack Files
|
||||||
|
bpy.ops.file.pack_all()
|
||||||
|
bpy.ops.file.make_paths_absolute()
|
||||||
|
|
||||||
|
# Temp dir
|
||||||
|
tmp_dir = os.path.join(os.path.dirname(project_path), 'tmp')
|
||||||
|
asset_dir = os.path.join(tmp_dir, 'assets')
|
||||||
|
os.makedirs(tmp_dir, exist_ok=True)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Find images we could not pack - usually videos
|
||||||
|
for img in bpy.data.images:
|
||||||
|
if not img.packed_file and img.filepath and img.users:
|
||||||
|
os.makedirs(asset_dir, exist_ok=True)
|
||||||
|
shutil.copy2(img.filepath, os.path.join(asset_dir, os.path.basename(img.filepath)))
|
||||||
|
img.filepath = '//' + os.path.join('assets', os.path.basename(img.filepath))
|
||||||
|
|
||||||
|
# Save Output
|
||||||
|
bpy.ops.wm.save_as_mainfile(filepath=os.path.join(tmp_dir, os.path.basename(project_path)), compress=True)
|
||||||
|
|
||||||
|
zip_files([os.path.join(tmp_dir, os.path.basename(project_path)), asset_dir],
|
||||||
|
os.path.join(os.path.dirname(project_path), 'output.zip'))
|
||||||
|
finally:
|
||||||
|
os.remove(tmp_dir)
|
||||||
Reference in New Issue
Block a user