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();