From 959ad3f722d02c584a0af61dec7f50f77b43dd2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Thu, 1 Aug 2019 12:10:36 +0000 Subject: [PATCH] add save/restore camera to glwidget git-svn-id: svn://db.shs.com.ru/libs@581 a8b55f48-bf90-11e4-a774-851b48703e85 --- qglview/glwidget.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++- qglview/glwidget.h | 2 ++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/qglview/glwidget.cpp b/qglview/glwidget.cpp index ab09a45..94972ca 100644 --- a/qglview/glwidget.cpp +++ b/qglview/glwidget.cpp @@ -105,7 +105,49 @@ qreal GLWidget::selectionHaloFillAlpha() const { void GLWidget::addObject(GLObjectBase * o) { - view_->addObject(o); + view_->addObject(o); +} + + +QByteArray GLWidget::saveCamera() { + ChunkStream cs; + const Camera * c = view()->camera(); + cs.add(1, c->posX()); + cs.add(2, c->posY()); + cs.add(3, c->posZ()); + cs.add(4, c->aim().x()); + cs.add(5, c->aim().y()); + cs.add(6, c->aim().z()); + cs.add(7, c->angleZ()); + cs.add(8, c->angleXY()); + cs.add(9, c->angleRoll()); + cs.add(10, c->FOV()); + return cs.data(); +} + + +void GLWidget::restoreCamera(const QByteArray &ba) { + if (ba.isEmpty()) return; + ChunkStream cs(ba); + QVector3D pos, aim, ang; + while (!cs.atEnd()) { + switch (cs.read()) { + case 1: pos.setX(cs.getData()); break; + case 2: pos.setY(cs.getData()); break; + case 3: pos.setZ(cs.getData()); break; + case 4: aim.setX(cs.getData()); break; + case 5: aim.setY(cs.getData()); break; + case 6: aim.setZ(cs.getData()); break; + case 7: ang.setZ(cs.getData()); break; + case 8: ang.setY(cs.getData()); break; + case 9: ang.setX(cs.getData()); break; + case 10: setFOV(cs.getData()); break; + default: break; + } + } + view()->camera()->setPos(pos); + view()->camera()->setAim(aim); + view()->camera()->setAngles(ang); } diff --git a/qglview/glwidget.h b/qglview/glwidget.h index 04a0ae6..87eb6f1 100644 --- a/qglview/glwidget.h +++ b/qglview/glwidget.h @@ -50,6 +50,8 @@ public: qreal selectionHaloFillAlpha() const; void addObject(GLObjectBase * o); + QByteArray saveCamera(); + void restoreCamera(const QByteArray & ba); public slots: void stop();