mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-18 16:08:11 +08:00
[UI][ADD] Add API in SceneViewer
- signals - onSelect - onUpdate - onHover - slots - setDragFlag - clearDragFlag - deleteObject
This commit is contained in:
parent
929fa790b1
commit
cad41559b1
@ -280,6 +280,7 @@ void SceneViewer::mouseReleaseEvent(QMouseEvent* event) {
|
|||||||
else {
|
else {
|
||||||
_selectedObject = _pressedObject;
|
_selectedObject = _pressedObject;
|
||||||
_hideBound = false;
|
_hideBound = false;
|
||||||
|
emit onSelect(_selectedObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset pressed object
|
// Reset pressed object
|
||||||
@ -314,6 +315,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
|
|||||||
_selectedObject->rotate(_camera.up(), delta.x * 0.01f);
|
_selectedObject->rotate(_camera.up(), delta.x * 0.01f);
|
||||||
// Rotate around camera right
|
// Rotate around camera right
|
||||||
_selectedObject->rotate(_camera.right(), delta.y * 0.01f);
|
_selectedObject->rotate(_camera.right(), delta.y * 0.01f);
|
||||||
|
emit onUpdate(_selectedObject);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -332,6 +334,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
|
|||||||
// Scale object
|
// Scale object
|
||||||
glm::vec2 delta = glm::vec2(event->x() - _lastMousePosition.x(), event->y() - _lastMousePosition.y());
|
glm::vec2 delta = glm::vec2(event->x() - _lastMousePosition.x(), event->y() - _lastMousePosition.y());
|
||||||
_selectedObject->scale(-delta.y * 0.01f);
|
_selectedObject->scale(-delta.y * 0.01f);
|
||||||
|
emit onUpdate(_selectedObject);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Set dragged
|
// Set dragged
|
||||||
@ -356,6 +359,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
moveOperatingObject(ray);
|
moveOperatingObject(ray);
|
||||||
|
emit onUpdate(_selectedObject);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -490,4 +494,29 @@ void SceneViewer::addObject(Model* model) {
|
|||||||
_operatingObject = newObject;
|
_operatingObject = newObject;
|
||||||
_objects.push_back(newObject);
|
_objects.push_back(newObject);
|
||||||
parentWidget()->update();
|
parentWidget()->update();
|
||||||
|
emit onSelect(_selectedObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SceneViewer::deleteObject() {
|
||||||
|
if (_selectedObject == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
makeCurrent();
|
||||||
|
for (auto it = _objects.begin(); it != _objects.end(); ++it) {
|
||||||
|
if (*it == _selectedObject) {
|
||||||
|
_objects.erase(it);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete _selectedObject;
|
||||||
|
if (_hoveredObject == _selectedObject) {
|
||||||
|
_hoveredObject = nullptr;
|
||||||
|
}
|
||||||
|
if (_pressedObject == _selectedObject) {
|
||||||
|
_pressedObject = nullptr;
|
||||||
|
}
|
||||||
|
_selectedObject = nullptr;
|
||||||
|
_operatingObject = nullptr;
|
||||||
|
emit onSelect(nullptr);
|
||||||
|
parentWidget()->update();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -86,6 +86,19 @@ protected:
|
|||||||
virtual void keyPressEvent(QKeyEvent* event) override;
|
virtual void keyPressEvent(QKeyEvent* event) override;
|
||||||
virtual void keyReleaseEvent(QKeyEvent* event) override;
|
virtual void keyReleaseEvent(QKeyEvent* event) override;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void setDragFlag() {
|
||||||
|
_hideBound = true;
|
||||||
|
parentWidget()->update();
|
||||||
|
}
|
||||||
|
void clearDragFlag() {
|
||||||
|
_hideBound = false;
|
||||||
|
if (_selectedObject != nullptr)
|
||||||
|
_selectedObject->updateBoundary();
|
||||||
|
parentWidget()->update();
|
||||||
|
}
|
||||||
|
void deleteObject();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void onHover(Renderable* object);
|
void onHover(Renderable* object);
|
||||||
void onSelect(Renderable* object);
|
void onSelect(Renderable* object);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user