refactor: incorporate Depth Scale into Depth Split criteria for consistent geometry handling
This commit is contained in:
@@ -75,8 +75,8 @@ def test_split_mapping_and_uniform_scale(size):
|
||||
assert counts[:3] == [15] * 3
|
||||
assert counts[3] == 18
|
||||
set_value("Depth Scale", 0.0)
|
||||
coords, faces = evaluated(obj)
|
||||
assert len(coords) == 18 and np.abs(coords[:, 1]).max() < 1e-6
|
||||
coords, _ = evaluated(obj)
|
||||
assert len(coords) == counts[0] and np.abs(coords[:, 1]).max() < 1e-6
|
||||
|
||||
|
||||
def test_midpoint_selects_relative_ray_jump_and_preserves_faces():
|
||||
@@ -87,16 +87,33 @@ def test_midpoint_selects_relative_ray_jump_and_preserves_faces():
|
||||
assert set(np.round(coords[:, 1], 4)) == {2.0, -2.0}
|
||||
|
||||
|
||||
@pytest.mark.parametrize("depth_scale", [0.0, 2.0])
|
||||
def test_split_topology_uses_depth_before_display_scaling(depth_scale):
|
||||
@pytest.mark.parametrize("depth_scale", [0.0, 1.0])
|
||||
def test_depth_scale_scales_split_selection(depth_scale):
|
||||
obj, set_value = surface(step=4.0)
|
||||
set_value("Depth Split", 0.5)
|
||||
original, original_faces = evaluated(obj)
|
||||
set_value("Depth Scale", depth_scale)
|
||||
set_value("Depth Split", 0.0)
|
||||
whole, whole_faces = evaluated(obj)
|
||||
set_value("Depth Split", 0.5)
|
||||
coords, faces = evaluated(obj)
|
||||
assert len(coords) == len(original) == 18
|
||||
assert faces == original_faces
|
||||
np.testing.assert_allclose(coords[:, 1], original[:, 1] * depth_scale, atol=1e-6)
|
||||
assert np.isfinite(coords).all()
|
||||
if depth_scale == 0.0:
|
||||
# A flat projection keeps every face, so there is nothing to separate.
|
||||
np.testing.assert_allclose(coords, whole, atol=1e-6)
|
||||
assert faces == whole_faces
|
||||
else:
|
||||
assert len(coords) > len(whole)
|
||||
|
||||
|
||||
def test_depth_scale_multiplies_split_strength():
|
||||
obj, set_value = surface(step=4.0)
|
||||
set_value("Depth Scale", 0.5)
|
||||
set_value("Depth Split", 1.0)
|
||||
scaled, scaled_faces = evaluated(obj)
|
||||
set_value("Depth Scale", 1.0)
|
||||
set_value("Depth Split", 0.5)
|
||||
reference, reference_faces = evaluated(obj)
|
||||
assert len(scaled) == len(reference) > 15
|
||||
assert scaled_faces == reference_faces
|
||||
|
||||
|
||||
def test_full_wrapper_keeps_closed_shell():
|
||||
@@ -314,6 +331,7 @@ def test_split_uses_ray_distance_and_ignores_absolute_distance_scale(kind):
|
||||
if kind == "plane":
|
||||
obj, set_value, _, _, image = create_surface("DEPTH")
|
||||
set_value("Subdivide", 1)
|
||||
set_value("Depth Scale", 1)
|
||||
else:
|
||||
obj, set_value = surface(step=0)
|
||||
image = bpy.data.images["Camera"]
|
||||
|
||||
Reference in New Issue
Block a user