#include #include "ProjectionModel.h" #include "Scene.h" #include "gui/QSceneViewerWindow.h" using namespace projection; using namespace gmtl; QSceneViewerWindow::QSceneViewerWindow(QWidget* pParent, const QGLWidget* pSharedWidget, Qt::WFlags flags) : QGLViewerWidget(pParent, pSharedWidget, flags|Qt::Window) { m_pModel = NULL; setWindowTitle("Scene Viewer"); setFocusPolicy(Qt::StrongFocus); resize(640, 480); } void QSceneViewerWindow::setModel(ProjectionModel* pModel) { m_pModel = pModel; setView(m_pModel->getScene()->getCameraCenter(), m_pModel->getScene()->getCameraRotation(), m_pModel->getScene()->getCameraDistance()); connect(this, SIGNAL(cameraChanged(const gmtl::Vec3f&, const gmtl::Quatf&, float)), m_pModel->getScene(), SLOT(setCameraViewpoint(const gmtl::Vec3f&, const gmtl::Quatf&, float))); } void QSceneViewerWindow::init() { } void QSceneViewerWindow::draw() { if (m_pModel) { m_pModel->setRenderContext(this); m_pModel->getScene()->draw(); m_bGridVisible = m_pModel->getScene()->getShowGrid(); m_gridSize = m_pModel->getScene()->getGridSize(); } } void QSceneViewerWindow::resetCamera() { setView(Vec3f(0.0f, 0.0f, 0.0f), Quatf(), 0.00001f); updateGL(); } void QSceneViewerWindow::keyReleaseEvent(QKeyEvent* pEvent) { QGLViewerWidget::keyReleaseEvent(pEvent); static bool bFullScreen = false; switch (pEvent->key()) { case Qt::Key_Return: if (pEvent->modifiers() & Qt::AltModifier) { if (!bFullScreen) { showFullScreen(); bFullScreen = true; } else { showNormal(); bFullScreen = false; } } break; default: return; } } void QSceneViewerWindow::initFromDOMElement(const QDomElement& element) { if (element.isNull()) return; QGLViewerWidget::initFromDOMElement(element); if (element.attribute("show")=="true") show(); else hide(); } QDomElement QSceneViewerWindow::domElement(const QString& name, QDomDocument& doc) const { QDomElement de = QGLViewerWidget::domElement(name, doc); if (isVisible()) de.setAttribute("show", "true"); else de.setAttribute("show", "false"); return de; }