125 lines
3.4 KiB
Python
125 lines
3.4 KiB
Python
"""Tests for UV unwrapping nodes."""
|
|
|
|
import pytest
|
|
from nodes.uv import (
|
|
XAtlasUVUnwrapNode,
|
|
LibiglLSCMNode,
|
|
LibiglHarmonicNode,
|
|
LibiglARAPNode,
|
|
BlenderUVUnwrapNode,
|
|
BlenderCubeProjectionNode,
|
|
BlenderCylinderProjectionNode,
|
|
BlenderSphereProjectionNode,
|
|
)
|
|
|
|
|
|
@pytest.mark.optional
|
|
def test_xatlas_unwrap(sphere_mesh, save_mesh_helper, render_helper):
|
|
"""Test xAtlas UV unwrapping."""
|
|
pytest.importorskip("xatlas")
|
|
|
|
node = XAtlasUVUnwrapNode()
|
|
unwrapped = node.uv_unwrap(mesh=sphere_mesh)[0]
|
|
|
|
assert unwrapped is not None
|
|
assert hasattr(unwrapped.visual, 'uv') or 'uv' in unwrapped.metadata
|
|
|
|
save_mesh_helper(unwrapped, "sphere_xatlas_uv", "obj")
|
|
render_helper(unwrapped, "sphere_xatlas_uv")
|
|
|
|
|
|
@pytest.mark.optional
|
|
def test_libigl_lscm(sphere_mesh, save_mesh_helper, render_helper):
|
|
"""Test libigl LSCM UV unwrapping."""
|
|
pytest.importorskip("igl")
|
|
|
|
node = LibiglLSCMNode()
|
|
unwrapped = node.uv_unwrap(mesh=sphere_mesh)[0]
|
|
|
|
assert unwrapped is not None
|
|
|
|
save_mesh_helper(unwrapped, "sphere_lscm_uv", "obj")
|
|
render_helper(unwrapped, "sphere_lscm_uv")
|
|
|
|
|
|
@pytest.mark.optional
|
|
def test_libigl_harmonic(open_mesh, save_mesh_helper, render_helper):
|
|
"""Test libigl harmonic UV unwrapping."""
|
|
pytest.importorskip("igl")
|
|
|
|
node = LibiglHarmonicNode()
|
|
unwrapped = node.uv_unwrap(mesh=open_mesh)[0]
|
|
|
|
assert unwrapped is not None
|
|
|
|
save_mesh_helper(unwrapped, "open_harmonic_uv", "obj")
|
|
render_helper(unwrapped, "open_harmonic_uv")
|
|
|
|
|
|
@pytest.mark.optional
|
|
def test_libigl_arap(open_mesh, save_mesh_helper, render_helper):
|
|
"""Test libigl ARAP UV unwrapping."""
|
|
pytest.importorskip("igl")
|
|
|
|
node = LibiglARAPNode()
|
|
unwrapped = node.uv_unwrap(trimesh=open_mesh, iterations=10)[0]
|
|
|
|
assert unwrapped is not None
|
|
|
|
save_mesh_helper(unwrapped, "open_arap_uv", "obj")
|
|
render_helper(unwrapped, "open_arap_uv")
|
|
|
|
|
|
@pytest.mark.blender
|
|
@pytest.mark.slow
|
|
def test_blender_uv_unwrap(sphere_mesh, save_mesh_helper, render_helper):
|
|
"""Test Blender Smart UV Project."""
|
|
node = BlenderUVUnwrapNode()
|
|
unwrapped = node.uv_unwrap(
|
|
trimesh=sphere_mesh,
|
|
angle_limit=66.0,
|
|
island_margin=0.02
|
|
)[0]
|
|
|
|
assert unwrapped is not None
|
|
|
|
save_mesh_helper(unwrapped, "sphere_blender_smart_uv", "obj")
|
|
render_helper(unwrapped, "sphere_blender_smart_uv")
|
|
|
|
|
|
@pytest.mark.blender
|
|
@pytest.mark.slow
|
|
def test_blender_cube_projection(cube_mesh, save_mesh_helper):
|
|
"""Test Blender cube projection UV."""
|
|
node = BlenderCubeProjectionNode()
|
|
unwrapped = node.uv_unwrap(trimesh=cube_mesh, cube_size=1.0)[0]
|
|
|
|
assert unwrapped is not None
|
|
|
|
save_mesh_helper(unwrapped, "cube_projection_uv", "obj")
|
|
|
|
|
|
@pytest.mark.blender
|
|
@pytest.mark.slow
|
|
def test_blender_cylinder_projection(sphere_mesh, save_mesh_helper):
|
|
"""Test Blender cylinder projection UV."""
|
|
node = BlenderCylinderProjectionNode()
|
|
unwrapped = node.uv_unwrap(trimesh=sphere_mesh, radius=1.0)[0]
|
|
|
|
assert unwrapped is not None
|
|
|
|
save_mesh_helper(unwrapped, "sphere_cylinder_uv", "obj")
|
|
|
|
|
|
@pytest.mark.blender
|
|
@pytest.mark.slow
|
|
def test_blender_sphere_projection(sphere_mesh, save_mesh_helper, render_helper):
|
|
"""Test Blender sphere projection UV."""
|
|
node = BlenderSphereProjectionNode()
|
|
unwrapped = node.uv_unwrap(mesh=sphere_mesh)[0]
|
|
|
|
assert unwrapped is not None
|
|
|
|
save_mesh_helper(unwrapped, "sphere_sphere_uv", "obj")
|
|
render_helper(unwrapped, "sphere_sphere_uv")
|