Fix scale-rotate ROI handler to allow to use a random scale axis and not only x/y
The code relative to scaleSnap is maybe broken
This commit is contained in:
parent
1044a7b6c4
commit
9456d07ae8
@ -572,8 +572,6 @@ class ROI(GraphicsObject):
|
|||||||
"""
|
"""
|
||||||
pos = Point(pos)
|
pos = Point(pos)
|
||||||
center = Point(center)
|
center = Point(center)
|
||||||
if pos[0] != center[0] and pos[1] != center[1]:
|
|
||||||
raise Exception("Scale/rotate handles must have either the same x or y coordinate as their center point.")
|
|
||||||
return self.addHandle({'name': name, 'type': 'sr', 'center': center, 'pos': pos, 'item': item}, index=index)
|
return self.addHandle({'name': name, 'type': 'sr', 'center': center, 'pos': pos, 'item': item}, index=index)
|
||||||
|
|
||||||
def addRotateFreeHandle(self, pos, center, axes=None, item=None, name=None, index=None):
|
def addRotateFreeHandle(self, pos, center, axes=None, item=None, name=None, index=None):
|
||||||
@ -952,13 +950,6 @@ class ROI(GraphicsObject):
|
|||||||
h['pos'] = self.mapFromParent(p1)
|
h['pos'] = self.mapFromParent(p1)
|
||||||
|
|
||||||
elif h['type'] == 'sr':
|
elif h['type'] == 'sr':
|
||||||
if h['center'][0] == h['pos'][0]:
|
|
||||||
scaleAxis = 1
|
|
||||||
nonScaleAxis=0
|
|
||||||
else:
|
|
||||||
scaleAxis = 0
|
|
||||||
nonScaleAxis=1
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if lp1.length() == 0 or lp0.length() == 0:
|
if lp1.length() == 0 or lp0.length() == 0:
|
||||||
return
|
return
|
||||||
@ -971,15 +962,19 @@ class ROI(GraphicsObject):
|
|||||||
if self.rotateSnap or (modifiers & QtCore.Qt.ControlModifier):
|
if self.rotateSnap or (modifiers & QtCore.Qt.ControlModifier):
|
||||||
ang = round(ang / self.rotateSnapAngle) * self.rotateSnapAngle
|
ang = round(ang / self.rotateSnapAngle) * self.rotateSnapAngle
|
||||||
|
|
||||||
hs = abs(h['pos'][scaleAxis] - c[scaleAxis])
|
newState['size'][0] = self.state['size'][0] * lp1.length() / lp0.length()
|
||||||
newState['size'][scaleAxis] = lp1.length() / hs
|
newState['size'][1] = self.state['size'][1] * lp1.length() / lp0.length()
|
||||||
#if self.scaleSnap or (modifiers & QtCore.Qt.ControlModifier):
|
#if self.scaleSnap or (modifiers & QtCore.Qt.ControlModifier):
|
||||||
if self.scaleSnap: ## use CTRL only for angular snap here.
|
if self.scaleSnap: ## use CTRL only for angular snap here.
|
||||||
newState['size'][scaleAxis] = round(newState['size'][scaleAxis] / self.snapSize) * self.snapSize
|
newState['size'][0] = round(newState['size'][0] / self.snapSize) * self.snapSize
|
||||||
if newState['size'][scaleAxis] == 0:
|
newState['size'][1] = round(newState['size'][1] / self.snapSize) * self.snapSize
|
||||||
newState['size'][scaleAxis] = 1
|
if newState['size'][0] == 0:
|
||||||
if self.aspectLocked:
|
newState['size'][0] = 1
|
||||||
newState['size'][nonScaleAxis] = newState['size'][scaleAxis]
|
if newState['size'][1] == 0:
|
||||||
|
newState['size'][1] = 1
|
||||||
|
# MC TODO what about this:
|
||||||
|
# if self.aspectLocked:
|
||||||
|
# newState['size'][nonScaleAxis] = newState['size'][scaleAxis]
|
||||||
|
|
||||||
c1 = c * newState['size']
|
c1 = c * newState['size']
|
||||||
tr = QtGui.QTransform()
|
tr = QtGui.QTransform()
|
||||||
|
Loading…
Reference in New Issue
Block a user