chiark / gitweb /
Add our own 3D vector class, so we are less depended on Skeinforge.
authordaid <daid303@gmail.com>
Thu, 15 Mar 2012 16:14:20 +0000 (17:14 +0100)
committerdaid <daid303@gmail.com>
Thu, 15 Mar 2012 16:14:20 +0000 (17:14 +0100)
SkeinPyPy_NewUI/newui/gcodeInterpreter.py
SkeinPyPy_NewUI/newui/preview3d.py
SkeinPyPy_NewUI/newui/util3d.py [new file with mode: 0644]

index 1bc88166f4cecefcaac8c698764f2bc442a61219..cb89cf14680f879f3ac9c89a20a1631cfc66add2 100644 (file)
@@ -3,13 +3,13 @@ import math
 import threading
 import re
 
-from fabmetheus_utilities.vector3 import Vector3
+from newui import util3d
 
 class gcode():
        def __init__(self, filename):
                f = open(filename, 'r')
-               pos = Vector3()
-               posOffset = Vector3()
+               pos = util3d.Vector3()
+               posOffset = util3d.Vector3()
                currentE = 0
                pathList = []
                scale = 1.0
@@ -73,7 +73,7 @@ class gcode():
                                        y = self.getCodeFloat(line, 'Y')
                                        z = self.getCodeFloat(line, 'Z')
                                        if x is None and y is None and z is None:
-                                               pos = Vector3()
+                                               pos = util3d.Vector3()
                                        else:
                                                if x is not None:
                                                        pos.x = 0.0
index fdcec82fa5502984504e4e1c634c0be6ee465299..1bc41bc5da4d8b1431777d71780fba9ffe607638 100644 (file)
@@ -14,10 +14,12 @@ except:
        print "Failed to find PyOpenGL: http://pyopengl.sourceforge.net/"\r
        hasOpenGLlibs = False\r
 \r
-from fabmetheus_utilities.fabmetheus_tools import fabmetheus_interpret\r
-from fabmetheus_utilities.vector3 import Vector3\r
 from fabmetheus_utilities import settings\r
 from newui import gcodeInterpreter\r
+from newui import util3d\r
+\r
+from fabmetheus_utilities.fabmetheus_tools import fabmetheus_interpret\r
+from fabmetheus_utilities.vector3 import Vector3\r
 \r
 class previewPanel(wx.Panel):\r
        def __init__(self, parent):\r
@@ -347,7 +349,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                                for i in xrange(0, len(path['list'])-1):\r
                                                        v0 = path['list'][i]\r
                                                        v1 = path['list'][i+1]\r
-                                                       normal = (v0 - v1).cross(Vector3(0,0,1))\r
+                                                       normal = (v0 - v1).cross(util3d.Vector3(0,0,1))\r
                                                        normal.normalize()\r
                                                        v2 = v0 + normal * lineWidth\r
                                                        v3 = v1 + normal * lineWidth\r
diff --git a/SkeinPyPy_NewUI/newui/util3d.py b/SkeinPyPy_NewUI/newui/util3d.py
new file mode 100644 (file)
index 0000000..d9f53e5
--- /dev/null
@@ -0,0 +1,70 @@
+
+import math
+
+class Vector3():
+       def __init__(self, x=0.0, y=0.0, z=0.0):
+               self.x = x
+               self.y = y
+               self.z = z
+
+       def __copy__(self):
+               return Vector3(self.x, self.y, self.z)
+
+       def copy(self):
+               return Vector3(self.x, self.y, self.z)
+
+       def __repr__(self):
+               return '%s, %s, %s' % ( self.x, self.y, self.z )
+
+       def __add__(self, v):
+               return Vector3( self.x + v.x, self.y + v.y, self.z + v.z )
+
+       def __sub__(self, v):
+               return Vector3( self.x - v.x, self.y - v.y, self.z - v.z )
+
+       def __mul__(self, v):
+               return Vector3( self.x * v, self.y * v, self.z * v )
+
+       def __div__(self, v):
+               return Vector3( self.x / v, self.y / v, self.z / v )
+
+       def __neg__(self):
+               return Vector3( - self.x, - self.y, - self.z )
+
+       def __iadd__(self, v):
+               self.x += v.x
+               self.y += v.x
+               self.z += v.x
+               return self
+
+       def __isub__(self, v):
+               self.x += v.x
+               self.y += v.x
+               self.z += v.x
+               return self
+
+       def __imul__(self, v):
+               self.x *= v
+               self.y *= v
+               self.z *= v
+               return self
+
+       def __idiv__(self, v):
+               self.x /= v
+               self.y /= v
+               self.z /= v
+               return self
+
+       def cross(self, v):
+               return Vector3(self.y * v.z - self.z * v.y, -self.x * v.z + self.z * v.x, self.x * v.y - self.y * v.x)
+
+       def vsize(self):
+               return math.sqrt( self.x * self.x + self.y * self.y + self.z * self.z )
+
+       def normalize(self):
+               f = self.vsize()
+               if f != 0.0:
+                       self.x /= f
+                       self.y /= f
+                       self.z /= f
+