Add our own 3D vector class, so we are less depended on Skeinforge.

This commit is contained in:
daid 2012-03-15 17:14:20 +01:00
parent 6ebc6f64d3
commit 16ca7b3683
3 changed files with 79 additions and 7 deletions

View 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

View File

@ -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

View File

@ -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