OSDN Git Service

implement converter
[meshio/pymeshio.git] / pymeshio / common.py
index 7177506..e8e385c 100644 (file)
@@ -4,8 +4,21 @@ common utilities.
 """\r
 import math\r
 import struct\r
+import sys\r
 \r
 \r
+def unicode(src):\r
+    """\r
+    literal to unicode for python2 and python3 compatiblity.\r
+\r
+    in python2 str to unicode.\r
+    in python3 str(as unicode) to str.\r
+    """\r
+    if sys.version_info[0]<3:\r
+        return src.decode('utf-8')\r
+    else:\r
+        return src\r
+\r
 """\r
 common structures.\r
 """\r
@@ -24,6 +37,9 @@ class Vector2(object):
     def __eq__(self, rhs):\r
         return self.x==rhs.x and self.y==rhs.y\r
 \r
+    def __ne__(self, rhs):\r
+        return not self.__eq__(rhs)\r
+\r
     def __getitem__(self, key):\r
         if key==0:\r
             return self.x\r
@@ -51,11 +67,14 @@ class Vector3(object):
         self.z=z\r
 \r
     def __str__(self):\r
-        return "<%f %f %f>" % (self.x, self.y, self.z)\r
+        return "<%f %.32f %f>" % (self.x, self.y, self.z)\r
 \r
     def __eq__(self, rhs):\r
         return self.x==rhs.x and self.y==rhs.y and self.z==rhs.z\r
 \r
+    def __ne__(self, rhs):\r
+        return not self.__eq__(rhs)\r
+\r
     def __getitem__(self, key):\r
         if key==0:\r
             return self.x\r
@@ -221,6 +240,9 @@ class RGB(object):
     def __eq__(self, rhs):\r
         return self.r==rhs.r and self.g==rhs.g and self.b==rhs.b\r
 \r
+    def __ne__(self, rhs):\r
+        return not self.__eq__(rhs)\r
+\r
     def __getitem__(self, key):\r
         if key==0:\r
             return self.r\r
@@ -246,6 +268,9 @@ class RGBA(object):
     def __eq__(self, rhs):\r
         return self.r==rhs.r and self.g==rhs.g and self.b==rhs.b and self.a==rhs.a\r
 \r
+    def __ne__(self, rhs):\r
+        return not self.__eq__(rhs)\r
+\r
     def __getitem__(self, key):\r
         if key==0:\r
             return self.r\r
@@ -269,6 +294,9 @@ def radian_to_degree(x):
 \r
 \r
 class ParseException(Exception):\r
+    """\r
+    Exception in reader\r
+    """\r
     pass\r
 \r
 \r
@@ -292,6 +320,16 @@ class BinaryReader(object):
         result=struct.unpack(fmt, self.ios.read(size))\r
         return result[0]\r
 \r
+    def read_int(self, size):\r
+        if size==1:\r
+            return self.unpack("b", size)\r
+        if size==2:\r
+            return self.unpack("h", size)\r
+        if size==4:\r
+            return self.unpack("i", size)\r
+        print("not reach here")\r
+        raise ParseException("invalid int size: "+size)\r
+\r
     def read_uint(self, size):\r
         if size==1:\r
             return self.unpack("B", size)\r
@@ -335,6 +373,9 @@ class BinaryReader(object):
 \r
 \r
 class WriteException(Exception):\r
+    """\r
+    Exception in writer\r
+    """\r
     pass\r
 \r
 \r
@@ -351,6 +392,16 @@ class BinaryWriter(object):
     def write_float(self, v):\r
         self.ios.write(struct.pack("f", v))\r
 \r
+    def write_int(self, v, size):\r
+        if size==1:\r
+            self.ios.write(struct.pack("b", v))\r
+        elif size==2:\r
+            self.ios.write(struct.pack("h", v))\r
+        elif size==4:\r
+            self.ios.write(struct.pack("i", v))\r
+        else:\r
+            raise WriteError("invalid int uint size")\r
+\r
     def write_uint(self, v, size):\r
         if size==1:\r
             self.ios.write(struct.pack("B", v))\r