From: daid Date: Thu, 15 Mar 2012 16:14:20 +0000 (+0100) Subject: Add our own 3D vector class, so we are less depended on Skeinforge. X-Git-Tag: RC1~85 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=16ca7b3683c1572d812b457562e5c9d140fa5f82;p=cura.git Add our own 3D vector class, so we are less depended on Skeinforge. --- diff --git a/SkeinPyPy_NewUI/newui/gcodeInterpreter.py b/SkeinPyPy_NewUI/newui/gcodeInterpreter.py index 1bc88166..cb89cf14 100644 --- a/SkeinPyPy_NewUI/newui/gcodeInterpreter.py +++ b/SkeinPyPy_NewUI/newui/gcodeInterpreter.py @@ -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 diff --git a/SkeinPyPy_NewUI/newui/preview3d.py b/SkeinPyPy_NewUI/newui/preview3d.py index fdcec82f..1bc41bc5 100644 --- a/SkeinPyPy_NewUI/newui/preview3d.py +++ b/SkeinPyPy_NewUI/newui/preview3d.py @@ -14,10 +14,12 @@ except: print "Failed to find PyOpenGL: http://pyopengl.sourceforge.net/" hasOpenGLlibs = False -from fabmetheus_utilities.fabmetheus_tools import fabmetheus_interpret -from fabmetheus_utilities.vector3 import Vector3 from fabmetheus_utilities import settings from newui import gcodeInterpreter +from newui import util3d + +from fabmetheus_utilities.fabmetheus_tools import fabmetheus_interpret +from fabmetheus_utilities.vector3 import Vector3 class previewPanel(wx.Panel): def __init__(self, parent): @@ -347,7 +349,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas): for i in xrange(0, len(path['list'])-1): v0 = path['list'][i] v1 = path['list'][i+1] - normal = (v0 - v1).cross(Vector3(0,0,1)) + normal = (v0 - v1).cross(util3d.Vector3(0,0,1)) normal.normalize() v2 = v0 + normal * lineWidth v3 = v1 + normal * lineWidth diff --git a/SkeinPyPy_NewUI/newui/util3d.py b/SkeinPyPy_NewUI/newui/util3d.py new file mode 100644 index 00000000..d9f53e52 --- /dev/null +++ b/SkeinPyPy_NewUI/newui/util3d.py @@ -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 +