Source code for viam.spatialmath.vector3

import weakref
from typing import List

from . import _ffi


[docs] class Vector3: """A 3-vector backed by the rust-utils spatialmath FFI.""" __slots__ = ("_handle", "__weakref__") def __init__(self, x: float, y: float, z: float): lib = _ffi.lib() self._handle = _ffi.check(lib.viam_new_vector3(float(x), float(y), float(z))) weakref.finalize(self, lib.viam_free_vector_memory, self._handle) @classmethod def _from_handle(cls, handle) -> "Vector3": obj = cls.__new__(cls) obj._handle = _ffi.check(handle) weakref.finalize(obj, _ffi.lib().viam_free_vector_memory, obj._handle) return obj def _components(self) -> List[float]: lib = _ffi.lib() return _ffi.read_components(lib.viam_vector_get_components, self._handle, 3, lib.viam_free_vector_components) @property def x(self) -> float: return self._components()[0] @property def y(self) -> float: return self._components()[1] @property def z(self) -> float: return self._components()[2]
[docs] @classmethod def from_proto(cls, proto) -> "Vector3": return cls(proto.x, proto.y, proto.z)
[docs] def to_proto(self): from viam.proto.common import Vector3 as ProtoVector3 c = self._components() return ProtoVector3(x=c[0], y=c[1], z=c[2])
[docs] def dot(self, other: "Vector3") -> float: return _ffi.lib().viam_vector_dot_product(self._handle, other._handle)
[docs] def cross(self, other: "Vector3") -> "Vector3": return Vector3._from_handle(_ffi.lib().viam_vector_cross_product(self._handle, other._handle))
[docs] def __add__(self, other: "Vector3") -> "Vector3": return Vector3._from_handle(_ffi.lib().viam_vector_add(self._handle, other._handle))
[docs] def __sub__(self, other: "Vector3") -> "Vector3": return Vector3._from_handle(_ffi.lib().viam_vector_subtract(self._handle, other._handle))
[docs] def scaled(self, factor: float) -> "Vector3": return Vector3._from_handle(_ffi.lib().viam_vector_get_scaled(self._handle, float(factor)))
[docs] def normalized(self) -> "Vector3": return Vector3._from_handle(_ffi.lib().viam_vector_get_normalized(self._handle))
[docs] def __repr__(self) -> str: c = self._components() return f"Vector3(x={c[0]}, y={c[1]}, z={c[2]})"