46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import numpy as np
|
|
import pytest
|
|
import trimesh
|
|
from PIL import Image
|
|
|
|
from cxn.glb_loader import extract_embedded_textures, load_glb_as_scene
|
|
|
|
|
|
def _make_textured_glb(path):
|
|
mesh = trimesh.creation.box()
|
|
img = Image.new("RGB", (8, 8), (200, 100, 50))
|
|
uv = np.zeros((len(mesh.vertices), 2), dtype=np.float64)
|
|
mesh.visual = trimesh.visual.TextureVisuals(uv=uv, image=img)
|
|
trimesh.Scene(mesh).export(str(path), file_type="glb")
|
|
|
|
|
|
def test_load_glb_returns_scene_with_geometry(tmp_path):
|
|
p = tmp_path / "box.glb"
|
|
_make_textured_glb(p)
|
|
scene = load_glb_as_scene(str(p))
|
|
assert isinstance(scene, trimesh.Scene)
|
|
assert len(scene.geometry) >= 1
|
|
|
|
|
|
def test_extract_embedded_textures_finds_image(tmp_path):
|
|
p = tmp_path / "box.glb"
|
|
_make_textured_glb(p)
|
|
scene = load_glb_as_scene(str(p))
|
|
textures = extract_embedded_textures(scene)
|
|
assert len(textures) >= 1
|
|
assert all(isinstance(t, Image.Image) for t in textures)
|
|
|
|
|
|
def test_extract_embedded_textures_empty_when_none(tmp_path):
|
|
p = tmp_path / "plain.glb"
|
|
trimesh.Scene(trimesh.creation.box()).export(str(p), file_type="glb")
|
|
scene = load_glb_as_scene(str(p))
|
|
assert extract_embedded_textures(scene) == []
|
|
|
|
|
|
def test_load_glb_corrupt_file_raises(tmp_path):
|
|
p = tmp_path / "bad.glb"
|
|
p.write_bytes(b"not a real glb")
|
|
with pytest.raises(Exception):
|
|
load_glb_as_scene(str(p))
|