""" Misc utilities. """ from mathutils import Vector from typing import List def vec_to_str(vec): return "({:.4},{:.4},{:.4})".format(vec.x,vec.y,vec.z) def quat_to_str(quat): return "({:.4},{:.4},{:.4},{:.4})".format(quat.w, quat.x, quat.y, quat.z) def add_vec(l: Vector, r: Vector) -> Vector: return Vector(v0 + v1 for v0, v1 in zip(l, r)) def sub_vec(l: Vector, r: Vector) -> Vector: return Vector(v0 - v1 for v0, v1 in zip(l, r)) def mul_vec(l: Vector, r: Vector) -> Vector: return Vector(v0 * v1 for v0, v1 in zip(l, r)) def div_vec(l: Vector, r: Vector) -> Vector: return Vector(v0 / v1 for v0, v1 in zip(l, r)) def max_vec(l: Vector, r: Vector) -> Vector: return Vector(max(v0, v1) for v0, v1 in zip(l, r)) def min_vec(l: Vector, r: Vector) -> Vector: return Vector(min(v0, v1) for v0, v1 in zip(l, r)) def pack_color(color) -> int: packed = 0 packed |= (int(color[0] * 255.0 + 0.5) << 16) packed |= (int(color[1] * 255.0 + 0.5) << 8) packed |= (int(color[2] * 255.0 + 0.5)) packed |= (int(color[3] * 255.0 + 0.5) << 24) return packed def unpack_color(color: int) -> List[float]: mask = int(0x000000ff) r = (color & (mask << 16)) / 255.0 g = (color & (mask << 8)) / 255.0 b = (color & mask) / 255.0 a = (color & (mask << 24)) / 255.0 return [r,g,b,a]