diff --git a/qglview/glwidget.cpp b/qglview/glwidget.cpp index 94972ca..fbeab80 100644 --- a/qglview/glwidget.cpp +++ b/qglview/glwidget.cpp @@ -110,44 +110,12 @@ void GLWidget::addObject(GLObjectBase * 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(); + return view_->saveCamera(); } 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); + view_->restoreCamera(ba); } diff --git a/qglview/qglview.cpp b/qglview/qglview.cpp index ac184a8..088de1c 100644 --- a/qglview/qglview.cpp +++ b/qglview/qglview.cpp @@ -768,3 +768,46 @@ void QGLView::mouseDoubleClickEvent(QMouseEvent * e) { if (e->buttons().testFlag(Qt::MidButton)) emit doubleClick(); } + + +QByteArray QGLView::saveCamera() { + ChunkStream cs; + const Camera * c = 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 QGLView::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; + } + } + camera()->setPos(pos); + camera()->setAim(aim); + camera()->setAngles(ang); +} + diff --git a/qglview/qglview.h b/qglview/qglview.h index 845e776..0e3eed5 100644 --- a/qglview/qglview.h +++ b/qglview/qglview.h @@ -172,6 +172,9 @@ public: GLObjectBase * selectedObject() const {return sel_obj;} void glReleaseTextures(int channels = 8); + QByteArray saveCamera(); + void restoreCamera(const QByteArray & ba); + GLfloat aspect, iaspect; QMatrix4x4 cur_mvpm;