Cache some computed points and bounds instead of computing them in properties

This commit is contained in:
David Vierra 2015-10-14 13:29:25 -10:00
parent 8c02496a43
commit cca9ed3a47

View File

@ -101,6 +101,8 @@ class PendingImportNode(Node, QtCore.QObject):
dim = pendingImport.sourceDim dim = pendingImport.sourceDim
self.transformedPosition = Vector(0, 0, 0)
# positionTranslateNode contains the non-transformed preview of the imported # positionTranslateNode contains the non-transformed preview of the imported
# object, including its world scene. This preview will be rotated model-wise # object, including its world scene. This preview will be rotated model-wise
# while the user is dragging the rotate controls. # while the user is dragging the rotate controls.
@ -240,10 +242,6 @@ class PendingImportNode(Node, QtCore.QObject):
def updateTransformedSceneOffset(self): def updateTransformedSceneOffset(self):
self.transformedWorldTranslateNode.translateOffset = self.transformedPosition - self.pendingImport.importDim.bounds.origin self.transformedWorldTranslateNode.translateOffset = self.transformedPosition - self.pendingImport.importDim.bounds.origin
@property
def transformedPosition(self):
return self.basePosition + self.pendingImport.transformOffset
@property @property
def basePosition(self): def basePosition(self):
return self.positionTranslateNode.translateOffset return self.positionTranslateNode.translateOffset
@ -255,6 +253,7 @@ class PendingImportNode(Node, QtCore.QObject):
return return
self.positionTranslateNode.translateOffset = value self.positionTranslateNode.translateOffset = value
self.transformedPosition = self.basePosition + self.pendingImport.transformOffset
self.updateTransformedSceneOffset() self.updateTransformedSceneOffset()
self.updateBoxHandle() self.updateBoxHandle()
@ -370,6 +369,10 @@ class PendingImport(QtCore.QObject):
self.transformedDim = None self.transformedDim = None
self.transformOffset = Vector(0, 0, 0) self.transformOffset = Vector(0, 0, 0)
self.importPos = Vector(0, 0, 0)
self.importBounds = BoundingBox()
self.updateImportPos()
bounds = self.selection bounds = self.selection
self.rotateAnchor = bounds.origin + bounds.size * 0.5 self.rotateAnchor = bounds.origin + bounds.size * 0.5
@ -388,20 +391,18 @@ class PendingImport(QtCore.QObject):
return return
self._pos = Vector(*value) self._pos = Vector(*value)
self.updateImportPos()
self.positionChanged.emit(self._pos) self.positionChanged.emit(self._pos)
@property def updateImportPos(self):
def importPos(self):
if self.transformedDim is None: if self.transformedDim is None:
return self.basePosition self.importPos = self.basePosition
return self.basePosition + self.transformOffset size = self.selection.size
@importPos.setter
def importPos(self, pos):
if self.transformedDim is None:
self.basePosition = pos
else: else:
self.basePosition = pos - self.transformOffset self.importPos = self.basePosition + self.transformOffset
size = self.transformedDim.bounds.size
self.importBounds = BoundingBox(self.importPos, size)
@property @property
def importDim(self): def importDim(self):
@ -467,6 +468,8 @@ class PendingImport(QtCore.QObject):
self.transformedDim = DimensionTransform(selectionDim, self.rotateAnchor, *self.rotation) self.transformedDim = DimensionTransform(selectionDim, self.rotateAnchor, *self.rotation)
self.transformOffset = self.transformedDim.bounds.origin - self.selection.origin self.transformOffset = self.transformedDim.bounds.origin - self.selection.origin
self.updateImportPos()
def __repr__(self): def __repr__(self):
return "%s(%r, %r, %r)" % ( return "%s(%r, %r, %r)" % (
self.__class__.__name__, self.sourceDim, self.selection, self.basePosition) self.__class__.__name__, self.sourceDim, self.selection, self.basePosition)
@ -475,14 +478,6 @@ class PendingImport(QtCore.QObject):
def bounds(self): def bounds(self):
return BoundingBox(self.basePosition, self.selection.size) return BoundingBox(self.basePosition, self.selection.size)
@property
def importBounds(self):
if self.transformedDim is not None:
size = self.transformedDim.bounds.size
else:
size = self.selection.size
return BoundingBox(self.importPos, size)
class Rotate3DNode(Node): class Rotate3DNode(Node):
def __init__(self): def __init__(self):