00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
#ifndef __QGLVIEWER_H_
00035
#define __QGLVIEWER_H_
00036
00037
00038
00040
#include <qgl.h>
00041
#include <qframe.h>
00042
#include <qpopupmenu.h>
00043
#include <qpoint.h>
00044
#include <qbitmap.h>
00045
00046
00047
00049
#include <stdlib.h>
00050
#if _MSC_VER >= 1300
00051
#include <iostream>
00052
#else
00053
#include <iostream.h>
00054
#endif
00055
00056
00057
00059
#include "QGLSignalWidget.h"
00060
#include "CCamera.h"
00061
#include "CBoundingBox3D.h"
00062
00063
00064
00066
class QHBoxLayout;
00067
class QFrame;
00068
class QCursor;
00069
class QIconSet;
00070
class QPixmap;
00071
class QStereoCtrl;
00072
00073
00074
00075
#if QT_VERSION < 300
00076 #define Q_CHECK_PTR CHECK_PTR
00077
#endif
00078
00079
00081
00090 class QGLViewer:
public QFrame {
00091 Q_OBJECT
00092
00093
public:
00095
00097
00098
00100 enum ProjectionMode {
00101
parallel,
00102
perspective
00103 };
00104
00106 enum CameraType {
00107
CurrentCam = 1,
00108
HomeCam = 2,
00109
BothCams = 3
00110 };
00111
00113 enum StereoMode {
00114
STEREO_ON,
00115
STEREO_OFF,
00116
STEREO_SIMULATE
00117 };
00123 enum StereoBuffer {
00124
MONO,
00125
STEREO_LEFT,
00126
STEREO_RIGHT
00127 };
00128
00130
00132
00133
00137
QGLViewer(QWidget * parent=0,
00138
const char * name=0,
const QGLWidget * shareWidget = 0,
00139 WFlags f=0,
bool viewertype=
true,
00140
const QGLFormat &format=QGLFormat::defaultFormat());
00141
00146
QGLViewer(
const CCamera &homecam, QWidget * parent=0,
00147
const char * name=0,
const QGLWidget * shareWidget = 0,
00148 WFlags f=0,
bool viewertype=
true,
00149
const QGLFormat &format=QGLFormat::defaultFormat());
00150
00151
00156
QGLViewer(
const CBoundingBox3D &bbox, QWidget * parent=0,
00157
const char * name=0,
const QGLWidget * shareWidget = 0,
00158 WFlags f=0,
bool viewertype=
true,
00159
const QGLFormat &format=QGLFormat::defaultFormat());
00160
00161
00165 virtual ~QGLViewer() {};
00166
00167
00171
void setRefreshRate(
int nFramesPerSecond);
00172
00174 int getRefreshRate() {
return m_nRefreshRate; };
00175
00183
virtual void setBoundingBox(
const CBoundingBox3D &cBBox,
bool fUpdate=
false);
00184
00188
virtual void setCamera(
const CCamera &cCamera, CameraType which=CurrentCam);
00189
00193 CCamera&
getCamera() {
return m_cCurrentCamera; };
00194
00198 CCamera *
getCameraPtr() {
return &
m_cCurrentCamera; };
00199
00203 virtual ProjectionMode getProjectionMode() {
00204
return (
m_cCurrentCamera.
getCameraType() == CCamera::orthographic) ?
parallel :
perspective;
00205 };
00206
00214 virtual void setFullViewer(
bool state) {
00215
m_fFullViewer = state;
00216 };
00217
00222 bool isFullViewer() {
return m_fFullViewer; };
00223
00227 QGLSignalWidget *
getDrawArea() {
00228
return m_pQGLWidget;
00229 };
00230
00234 void makeCurrent() {
00235
m_pQGLWidget->makeCurrent();
00236 }
00237
00242 virtual void enableMouseEvents(
bool fFlag) {
00243
m_fHandleMouseEvents = fFlag;
00244 };
00245
00249 GLenum
getRenderMode() {
00250
return m_eRenderMode;
00251 }
00252
00256 QPopupMenu *
getMainMenu() {
return m_pqPopupMenu; };
00257
00261 int insertItem(
const QString &text,
const QObject *receiver,
const char *member) {
00262
return m_pqPopupMenu->insertItem(text, receiver, member);
00263 };
00264
00268 int insertItem(
const QIconSet &icon,
const QString &text,
const QObject *receiver,
const char *member) {
00269
return m_pqPopupMenu->insertItem(icon, text, receiver, member);
00270 };
00271
00275 int insertItem(
const QPixmap &pixmap,
const QString &text,
const QObject *receiver,
const char *member) {
00276
return m_pqPopupMenu->insertItem(pixmap, text, receiver, member);
00277 };
00278
00282 int insertItem(
const QString &text, QPopupMenu *pqPopup) {
00283
return m_pqPopupMenu->insertItem(text, pqPopup);
00284 };
00285
00289 int insertItem(
const QPixmap &pixmap, QPopupMenu *pqPopup) {
00290
return m_pqPopupMenu->insertItem(pixmap, pqPopup);
00291 };
00292
00297 bool isItemEnabled(
int nID) {
return m_pqPopupMenu->isItemEnabled(nID); };
00298
00303 void setItemEnabled(
int nID,
bool fEnable) {
m_pqPopupMenu->setItemEnabled(nID, fEnable); };
00304
00309 bool isItemChecked(
int nID) {
return m_pqPopupMenu->isItemChecked(nID); };
00310
00315 void setItemChecked(
int nID,
bool fCheck) {
m_pqPopupMenu->setItemChecked(nID, fCheck); };
00316
00324 void allowStereoSimulation(
bool flag ) {
m_fAllowStereoSimulation = flag; }
00325
00330 StereoMode getStereoMode() {
return m_stereoMode; }
00331
00332
00333
public slots:
00335
00337
00342 virtual void sltUpdateView() {
00343
m_fRefresh =
true;
00344 };
00345
00350
virtual void sltToggleStereo();
00351
00356
virtual void sltViewAll();
00357
00358 signals:
00360
00362
00366
void sigProjModeToggled();
00367
00373
void sigRenderModeChanged();
00374
00384
void sigSelected(QMouseEvent *pqEvent);
00385
00392
void sigReleased(QMouseEvent *pqEvent);
00393
00400
void sigMoved(QMouseEvent *pqEvent);
00401
00408
void sigInitGL();
00409
00415
void sigRedrawGL();
00416
00423
void sigResizeGL(
int nWidth,
int nHeight);
00424
00430
void sigRatioChanged(
double rdRatio);
00431
00437
void sigFovyChanged(
double rdFovy);
00438
00439
00440
00441
protected slots:
00443
00445
00446
00450
virtual void sltSetProjectionMode();
00451
00456
virtual void sltSetHome();
00457
00461
virtual void sltGoHome();
00462
00466
virtual void sltToggleProjectionMode();
00467
00472
virtual void sltToggleRenderMode();
00473
00479
virtual void sltManageDrop(QDropEvent *pqEvent);
00480
00486
virtual void sltManageDragEnter(QDragEnterEvent *pqEvent);
00487
00492
virtual void sltManageDragLeave(QDragLeaveEvent *pqEvent);
00493
00494
00495
private slots:
00497
00499
00500
00506
void sltResizeGL(
int w,
int h);
00507
00513
void sltPaintGL();
00514
00518 void sltSwitchMousePress(QMouseEvent *event) {
00519
if (
m_eRenderMode == GL_SELECT) {
00520 emit(sigSelected(event));
00521 }
00522
else {
00523
if (
m_fHandleMouseEvents)
00524
ManageMousePress(event);
00525 }
00526 };
00527
00531 void sltSwitchMouseRelease(QMouseEvent *event) {
00532
if (
m_eRenderMode == GL_SELECT) {
00533 emit(sigReleased(event));
00534 }
00535
else {
00536
if (
m_fHandleMouseEvents)
00537
ManageMouseRelease(event);
00538 }
00539 };
00540
00544 void sltSwitchMouseMove(QMouseEvent *event) {
00545
if (
m_eRenderMode == GL_SELECT) {
00546 emit(sigMoved(event));
00547 }
00548
else {
00549
if (
m_fHandleMouseEvents)
00550
ManageMouseMove(event);
00551 }
00552 };
00553
00557
void sltPopMenu(QMouseEvent *pqEvent);
00558
00559
00560
protected:
00562
00564
00565
00570
virtual void initQFrame(
const char * name,
const QGLWidget * shareWidget,
00571 WFlags f,
const QGLFormat &format=QGLFormat::defaultFormat());
00572
00579 QFrame *
getQFrame() {
00580
return m_pQFrame;
00581 }
00582
00587
void setFrustum(StereoBuffer buffer = QGLViewer::MONO);
00588
00590
void setFrustumMono();
00591
00593
void setFrustumStereoLeft();
00594
00596
void setFrustumStereoRight();
00597
00603
void setLookAt();
00604
00605
00611 virtual void ManageMouseMove(QMouseEvent *) {};
00612
00618 virtual void ManageMousePress(QMouseEvent *) {};
00619
00625 virtual void ManageMouseRelease(QMouseEvent *) {};
00626
00631
virtual void mousePressEvent (QMouseEvent *pqEvent);
00632
00635 virtual void timerEvent(QTimerEvent *pqEvent) {
00636
if (
m_fRefresh && ((QTimerEvent *)pqEvent)->timerId() ==
m_nTimerID) {
00637
m_pQGLWidget->updateGL();
00638
m_fRefresh =
false;
00639 }
00640 };
00641
00643
00644
00646
00647
00649
00650
00652
00653
00655
00656
00657
00658
private:
00660
00662
00663
00671
void initCursors();
00672
00676
void initPopupMenu();
00677
00681
void initConnects();
00682
00687
virtual void setVPRes(
int nWidth,
int nHeight );
00688
00689
00691
00693
00694
protected:
00695 CCamera m_cCurrentCamera;
00696 CCamera m_cHomeCamera;
00697
00698 GLenum
m_eRenderMode;
00699
00700 bool m_fFullViewer;
00701
00702
00703 QFrame *
m_pQFrame;
00704 QGLSignalWidget *
m_pQGLWidget;
00705 QHBoxLayout *
m_pQHBoxLayout;
00706
00707 QPopupMenu *
m_pqPopupMenu;
00708
00709 QBitmap
m_qMovePix,
m_qSelectPix,
m_qMoveMaskPix,
m_qSelectMaskPix;
00710 QCursor *
m_pqMoveCursor, *
m_pqSelectCursor;
00711
00712
00713 StereoMode m_stereoMode;
00714 bool m_fAllowStereoSimulation;
00715 QStereoCtrl *
m_pStereoCtrl;
00716
00717
00719
00721
00722
private:
00723 bool m_fRefresh,
m_fHandleMouseEvents;
00724 int m_nRefreshRate,
00725
m_nTimerID;
00726 };
00727
00728
00729
#endif // __QGLVIEWER_H_