Merge pull request #545 from acq4/transform-update
Transform3D map() update
This commit is contained in:
commit
8d730f07d9
@ -1,13 +1,19 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from .Qt import QtCore, QtGui
|
from .Qt import QtCore, QtGui
|
||||||
from . import functions as fn
|
from . import functions as fn
|
||||||
|
from .Vector import Vector
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class Transform3D(QtGui.QMatrix4x4):
|
class Transform3D(QtGui.QMatrix4x4):
|
||||||
"""
|
"""
|
||||||
Extension of QMatrix4x4 with some helpful methods added.
|
Extension of QMatrix4x4 with some helpful methods added.
|
||||||
"""
|
"""
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
|
if len(args) == 1 and isinstance(args[0], (list, tuple, np.ndarray)):
|
||||||
|
args = [x for y in args[0] for x in y]
|
||||||
|
if len(args) != 16:
|
||||||
|
raise TypeError("Single argument to Transform3D must have 16 elements.")
|
||||||
QtGui.QMatrix4x4.__init__(self, *args)
|
QtGui.QMatrix4x4.__init__(self, *args)
|
||||||
|
|
||||||
def matrix(self, nd=3):
|
def matrix(self, nd=3):
|
||||||
@ -25,8 +31,15 @@ class Transform3D(QtGui.QMatrix4x4):
|
|||||||
"""
|
"""
|
||||||
Extends QMatrix4x4.map() to allow mapping (3, ...) arrays of coordinates
|
Extends QMatrix4x4.map() to allow mapping (3, ...) arrays of coordinates
|
||||||
"""
|
"""
|
||||||
if isinstance(obj, np.ndarray) and obj.ndim >= 2 and obj.shape[0] in (2,3):
|
if isinstance(obj, np.ndarray) and obj.shape[0] in (2,3):
|
||||||
|
if obj.ndim >= 2:
|
||||||
return fn.transformCoordinates(self, obj)
|
return fn.transformCoordinates(self, obj)
|
||||||
|
elif obj.ndim == 1:
|
||||||
|
v = QtGui.QMatrix4x4.map(self, Vector(obj))
|
||||||
|
return np.array([v.x(), v.y(), v.z()])[:obj.shape[0]]
|
||||||
|
elif isinstance(obj, (list, tuple)):
|
||||||
|
v = QtGui.QMatrix4x4.map(self, Vector(obj))
|
||||||
|
return type(obj)([v.x(), v.y(), v.z()])[:len(obj)]
|
||||||
else:
|
else:
|
||||||
return QtGui.QMatrix4x4.map(self, obj)
|
return QtGui.QMatrix4x4.map(self, obj)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user