Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: identify overlapping vertices at UV seams #4

Merged
merged 7 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 15 additions & 5 deletions src/readyplayerme/meshops/mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,21 @@ def get_overlapping_vertices(
:param precision: Tolerance for considering positions as overlapping.
:return: A list of grouped vertices that share position.
"""
try:
selected_vertices = vertices_pos if indices is None else vertices_pos[indices]
except IndexError as error:
msg = "Indices must be within bounds of vertices array."
raise IndexError(msg) from error
# Not using try / except because when using an index of -1 gets the last element and creates a false positive
if indices is None:
selected_vertices = vertices_pos
else:
if len(indices) == 0:
return []
if np.any(indices < 0):
msg = "Negative index value is not allowed."
raise IndexError(msg)

if np.max(indices) >= len(vertices_pos):
msg = "Index is out of bounds."
raise IndexError(msg)

selected_vertices = vertices_pos[indices]
Comment on lines +63 to +77
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unnnessary and pushed after approval.


tree = cKDTree(selected_vertices)

Expand Down
15 changes: 11 additions & 4 deletions tests/readyplayerme/meshops/unit/test_mesh.py
Olaf-Wolf3D marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,17 @@ def test_get_overlapping_vertices(
assert np.array_equal(group, exp_group), f"Grouped vertices {group} do not match expected {exp_group}"


def test_get_overlapping_vertices_index_error():
"""Test the get_overlapping_vertices function with indices that are out of bounds for the vertices."""
@pytest.mark.parametrize(
"indices",
[
# Case with index out of bounds (higher than max)
np.array([0, 3], dtype=np.uint16),
# Case with index out of bounds (negative index)
np.array([0, -1], dtype=np.int32), # Using int32 to allow negative values
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should still be valid. Only negative indices that are out of bounds should raise. -1 is not out of bounds in this example, neither is -2, but -3 would be out of bounds.

],
)
def test_get_overlapping_vertices_error_handling(indices):
"""Test that get_overlapping_vertices function raises an exception for out of bounds indices."""
vertices = np.array([[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]])
indices = np.array([2, 3, -4])

with pytest.raises(IndexError):
mesh.get_overlapping_vertices(vertices, indices)