Spaces:
Paused
Paused
Upload code/cube3d/render/render_bricks_safe.py with huggingface_hub
Browse files
code/cube3d/render/render_bricks_safe.py
CHANGED
|
@@ -85,6 +85,14 @@ def render_bricks_safe(
|
|
| 85 |
fov: float = 45,
|
| 86 |
img_resolution: int = 512,
|
| 87 |
) -> None:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 88 |
in_file = os.path.abspath(in_file)
|
| 89 |
out_file = os.path.abspath(out_file)
|
| 90 |
|
|
@@ -97,9 +105,14 @@ def render_bricks_safe(
|
|
| 97 |
if not ldraw_lib_path or not os.path.exists(ldraw_lib_path):
|
| 98 |
ldraw_lib_path = Path.home() / 'ldraw'
|
| 99 |
ldraw_lib_path = os.path.abspath(ldraw_lib_path)
|
| 100 |
-
|
| 101 |
-
print(f"LDraw库路径: {ldraw_lib_path}")
|
| 102 |
-
print(f"LDraw库是否存在: {os.path.exists(ldraw_lib_path)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
|
| 104 |
# 修复布尔值格式化问题
|
| 105 |
blender_script = '''
|
|
@@ -260,17 +273,28 @@ except Exception as e:
|
|
| 260 |
|
| 261 |
try:
|
| 262 |
# 检查Blender路径是否存在
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 263 |
if not BLENDER_PATH or not os.path.exists(BLENDER_PATH):
|
|
|
|
|
|
|
|
|
|
| 264 |
print("⚠️ 跳过渲染:未找到Blender")
|
| 265 |
print("如需3D渲染功能,请安装Blender 3.6+")
|
|
|
|
| 266 |
# 创建一个占位图片,避免程序崩溃
|
| 267 |
from PIL import Image, ImageDraw, ImageFont
|
| 268 |
img = Image.new('RGB', (512, 512), color=(240, 240, 240))
|
| 269 |
draw = ImageDraw.Draw(img)
|
| 270 |
draw.text((150, 250), "Blender未安装\n渲染功能不可用", fill=(100, 100, 100))
|
| 271 |
img.save(out_file)
|
| 272 |
-
print(f"已生成占位图片: {out_file}")
|
| 273 |
return
|
|
|
|
|
|
|
| 274 |
|
| 275 |
# 首先测试 Blender 是否能正常运行
|
| 276 |
test_cmd = [BLENDER_PATH, '--version']
|
|
@@ -316,21 +340,46 @@ except Exception as e:
|
|
| 316 |
)
|
| 317 |
|
| 318 |
# 输出Blender日志
|
| 319 |
-
print(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 320 |
if result.stdout:
|
| 321 |
-
print("
|
|
|
|
|
|
|
| 322 |
print(result.stdout)
|
| 323 |
else:
|
| 324 |
-
print("
|
| 325 |
|
| 326 |
if result.stderr:
|
| 327 |
-
print("
|
|
|
|
|
|
|
| 328 |
print(result.stderr)
|
| 329 |
else:
|
| 330 |
-
print("
|
| 331 |
-
|
|
|
|
| 332 |
if result.returncode != 0:
|
| 333 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 334 |
|
| 335 |
if not os.path.exists(out_file):
|
| 336 |
raise FileNotFoundError(f"渲染失败:未生成输出文件 {out_file}")
|
|
|
|
| 85 |
fov: float = 45,
|
| 86 |
img_resolution: int = 512,
|
| 87 |
) -> None:
|
| 88 |
+
print("=" * 70)
|
| 89 |
+
print("🔍 [DEBUG] render_bricks_safe() 函数被调用")
|
| 90 |
+
print(f" 📁 输入文件: {in_file}")
|
| 91 |
+
print(f" 📁 输出文件: {out_file}")
|
| 92 |
+
print(f" 🔧 BLENDER_PATH (全局): {BLENDER_PATH}")
|
| 93 |
+
print(f" ✓ Blender 是否存在: {BLENDER_PATH and os.path.exists(BLENDER_PATH) if BLENDER_PATH else False}")
|
| 94 |
+
print("=" * 70)
|
| 95 |
+
|
| 96 |
in_file = os.path.abspath(in_file)
|
| 97 |
out_file = os.path.abspath(out_file)
|
| 98 |
|
|
|
|
| 105 |
if not ldraw_lib_path or not os.path.exists(ldraw_lib_path):
|
| 106 |
ldraw_lib_path = Path.home() / 'ldraw'
|
| 107 |
ldraw_lib_path = os.path.abspath(ldraw_lib_path)
|
| 108 |
+
|
| 109 |
+
print(f"📦 LDraw库路径: {ldraw_lib_path}")
|
| 110 |
+
print(f"✓ LDraw库是否存在: {os.path.exists(ldraw_lib_path)}")
|
| 111 |
+
if os.path.exists(ldraw_lib_path):
|
| 112 |
+
parts_dir = os.path.join(ldraw_lib_path, 'parts')
|
| 113 |
+
print(f" - parts 目录存在: {os.path.exists(parts_dir)}")
|
| 114 |
+
else:
|
| 115 |
+
print(f" ⚠️ 警告:LDraw 库目录不存在!")
|
| 116 |
|
| 117 |
# 修复布尔值格式化问题
|
| 118 |
blender_script = '''
|
|
|
|
| 273 |
|
| 274 |
try:
|
| 275 |
# 检查Blender路径是否存在
|
| 276 |
+
print(f"🔍 [DEBUG] 检查 Blender 路径...")
|
| 277 |
+
print(f" BLENDER_PATH 值: {BLENDER_PATH}")
|
| 278 |
+
print(f" 类型: {type(BLENDER_PATH)}")
|
| 279 |
+
print(f" 是否为 None: {BLENDER_PATH is None}")
|
| 280 |
+
|
| 281 |
if not BLENDER_PATH or not os.path.exists(BLENDER_PATH):
|
| 282 |
+
print(f"❌ Blender 不可用")
|
| 283 |
+
print(f" - BLENDER_PATH: {BLENDER_PATH}")
|
| 284 |
+
print(f" - 文件存在: {os.path.exists(BLENDER_PATH) if BLENDER_PATH else 'N/A'}")
|
| 285 |
print("⚠️ 跳过渲染:未找到Blender")
|
| 286 |
print("如需3D渲染功能,请安装Blender 3.6+")
|
| 287 |
+
print("📝 正在生成占位图片...")
|
| 288 |
# 创建一个占位图片,避免程序崩溃
|
| 289 |
from PIL import Image, ImageDraw, ImageFont
|
| 290 |
img = Image.new('RGB', (512, 512), color=(240, 240, 240))
|
| 291 |
draw = ImageDraw.Draw(img)
|
| 292 |
draw.text((150, 250), "Blender未安装\n渲染功能不可用", fill=(100, 100, 100))
|
| 293 |
img.save(out_file)
|
| 294 |
+
print(f"✅ 已生成占位图片: {out_file}")
|
| 295 |
return
|
| 296 |
+
|
| 297 |
+
print(f"✅ Blender 可用: {BLENDER_PATH}")
|
| 298 |
|
| 299 |
# 首先测试 Blender 是否能正常运行
|
| 300 |
test_cmd = [BLENDER_PATH, '--version']
|
|
|
|
| 340 |
)
|
| 341 |
|
| 342 |
# 输出Blender日志
|
| 343 |
+
print("=" * 70)
|
| 344 |
+
print(f"🎬 Blender 执行完成")
|
| 345 |
+
print("=" * 70)
|
| 346 |
+
print(f"返回码: {result.returncode}")
|
| 347 |
+
print(f"标准输出长度: {len(result.stdout) if result.stdout else 0} 字符")
|
| 348 |
+
print(f"错误输出长度: {len(result.stderr) if result.stderr else 0} 字符")
|
| 349 |
+
|
| 350 |
if result.stdout:
|
| 351 |
+
print("=" * 70)
|
| 352 |
+
print("📝 Blender 标准输出:")
|
| 353 |
+
print("=" * 70)
|
| 354 |
print(result.stdout)
|
| 355 |
else:
|
| 356 |
+
print("(标准输出为空)")
|
| 357 |
|
| 358 |
if result.stderr:
|
| 359 |
+
print("=" * 70)
|
| 360 |
+
print("❌ Blender 错误输出:")
|
| 361 |
+
print("=" * 70)
|
| 362 |
print(result.stderr)
|
| 363 |
else:
|
| 364 |
+
print("(错误输出为空)")
|
| 365 |
+
print("=" * 70)
|
| 366 |
+
|
| 367 |
if result.returncode != 0:
|
| 368 |
+
# 在抛出异常前,尝试解析错误信息
|
| 369 |
+
error_summary = "未知错误"
|
| 370 |
+
if result.stderr:
|
| 371 |
+
# 提取关键错误信息
|
| 372 |
+
lines = result.stderr.strip().split('\n')
|
| 373 |
+
for line in lines:
|
| 374 |
+
if 'Error' in line or 'error' in line:
|
| 375 |
+
error_summary = line.strip()
|
| 376 |
+
break
|
| 377 |
+
|
| 378 |
+
raise RuntimeError(
|
| 379 |
+
f"Blender返回错误码: {result.returncode}\n"
|
| 380 |
+
f"错误摘要: {error_summary}\n"
|
| 381 |
+
f"完整输出已打印在上方"
|
| 382 |
+
)
|
| 383 |
|
| 384 |
if not os.path.exists(out_file):
|
| 385 |
raise FileNotFoundError(f"渲染失败:未生成输出文件 {out_file}")
|