Move tool and coord widget now support relative offsets

This commit is contained in:
David Vierra 2015-10-20 11:30:10 -10:00
parent a5801f1034
commit af6a72a76e
3 changed files with 85 additions and 53 deletions

View File

@ -146,6 +146,7 @@ class MoveTool(EditorTool):
if newPoint != oldPoint:
command = MoveOffsetCommand(oldPoint, newPoint, self.currentImport)
self.editorSession.pushCommand(command)
self.pointInput.point = newPoint
@property
def currentImport(self):
@ -168,6 +169,8 @@ class MoveTool(EditorTool):
self._currentImportNode = node
self.overlayNode.addChild(node)
self.rotationInput.rotation = pendingImport.rotation
self.pointInput.point = pendingImport.basePosition
self.pointInput.origin = pendingImport.selection.origin
@property
def currentImportNode(self):

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>293</width>
<height>92</height>
<width>121</width>
<height>115</height>
</rect>
</property>
<property name="sizePolicy">
@ -23,6 +23,20 @@
<item>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1">
<item row="0" column="1">
<widget class="QCheckBox" name="relativeCheckBox">
<property name="text">
<string>Relative</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>X:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="xInput">
<property name="minimum">
<number>-2000000000</number>
@ -32,31 +46,14 @@
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>X:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Z:</string>
<string>Y:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="zInput">
<property name="minimum">
<number>-2000000000</number>
</property>
<property name="maximum">
<number>2000000000</number>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="yInput">
<property name="minimum">
<number>-2000000000</number>
@ -66,33 +63,28 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Y:</string>
<string>Z:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="zInput">
<property name="minimum">
<number>-2000000000</number>
</property>
<property name="maximum">
<number>2000000000</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
<zorder>xInput</zorder>
<zorder>xMaxInput</zorder>
<zorder>label</zorder>
<zorder>label_2</zorder>
<zorder>yInput</zorder>
<zorder>yMaxInput</zorder>
<zorder>zMaxInput</zorder>
<zorder>zInput</zorder>
<zorder>label_3</zorder>
<zorder>stackedWidget</zorder>
<zorder></zorder>
<zorder>zMaxInput</zorder>
<zorder>yMaxInput</zorder>
<zorder>xMaxInput</zorder>
<zorder>widthLabel</zorder>
<zorder>heightLabel</zorder>
<zorder>lengthLabel</zorder>
<zorder>relativeCheckBox</zorder>
</widget>
<resources/>
<connections/>

View File

@ -20,9 +20,38 @@ class CoordinateWidget(QtGui.QWidget):
self.yInput.valueChanged.connect(self.setY)
self.zInput.valueChanged.connect(self.setZ)
self.relativeCheckBox.toggled.connect(self.relativeToggled)
pointChanged = QtCore.Signal(BoundingBox)
_point = Vector(0, 0, 0)
_origin = Vector(0, 0, 0)
_relative = False
def relativeToggled(self, enabled):
self._relative = enabled
self.updateInputs()
def updateInputs(self):
if self._relative:
displayed = self._point - self._origin
else:
displayed = self._point
x, y, z = displayed
self.xInput.setValue(x)
self.yInput.setValue(y)
self.zInput.setValue(z)
@property
def origin(self):
return self._origin
@origin.setter
def origin(self, value):
value = Vector(*value)
if value != self._origin:
self._origin = value
@property
def point(self):
@ -31,23 +60,31 @@ class CoordinateWidget(QtGui.QWidget):
@point.setter
def point(self, point):
self.setEnabled(point is not None)
self._point = point
if point is not None:
x, y, z = point
self.xInput.setValue(x)
self.yInput.setValue(y)
self.zInput.setValue(z)
point = Vector(*point)
if self._point != point:
self._point = point
if point is not None:
self.updateInputs()
self.pointChanged.emit(point)
self.pointChanged.emit(point)
def setX(self, value):
x, y, z = self.point
self.point = Vector(value, y, z)
self.setCoord(value, 0)
def setY(self, value):
x, y, z = self.point
self.point = Vector(x, value, z)
self.setCoord(value, 1)
def setZ(self, value):
x, y, z = self.point
self.point = Vector(x, y, value)
self.setCoord(value, 2)
def setCoord(self, value, index):
old = self.point
if self._relative:
old = old - self._origin
new = list(old)
new[index] = value
new = Vector(*new)
if self._relative:
new = new + self._origin
self.point = new