Skip to content
Snippets Groups Projects
Commit aabb86bb authored by ganthern's avatar ganthern
Browse files

add mouse wheel zoom

parent 16ae08e7
No related branches found
No related tags found
No related merge requests found
#include "CgWheelEvent.h"
CgWheelEvent::CgWheelEvent(Cg::EventType type, float numDegrees)
{
m_type=type;
m_numDegrees = numDegrees;
}
CgWheelEvent::~CgWheelEvent()
{
}
Cg::EventType CgWheelEvent::getType()
{
return m_type;
}
CgBaseEvent* CgWheelEvent::clone()
{
return new CgWheelEvent(m_type,m_numDegrees);
}
std::ostream& operator<<(std::ostream& os,const CgWheelEvent& e)
{
os << "Wheel-Event of Type: "<< e.m_type <<", Amount: " << e.numDegrees();
return os;
}
float CgWheelEvent::numDegrees() const
{
return m_numDegrees;
}
#ifndef CGWHEELEVENT
#define CGWHEELEVENT
#include "../CgBase/CgBaseEvent.h"
#include "glm/glm.hpp"
#include <iostream>
class CgWheelEvent: public CgBaseEvent
{
public:
CgWheelEvent(Cg::EventType type, float numDegrees);
~CgWheelEvent();
Cg::EventType getType();
CgBaseEvent* clone();
float numDegrees() const;
friend std::ostream& operator <<(std::ostream& os, const CgWheelEvent& e);
private:
Cg::EventType m_type;
float m_numDegrees;
};
#endif // CGWHEELEVENT
\ No newline at end of file
......@@ -12,6 +12,7 @@
#include "../CgEvents/CgTrackballEvent.h"
#include "../CgEvents/CgSplatEvent.h"
#include "../CgEvents/CgPickRayEvent.h"
#include "../CgEvents/CgWheelEvent.h"
#include <QSlider>
#include <QVBoxLayout>
......@@ -355,6 +356,12 @@ void CgQtGui::mouseEvent(QMouseEvent* event)
}
void CgQtGui::wheelEvent(QWheelEvent* event)
{
CgBaseEvent* e = new CgWheelEvent(Cg::CgMouseWheel, event->angleDelta().y() / 8.0);
notifyObserver(e);
}
void CgQtGui::keyPressEvent(QKeyEvent *event)
{
CgBaseEvent* e= new CgKeyEvent(Cg::CgKeyPressEvent,(Cg::Key)event->key(),(Cg::KeyboardModifiers)event->nativeModifiers(),event->text().toStdString());
......
......@@ -113,6 +113,7 @@ private slots:
/* slots to catch events directly from renderer */
void mouseEvent(QMouseEvent* event);
void wheelEvent(QWheelEvent* event);
void viewportChanged(int,int);
void slotTrackballChanged();
......
......@@ -3,6 +3,7 @@
#include "CgSceneControl.h"
#include "CgBase/CgEnums.h"
#include "CgEvents/CgMouseEvent.h"
#include "CgEvents/CgWheelEvent.h"
#include "CgEvents/CgKeyEvent.h"
#include "CgEvents/CgWindowResizeEvent.h"
#include "CgEvents/CgLoadMeshEvent.h"
......@@ -170,6 +171,17 @@ void CgSceneControl::handleEvent(CgBaseEvent* e)
calculatePickRay((double)ev->x(),(double)ev->y());
}
if(e->getType() & Cg::CgMouseWheel)
{
CgWheelEvent* ev = (CgWheelEvent*)e;
//scaling of scene, i.e. of the one single object
float scaleFactor = 1.0f + 0.01f * ev->numDegrees();
glm::mat4 scalemat = glm::mat4(1.);
scalemat = glm::scale(scalemat, glm::vec3(scaleFactor,scaleFactor,scaleFactor));
m_current_transformation = m_current_transformation * scalemat;
m_renderer->redraw();
}
if(e->getType() & Cg::CgTrackballEvent)
{
CgTrackballEvent* ev = (CgTrackballEvent*)e;
......@@ -307,8 +319,6 @@ void CgSceneControl::handleEvent(CgBaseEvent* e)
// delete event
delete e;
}
......
......@@ -14,6 +14,7 @@ SOURCES += main.cpp \
CgQtViewer/CgQtGui.cpp \
CgBase/CgObservable.cpp \
CgEvents/CgMouseEvent.cpp \
CgEvents/CgWheelEvent.cpp \
CgQtViewer/CgQtMainApplication.cpp \
CgSceneGraph/CgPointCloud.cpp \
CgSceneGraph/CgPolyLine.cpp \
......@@ -42,6 +43,7 @@ HEADERS += \
CgBase/CgBaseEvent.h \
CgBase/CgEnums.h \
CgEvents/CgMouseEvent.h \
CgEvents/CgWheelEvent.h \
CgQtViewer/CgQtMainApplication.h \
CgSceneGraph/CgPointCloud.h \
CgSceneGraph/CgPolyLine.h \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment