[UI][ADD] Add API in SceneViewer

- signals
  - onSelect
  - onUpdate
  - onHover
- slots
  - setDragFlag
  - clearDragFlag
  - deleteObject
This commit is contained in:
Linloir 2022-12-19 17:08:24 +08:00
parent 929fa790b1
commit cad41559b1
No known key found for this signature in database
GPG Key ID: 58EEB209A0F2C366
2 changed files with 42 additions and 0 deletions

View File

@ -280,6 +280,7 @@ void SceneViewer::mouseReleaseEvent(QMouseEvent* event) {
else {
_selectedObject = _pressedObject;
_hideBound = false;
emit onSelect(_selectedObject);
}
// Reset pressed object
@ -314,6 +315,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
_selectedObject->rotate(_camera.up(), delta.x * 0.01f);
// Rotate around camera right
_selectedObject->rotate(_camera.right(), delta.y * 0.01f);
emit onUpdate(_selectedObject);
}
break;
}
@ -332,6 +334,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
// Scale object
glm::vec2 delta = glm::vec2(event->x() - _lastMousePosition.x(), event->y() - _lastMousePosition.y());
_selectedObject->scale(-delta.y * 0.01f);
emit onUpdate(_selectedObject);
}
else {
// Set dragged
@ -356,6 +359,7 @@ void SceneViewer::mouseMoveEvent(QMouseEvent* event) {
}
else {
moveOperatingObject(ray);
emit onUpdate(_selectedObject);
}
break;
}
@ -490,4 +494,29 @@ void SceneViewer::addObject(Model* model) {
_operatingObject = newObject;
_objects.push_back(newObject);
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();
}

View File

@ -86,6 +86,19 @@ protected:
virtual void keyPressEvent(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:
void onHover(Renderable* object);
void onSelect(Renderable* object);