diff --git a/Vector.py b/Vector.py new file mode 100644 index 00000000..3b0258ca --- /dev/null +++ b/Vector.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +""" +Vector.py - Extension of QVector3D which adds a few missing methods. +Copyright 2010 Luke Campagnola +Distributed under MIT/X11 license. See license.txt for more infomation. +""" + +from Qt import QtGui, QtCore +import numpy as np + +class Vector(QtGui.QVector3D): + """Extension of QVector3D which adds a few helpful methods.""" + + def __init__(self, *args): + if len(args) == 1: + if isinstance(args[0], QtCore.QSizeF): + QtGui.QVector3D.__init__(self, float(args[0].width()), float(args[0].height()), 0) + return + elif isinstance(args[0], QtCore.QPoint) or isinstance(args[0], QtCore.QPointF): + QtGui.QVector3D.__init__(self, float(args[0].x()), float(args[0].y()), 0) + elif hasattr(args[0], '__getitem__'): + vals = list(args[0]) + if len(vals) == 2: + vals.append(0) + if len(vals) != 3: + raise Exception('Cannot init Vector with sequence of length %d' % len(args[0])) + QtGui.QVector3D.__init__(self, *vals) + return + elif len(args) == 2: + QtGui.QVector3D.__init__(self, args[0], args[1], 0) + return + QtGui.QVector3D.__init__(self, *args) + + def __len__(self): + return 3 + + #def __reduce__(self): + #return (Point, (self.x(), self.y())) + + def __getitem__(self, i): + if i == 0: + return self.x() + elif i == 1: + return self.y() + elif i == 2: + return self.z() + else: + raise IndexError("Point has no index %s" % str(i)) + + def __setitem__(self, i, x): + if i == 0: + return self.setX(x) + elif i == 1: + return self.setY(x) + elif i == 2: + return self.setZ(x) + else: + raise IndexError("Point has no index %s" % str(i)) +