Create rotation input widget in preparation for live rotation.

This commit is contained in:
David Vierra 2015-10-01 17:11:48 -10:00
parent f5c860f342
commit a91d6b3441
2 changed files with 203 additions and 1 deletions

View File

@ -4,7 +4,7 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import logging import logging
from PySide import QtGui from PySide import QtGui, QtCore
from PySide.QtCore import Qt from PySide.QtCore import Qt
from mcedit2.editorsession import PendingImport from mcedit2.editorsession import PendingImport
@ -15,6 +15,7 @@ from mcedit2.rendering.selection import SelectionBoxNode, SelectionFaceNode, box
from mcedit2.rendering.scenegraph import scenenode from mcedit2.rendering.scenegraph import scenenode
from mcedit2.rendering.depths import DepthOffset from mcedit2.rendering.depths import DepthOffset
from mcedit2.rendering.worldscene import WorldScene from mcedit2.rendering.worldscene import WorldScene
from mcedit2.util.load_ui import load_ui
from mcedit2.util.showprogress import showProgress from mcedit2.util.showprogress import showProgress
from mcedit2.util.worldloader import WorldLoader from mcedit2.util.worldloader import WorldLoader
from mcedit2.widgets.coord_widget import CoordinateWidget from mcedit2.widgets.coord_widget import CoordinateWidget
@ -127,6 +128,59 @@ class PendingImportNode(TranslateNode):
else: else:
self.faceHoverNode.visible = False self.faceHoverNode.visible = False
class RotationWidget(QtGui.QWidget):
def __init__(self):
super(RotationWidget, self).__init__()
load_ui("rotation_widget.ui", baseinstance=self)
self.xRotSlider.valueChanged.connect(self.setXRot)
self.yRotSlider.valueChanged.connect(self.setYRot)
self.zRotSlider.valueChanged.connect(self.setZRot)
self.xRotSpinBox.valueChanged.connect(self.setXRot)
self.yRotSpinBox.valueChanged.connect(self.setYRot)
self.zRotSpinBox.valueChanged.connect(self.setZRot)
self.xRot = self.yRot = self.zRot = 0
rotationChanged = QtCore.Signal(object, bool)
def emitRotationChanged(self, live):
self.rotationChanged.emit((self.xRot, self.yRot, self.zRot), live)
def setXRot(self, value):
if self.xRot == value:
return
self.xRot = value
self.xRotSlider.setValue(value)
self.xRotSpinBox.setValue(value)
self.emitRotationChanged(self.xRotSlider.isSliderDown())
def setYRot(self, value):
if self.yRot == value:
return
self.yRot = value
self.yRotSlider.setValue(value)
self.yRotSpinBox.setValue(value)
self.emitRotationChanged(self.yRotSlider.isSliderDown())
def setZRot(self, value):
if self.zRot == value:
return
self.zRot = value
self.zRotSlider.setValue(value)
self.zRotSpinBox.setValue(value)
self.emitRotationChanged(self.zRotSlider.isSliderDown())
class MoveTool(EditorTool): class MoveTool(EditorTool):
iconName = "move" iconName = "move"
name = "Move" name = "Move"
@ -152,14 +206,23 @@ class MoveTool(EditorTool):
self.pointInput = CoordinateWidget() self.pointInput = CoordinateWidget()
self.pointInput.pointChanged.connect(self.pointInputChanged) self.pointInput.pointChanged.connect(self.pointInputChanged)
self.rotationInput = RotationWidget()
self.rotationInput.rotationChanged.connect(self.rotationChanged)
confirmButton = QtGui.QPushButton("Confirm") # xxxx should be in worldview confirmButton = QtGui.QPushButton("Confirm") # xxxx should be in worldview
confirmButton.clicked.connect(self.confirmImport) confirmButton.clicked.connect(self.confirmImport)
self.toolWidget.setLayout(Column(self.importsListWidget, self.toolWidget.setLayout(Column(self.importsListWidget,
self.pointInput, self.pointInput,
self.rotationInput,
confirmButton, confirmButton,
None)) None))
def rotationChanged(self, rots):
rotX, rotY, rotZ = rots
log.info("Rotations: %s", rots)
@property @property
def movePosition(self): def movePosition(self):
return None if self.currentImport is None else self.currentImport.pos return None if self.currentImport is None else self.currentImport.pos

View File

@ -0,0 +1,139 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>374</width>
<height>99</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Rot X:</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="xRotSlider">
<property name="maximum">
<number>359</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="xRotSpinBox">
<property name="maximum">
<number>359</number>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="xRot90Button">
<property name="text">
<string>Rot90</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Rot Y:</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="yRotSlider">
<property name="maximum">
<number>359</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="yRotSpinBox">
<property name="maximum">
<number>359</number>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="yRot90Button">
<property name="text">
<string>Rot90</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Rot Z:</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="zRotSlider">
<property name="maximum">
<number>359</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="zRotSpinBox">
<property name="maximum">
<number>359</number>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="zRot90Button">
<property name="text">
<string>Rot90</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>