Source code for redeclipse.vector.re

[docs]class ivec2: """ 2D integer vector class """ def __init__(self, x, y): self.x = x self.y = y
[docs] def X(self): return int(self.x)
[docs] def Y(self): return int(self.y)
[docs] def to_dict(self): return [self.X(), self.Y()]
def __repr__(self): return '<ivec2 {} {}>'.format(*self.to_dict())
[docs]class vec2: """Float version of ivec2""" def __init__(self, x, y): self.x = x self.y = y
[docs] def X(self): return float(self.x)
[docs] def Y(self): return float(self.y)
[docs] def to_dict(self): return [self.X(), self.Y()]
def __repr__(self): return '<vec2 {} {}>'.format(*self.to_dict())
[docs]class vec3: """ 3D vector class """ def __init__(self, x, y, z): self.x = x self.y = y self.z = z
[docs] def X(self): return float(self.x)
[docs] def Y(self): return float(self.y)
[docs] def Z(self): return float(self.z)
[docs] def to_dict(self): return [self.X(), self.Y(), self.Z()]
def __repr__(self): return '<vec3 {} {} {}>'.format(*self.to_dict())
[docs]class ivec3: """ 3D integer vector class """ def __init__(self, x, y, z): self.x = x self.y = y self.z = z
[docs] def X(self): return int(self.x)
[docs] def Y(self): return int(self.y)
[docs] def Z(self): return int(self.z)
[docs] @classmethod def ivec5(cls, i, x, y, z, s): return ivec3( x + ((i & 1) >> 0) * s, y + ((i & 2) >> 1) * s, z + ((i & 4) >> 2) * s )
[docs] def mask(self, mask): return ivec3( self.X() & mask, self.Y() & mask, self.Z() & mask )
[docs] def shl(self, shift): return ivec3( self.X() << shift, self.Y() << shift, self.Z() << shift, )
[docs] def sub(self, b): return ivec3( self.X() - b.X(), self.Y() - b.Y(), self.Z() - b.Z() )
[docs] def mul(self, s): return ivec3( self.X() * s, self.Y() * s, self.Z() * s )
[docs] def add(self, b): return ivec3( self.X() + b.x, self.Y() + b.y, self.Z() + b.z )
[docs] def gg(self, idx): if idx == 0: return self.X() elif idx == 1: return self.Y() elif idx == 2: return self.Z()
[docs] def dot(self, o): return self.X() * o.x + self.Y() * o.y + self.Z() * o.z
[docs] def iszero(self): return self.X() == 0 and self.Y() == 0 and self.Z() == 0
[docs] def to_dict(self): return [self.X(), self.Y(), self.Z()]
def __repr__(self): return '<ivec3 {} {} {}>'.format(*self.to_dict())
[docs]def cross(a, b): """ cross product of two ivec3/ivec """ if isinstance(a, ivec3): return ivec3( a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x, ) else: return vec3( a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x, )