summaryrefslogtreecommitdiffstats
path: root/editorlib/src/editorscene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editorlib/src/editorscene.cpp')
-rw-r--r--editorlib/src/editorscene.cpp46
1 files changed, 44 insertions, 2 deletions
diff --git a/editorlib/src/editorscene.cpp b/editorlib/src/editorscene.cpp
index 57d200d..689306f 100644
--- a/editorlib/src/editorscene.cpp
+++ b/editorlib/src/editorscene.cpp
@@ -559,7 +559,7 @@ void EditorScene::dragHandlePress(EditorScene::DragMode dragMode, const QPoint &
* m_selectedEntityTransform->scale3D()
/ selectedItem->selectionTransform()->scale3D()
: QVector3D();
- QVector3D snapPos = (selectedItem->selectionTransform()->matrix()
+ QVector3D snapPos = (selectedItem->unadjustedSelectionBoxMatrix()
* (m_dragHandleCornerAdjustments.at(i)
* QVector3D(0.5f, 0.5f, 0.5f) + centerHandleAdj));
snapPos -= selectedItem->selectionBoxCenter();
@@ -2032,6 +2032,39 @@ QVector3D EditorScene::getMultiSelectionCenter()
return m_selectedEntityNameList.size() ? (pos / m_selectedEntityNameList.size()) : QVector3D();
}
+void EditorScene::updateWorldPositionLabel(int xPos, int yPos)
+{
+ updateWorldPositionLabel(getWorldPosition(xPos,yPos));
+}
+
+void EditorScene::updateWorldPositionLabelToDragHandle(EditorScene::DragMode dragMode,
+ int handleIndex)
+{
+ // All handles show actual handle position
+ QMatrix4x4 matrix = m_dragHandlesTransform->matrix();
+ switch (dragMode) {
+ case EditorScene::DragTranslate:
+ if (handleIndex > 0)
+ matrix *= m_dragHandleTranslateTransform->matrix();
+ break;
+ case EditorScene::DragRotate:
+ matrix *= m_dragHandleRotateTransform->matrix();
+ break;
+ case EditorScene::DragScale:
+ matrix *= m_dragHandleScaleTransforms.at(handleIndex)->matrix();
+ break;
+ }
+
+ updateWorldPositionLabel(matrix * QVector3D());
+}
+
+void EditorScene::updateWorldPositionLabel(const QVector3D &worldPos)
+{
+ emit worldPositionLabelUpdate(QString::number(qreal(worldPos.x()), 'f', 2),
+ QString::number(qreal(worldPos.y()), 'f', 2),
+ QString::number(qreal(worldPos.z()), 'f', 2));
+}
+
void EditorScene::addEntityToMultiSelection(const QString &name)
{
const int oldSize = m_selectedEntityNameList.size();
@@ -2242,7 +2275,7 @@ void EditorScene::handleSelectionTransformChange()
m_dragHandlesTransform->setTranslation(item->selectionBoxCenter());
m_dragHandlesTransform->setRotation(item->selectionTransform()->rotation());
- QVector3D translation = (item->selectionBoxExtents() / 2.0f);
+ QVector3D translation = (item->unadjustedSelectionBoxExtents() / 2.0f);
// m_dragHandleTranslateTransform indicates the mesh center position in drag handles
// coordinates, i.e. the position of the secondary translate handle.
@@ -2451,6 +2484,7 @@ bool EditorScene::handleMousePress(QMouseEvent *event)
if (m_mouseButton == Qt::LeftButton)
m_ctrlDownOnLastLeftPress = event->modifiers() & Qt::ControlModifier;
cancelDrag();
+ updateWorldPositionLabel(event->pos().x(), event->pos().y());
return false; // Never consume press event
}
@@ -2463,6 +2497,7 @@ bool EditorScene::handleMouseRelease(QMouseEvent *event)
}
m_cameraViewCenterSelected = false;
cancelDrag();
+ updateWorldPositionLabel(event->pos().x(), event->pos().y());
return false; // Never consume release event
}
@@ -2471,6 +2506,13 @@ bool EditorScene::handleMouseMove(QMouseEvent *event)
dragHandleMove(event->pos(), event->modifiers() & Qt::ShiftModifier,
event->modifiers() & Qt::ControlModifier,
event->modifiers() & Qt::AltModifier);
+
+ if (m_dragMode != DragNone) {
+ // Selection dragging updates world position label to mesh center while dragging
+ updateWorldPositionLabelToDragHandle(EditorScene::DragTranslate, 1);
+ } else {
+ updateWorldPositionLabel(event->pos().x(), event->pos().y());
+ }
return (m_dragMode != DragNone);
}