Cache some computed points and bounds instead of computing them in properties
This commit is contained in:
parent
8c02496a43
commit
cca9ed3a47
@ -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):
|
||||||
|
Reference in New Issue
Block a user