Skip to content

Commit

Permalink
Copy arrays passed as input
Browse files Browse the repository at this point in the history
  • Loading branch information
brentyi committed Nov 7, 2024
1 parent f3c19b3 commit 1314cc7
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions src/viser/_scene_handles.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,12 @@ def __setattr__(self, name: str, value: Any) -> None:
elif current_value == value:
return

setattr(handle._impl.props, name, value)
# Update the value.
if isinstance(value, np.ndarray):
current_value[:] = value
else:
setattr(handle._impl.props, name, value)

handle._impl.api._websock_interface.queue_message(
_messages.SceneNodeUpdateMessage(handle.name, {name: value})
)
Expand Down Expand Up @@ -171,7 +176,7 @@ def _make(
assert isinstance(message, _messages.Message)
api._websock_interface.queue_message(message)

out = cls(_SceneNodeHandleState(name, copy.copy(message.props), api))
out = cls(_SceneNodeHandleState(name, copy.deepcopy(message.props), api))
api._handle_from_node_name[name] = out

out.wxyz = wxyz
Expand All @@ -198,7 +203,7 @@ def wxyz(self, wxyz: tuple[float, float, float, float] | np.ndarray) -> None:
wxyz_array = np.asarray(wxyz)
if np.allclose(wxyz_cast, self._impl.wxyz):
return
self._impl.wxyz = wxyz_array
self._impl.wxyz[:] = wxyz_array
self._impl.api._websock_interface.queue_message(
_messages.SetOrientationMessage(self._impl.name, wxyz_cast)
)
Expand All @@ -218,7 +223,7 @@ def position(self, position: tuple[float, float, float] | np.ndarray) -> None:
position_array = np.asarray(position)
if np.allclose(position_array, self._impl.position):
return
self._impl.position = position_array
self._impl.position[:] = position_array
self._impl.api._websock_interface.queue_message(
_messages.SetPositionMessage(self._impl.name, position_cast)
)
Expand Down Expand Up @@ -464,7 +469,7 @@ def wxyz(self, wxyz: tuple[float, float, float, float] | np.ndarray) -> None:
wxyz_array = np.asarray(wxyz)
if np.allclose(wxyz_cast, self._impl.wxyz):
return
self._impl.wxyz = wxyz_array
self._impl.wxyz[:] = wxyz_array
self._impl.websock_interface.queue_message(
_messages.SetBoneOrientationMessage(
self._impl.name, self._impl.bone_index, wxyz_cast
Expand All @@ -486,7 +491,7 @@ def position(self, position: tuple[float, float, float] | np.ndarray) -> None:
position_array = np.asarray(position)
if np.allclose(position_array, self._impl.position):
return
self._impl.position = position_array
self._impl.position[:] = position_array
self._impl.websock_interface.queue_message(
_messages.SetBonePositionMessage(
self._impl.name, self._impl.bone_index, position_cast
Expand Down

0 comments on commit 1314cc7

Please sign in to comment.