📄 onmouse.cc
字号:
#include "monitorglcanvas.hh"#include "vector3.hh"#include "monitorframe.hh"using namespace bats;void MonitorGLCanvas::OnMouse(wxMouseEvent& event){ Vector3D oldPos = ((MonitorFrame*)GetParent())->getCamPos(); Vector3D lookAt = ((MonitorFrame*)GetParent())->getCamLookAt(); Vector3D up = ((MonitorFrame*)GetParent())->getCamUp(); if (event.GetWheelRotation() != 0) { // Move cam in the direction we are looking at double delta = (oldPos[2]) / 100.0 * 5.0 * (event.GetWheelRotation() >= 0 ? 1 : -1); Vector3D newPos = oldPos + (lookAt - oldPos).normalize() * delta; if (newPos[2] > 0.5 && newPos[2] < 200.0) ((MonitorFrame*)GetParent())->moveCamPosTo(newPos); } if (event.ButtonDown()) { cerr << "Clicky! " << event.GetX() << " " << event.GetY() << endl; d_lastX = event.GetX(); d_lastY = event.GetY(); } if (event.Dragging() && event.LeftIsDown()) { int newX = event.GetX(); int newY = event.GetY(); // Strafe left/right Vector3D tmp = lookAt - oldPos; double meterPerPixel = 2 * tmp.length() / GetSize().GetWidth(); Vector3D strafe = tmp.crossProduct(up).normalize() * (newX - d_lastX) * meterPerPixel; Vector3D newPos = oldPos - strafe; Vector3D newLookAt = lookAt - strafe; if (newPos[2] > 0.5 && newPos[2] < 200.0) { ((MonitorFrame*)GetParent())->moveCamPosTo(newPos); ((MonitorFrame*)GetParent())->moveCamLookAtTo(newLookAt); } // Strafe up/down strafe = up.normalize() * (newY - d_lastY) * meterPerPixel; newPos = newPos + strafe; newLookAt = newLookAt + strafe; if (newPos[2] > 0.5 && newPos[2] < 200.0) { ((MonitorFrame*)GetParent())->moveCamPosTo(newPos); ((MonitorFrame*)GetParent())->moveCamLookAtTo(newLookAt); } d_lastX = newX; d_lastY = newY; } if (event.Dragging() && event.RightIsDown()) { int newX = event.GetX(); int newY = event.GetY(); // Strafe left/right Vector3D tmp = lookAt - oldPos; double meterPerPixel = 2 * tmp.length() / GetSize().GetWidth(); Vector3D strafe = tmp.crossProduct(up).normalize() * (newX - d_lastX) * meterPerPixel; Vector3D newPos = oldPos - strafe; if (newPos[2] > 0.5 && newPos[2] < 200.0) { ((MonitorFrame*)GetParent())->moveCamPosTo(newPos); } // Strafe up/down strafe = up.normalize() * (newY - d_lastY) * meterPerPixel; newPos = newPos + strafe; if (newPos[2] > 0.5 && newPos[2] < 200.0) { ((MonitorFrame*)GetParent())->moveCamPosTo(newPos); } d_lastX = newX; d_lastY = newY; } ((MonitorFrame*)GetParent())->resetCamUp(); wxCommandEvent refreshEvent(wxDO_REFRESH_EVT, -1); wxPostEvent(GetParent(), refreshEvent);// wxCommandEvent e;// paintGL(e);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -