X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=pymeshio%2Fcommon.py;h=71775060e75fa2ee7ce0a6b5bd8174962a76a629;hb=cf6ec3e04ee67bbe635510486475961ed32e46f2;hp=dca807d4bd100fd3f43d40ee0285d959f5e01fb5;hpb=c9f342063f2c03949e23a4dd12960efa11fe2cb7;p=meshio%2Fpymeshio.git diff --git a/pymeshio/common.py b/pymeshio/common.py index dca807d..7177506 100644 --- a/pymeshio/common.py +++ b/pymeshio/common.py @@ -21,6 +21,9 @@ class Vector2(object): def __str__(self): return "<%f %f>" % (self.x, self.y) + def __eq__(self, rhs): + return self.x==rhs.x and self.y==rhs.y + def __getitem__(self, key): if key==0: return self.x @@ -50,6 +53,9 @@ class Vector3(object): def __str__(self): return "<%f %f %f>" % (self.x, self.y, self.z) + def __eq__(self, rhs): + return self.x==rhs.x and self.y==rhs.y and self.z==rhs.z + def __getitem__(self, key): if key==0: return self.x @@ -212,6 +218,9 @@ class RGB(object): self.g=g self.b=b + def __eq__(self, rhs): + return self.r==rhs.r and self.g==rhs.g and self.b==rhs.b + def __getitem__(self, key): if key==0: return self.r @@ -234,6 +243,9 @@ class RGBA(object): self.b=b self.a=a + def __eq__(self, rhs): + return self.r==rhs.r and self.g==rhs.g and self.b==rhs.b and self.a==rhs.a + def __getitem__(self, key): if key==0: return self.r @@ -267,17 +279,17 @@ def readall(path): return f.read() -class BinaryLoader(object): - """general BinaryLoader +class BinaryReader(object): + """general BinaryReader """ - def __init__(self, io): - self.io=io + def __init__(self, ios): + self.ios=ios def is_end(self): - return not self.io.readable() + return not self.ios.readable() def unpack(self, fmt, size): - result=struct.unpack(fmt, self.io.read(size)) + result=struct.unpack(fmt, self.ios.read(size)) return result[0] def read_uint(self, size): @@ -321,3 +333,44 @@ class BinaryLoader(object): self.read_float() ) + +class WriteException(Exception): + pass + + +class BinaryWriter(object): + def __init__(self, ios): + self.ios=ios + + def write_bytes(self, v, size=None): + if size: + self.ios.write(struct.pack("={0}s".format(size), v)) + else: + self.ios.write(v) + + def write_float(self, v): + self.ios.write(struct.pack("f", v)) + + def write_uint(self, v, size): + if size==1: + self.ios.write(struct.pack("B", v)) + elif size==2: + self.ios.write(struct.pack("H", v)) + elif size==4: + self.ios.write(struct.pack("I", v)) + else: + raise WriteError("invalid int uint size") + + def write_vector2(self, v): + self.ios.write(struct.pack("=2f", v.x, v.y)) + + def write_vector3(self, v): + self.ios.write(struct.pack("=3f", v.x, v.y, v.z)) + + def write_rgb(self, v): + self.ios.write(struct.pack("=3f", v.r, v.g, v.b)) + + def write_rgba(self, v): + self.ios.write(struct.pack("=4f", v.r, v.g, v.b, v.a)) + +