Commit 608c1816 authored by Jan Möbius's avatar Jan Möbius

Dennis: MultiView

git-svn-id: http://www.openflipper.org/svnrepo/OpenFlipper/branches/Free@4671 383ad7c9-94d9-4d36-a494-682f7c89f535
parent 41e778f3
......@@ -269,10 +269,8 @@ QPoint mapToLocal( const QPoint _point ) {
* They can be combined.
*/
void setDrawMode( const unsigned int _mode ) {
for ( uint i = 0 ; i < examiner_widgets_.size() ; ++i ) {
examiner_widgets_[i]->drawMode(_mode);
examiner_widgets_[i]->updateGL();
}
examiner_widgets_[activeExaminer_]->drawMode(_mode);
examiner_widgets_[activeExaminer_]->updateGL();
}
/** Get the current draw Mode of the examiner widget.\n
......@@ -281,8 +279,7 @@ void setDrawMode( const unsigned int _mode ) {
* They can be combined.
*/
unsigned int drawMode( ) {
// No seperate draw modes available all should have the same so take first
return examiner_widgets_[0]->drawMode();
return examiner_widgets_[activeExaminer_]->drawMode();
}
bool scenegraph_pick( ACG::SceneGraph::PickTarget _pickTarget, const QPoint &_mousePos, unsigned int &_nodeIdx, unsigned int &_targetIdx, ACG::Vec3d *_hitPointPtr=0 ) {
......
<?xml version = '1.0' encoding = 'UTF-8'?>
<!DOCTYPE KDevPrjSession>
<KDevPrjSession>
<DocsAndViews NumberOfDocuments="14" >
<Doc0 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/OpenFlipper/Core/ParseIni.cc" >
<View0 Encoding="" line="548" Type="Source" />
<DocsAndViews NumberOfDocuments="3" >
<Doc0 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/ObjectTypes/MeshObject/MeshObjectT.cc" >
<View0 Encoding="" line="489" Type="Source" />
</Doc0>
<Doc1 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/OpenFlipper/Core/openFunctions.cc" >
<View0 Encoding="" line="266" Type="Source" />
<Doc1 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/ObjectTypes/MeshObject/MeshObjectT.hh" >
<View0 Encoding="" line="294" Type="Source" />
</Doc1>
<Doc2 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/Plugin-FilePolyLine/FilePolyLine.hh" >
<View0 Encoding="" line="51" Type="Source" />
<Doc2 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/Plugin-TextureControl/TextureControl.cc" >
<View0 Encoding="" line="128" Type="Source" />
</Doc2>
<Doc3 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/OpenFlipper/Core/Core.cc" >
<View0 Encoding="" line="550" Type="Source" />
</Doc3>
<Doc4 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/OpenFlipper/BasePlugin/PluginFunctions.cc" >
<View0 Encoding="" line="258" Type="Source" />
</Doc4>
<Doc5 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/OpenFlipper/widgets/glWidget/QtBaseViewer.cc" >
<View0 Encoding="" line="1033" Type="Source" />
</Doc5>
<Doc6 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/OpenFlipper/widgets/glWidget/QtBaseViewerPicking.cc" >
<View0 Encoding="" line="65" Type="Source" />
</Doc6>
<Doc7 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/ACG/Scenegraph/TranslationManipulatorNode.cc" >
<View0 Encoding="" line="572" Type="Source" />
</Doc7>
<Doc8 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/Plugin-Move/MovePlugin.cc" >
<View0 Encoding="" line="71" Type="Source" />
</Doc8>
<Doc9 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/ACG/QtWidgets/QtBaseViewerPicking.cc" >
<View0 Encoding="" line="78" Type="Source" />
</Doc9>
<Doc10 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/Plugin-Scissor/QtPlaneSelect.cc" >
<View0 Encoding="" line="130" Type="Source" />
</Doc10>
<Doc11 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/ACG/Scenegraph/ManipulatorNode.cc" >
<View0 Encoding="" line="394" Type="Source" />
</Doc11>
<Doc12 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/ACG/QtWidgets/QtLasso.cc" >
<View0 Encoding="" line="391" Type="Source" />
</Doc12>
<Doc13 NumberOfViews="1" URL="file:///data/home1/moebius/projects/OpenFlipper/ACG/Scenegraph/TrackballNode.cc" >
<View0 Encoding="" line="261" Type="Source" />
</Doc13>
</DocsAndViews>
<pluginList>
<kdevdebugger>
......
......@@ -54,6 +54,7 @@ void CoreWidget::slotCustomContextMenu( const QPoint& _point ) {
QObject* senderPointer = sender();
unsigned int examinerId = 0;
QPoint popupPosition;
QPoint scenePos;
if ( senderPointer == 0 ) {
std::cerr << "Error : slotCustomContextMenu directly called! This should only be called by an examiner" << std::endl;
......@@ -61,6 +62,8 @@ void CoreWidget::slotCustomContextMenu( const QPoint& _point ) {
for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets(); ++i ) {
if ( senderPointer == examiner_widgets_[i] ) {
popupPosition = examiner_widgets_[i]->glMapToGlobal(_point);
QPointF f = examiner_widgets_[i]->mapToScene(QPointF(_point.x(), _point.y()));
scenePos = QPoint (f.x(), f.y());
examinerId = i;
break;
}
......@@ -70,7 +73,7 @@ void CoreWidget::slotCustomContextMenu( const QPoint& _point ) {
PluginFunctions::setActiveExaminer( examinerId );
updatePopupMenu(_point,examinerId);
updatePopupMenu(scenePos,examinerId);
// If not initialized, dont show it!!
if ( !contextMenu_->isEmpty () )
......@@ -288,16 +291,16 @@ void CoreWidget::updatePopupMenu(const QPoint& _point, unsigned int _examinerId)
contextMenu_->addMenu(functionMenu_ );
if ( ( examiner_widgets_[0]->getDrawMenu() != NULL ) && OpenFlipper::Options::drawModesInContextMenu() ) {
if ( ( examiner_widgets_[_examinerId]->getDrawMenu() != NULL ) && OpenFlipper::Options::drawModesInContextMenu() ) {
examiner_widgets_[0]->getDrawMenu()->setTitle("&DrawModes");
QAction* drawMenuAction = contextMenu_->addMenu(examiner_widgets_[0]->getDrawMenu() );
examiner_widgets_[_examinerId]->getDrawMenu()->setTitle("&DrawModes");
QAction* drawMenuAction = contextMenu_->addMenu(examiner_widgets_[_examinerId]->getDrawMenu() );
QIcon icon;
icon.addFile(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"drawModes.png");
drawMenuAction->setIcon(icon);
examiner_widgets_[0]->getDrawMenu()->setTearOffEnabled(true);
examiner_widgets_[_examinerId]->getDrawMenu()->setTearOffEnabled(true);
}
}
......
......@@ -123,7 +123,7 @@ CoreWidget( QVector<ViewMode*>& _viewModes,
glView_->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
glView_->setScene(glScene_);
baseLayout_ = new QGraphicsGridLayout;
baseLayout_ = new QtMultiViewLayout;
baseLayout_->setContentsMargins(0,0,0,0);
centerWidget_ = new QGraphicsWidget;
glScene_->addItem(centerWidget_);
......@@ -169,8 +169,7 @@ CoreWidget( QVector<ViewMode*>& _viewModes,
examinerWidget->sceneGraph( PluginFunctions::getSceneGraphRootNode() );
glScene_->addItem(examinerWidget);
baseLayout_->addItem(examinerWidget, 0, 0);
baseLayout_->addItem(examinerWidget, 0);
} else {
......@@ -183,7 +182,6 @@ CoreWidget( QVector<ViewMode*>& _viewModes,
"Examiner Widget",
statusBar_ );
examiner_widgets_.push_back(newWidget);
glScene_->addItem(newWidget);
}
// Initialize all examiners
......@@ -191,14 +189,10 @@ CoreWidget( QVector<ViewMode*>& _viewModes,
examiner_widgets_[i]->sceneGraph( PluginFunctions::getSceneGraphRootNode() );
}
baseLayout_->addItem(examiner_widgets_[0],0,0);
baseLayout_->addItem(examiner_widgets_[1],0,1);
baseLayout_->addItem(examiner_widgets_[2],1,0);
baseLayout_->addItem(examiner_widgets_[3],1,1);
for ( unsigned int i = 1 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
examiner_widgets_[i]->hide();
baseLayout_->addItem(examiner_widgets_[0],0);
baseLayout_->addItem(examiner_widgets_[1],1);
baseLayout_->addItem(examiner_widgets_[2],2);
baseLayout_->addItem(examiner_widgets_[3],3);
}
// Make examiner available to the plugins ( defined in PluginFunctions.hh)
......
......@@ -59,6 +59,7 @@
#include <OpenFlipper/widgets/glWidget/QtBaseViewer.hh>
#include <OpenFlipper/widgets/glWidget/QtGLGraphicsScene.hh>
#include <OpenFlipper/widgets/glWidget/QtGLGraphicsView.hh>
#include <OpenFlipper/widgets/glWidget/QtMultiViewLayout.hh>
// QT INCLUDES
#include <QMainWindow>
......@@ -403,7 +404,7 @@ public:
QGraphicsWidget* centerWidget_;
/// Base layout that holds gl views
QGraphicsGridLayout* baseLayout_;
QtMultiViewLayout* baseLayout_;
// widget showing the scenegraph
......
......@@ -553,19 +553,19 @@ void CoreWidget::coreKeyPressEvent (QKeyEvent* _e){
case Qt::Key_Space:
if ( OpenFlipper::Options::multiView() ) {
emit log( "Switch to MultiView");
if ( !examiner_widgets_[1]->isVisible() ) {
for ( uint i = 1 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
examiner_widgets_[i]->show();
} else {
for ( uint i = 1 ; i < OpenFlipper::Options::examinerWidgets() ; ++i )
examiner_widgets_[i]->hide();
}
emit log( "Switch MultiView mode");
switch (baseLayout_->mode())
{
case QtMultiViewLayout::SingleView:
baseLayout_->setMode (QtMultiViewLayout::Grid);
break;
case QtMultiViewLayout::Grid:
baseLayout_->setMode (QtMultiViewLayout::HSplit);
break;
case QtMultiViewLayout::HSplit:
baseLayout_->setMode (QtMultiViewLayout::SingleView);
break;
}
}
break;
......
......@@ -44,6 +44,7 @@
#include "QtBaseViewer.hh"
#include "QtGLGraphicsScene.hh"
#include "QtGLGraphicsView.hh"
#include "QtGLViewerLayout.hh"
#include <ACG/QtWidgets/QtWheel.hh>
#include <ACG/Scenegraph/DrawModes.hh>
#include <ACG/GL/gl.hh>
......@@ -238,9 +239,12 @@ void glViewer::swapBuffers() {
void glViewer::sceneGraph(ACG::SceneGraph::BaseNode* _root)
{
if (sceneGraphRoot_ == _root)
return;
sceneGraphRoot_ = _root;
if (sceneGraphRoot_)
if (sceneGraphRoot_ )
{
// get draw modes
ACG::SceneGraph::CollectDrawModesAction action;
......@@ -330,7 +334,13 @@ void glViewer::updateProjectionMatrix()
{
case ORTHOGRAPHIC_PROJECTION:
{
double aspect = (double) glWidth() / (double) glHeight();
double aspect;
if (isVisible())
aspect = (double) glWidth() / (double) glHeight();
else
aspect = 1.0;
glstate_->ortho( -orthoWidth_, orthoWidth_,
-orthoWidth_/aspect, orthoWidth_/aspect,
near_, far_ );
......@@ -457,12 +467,12 @@ void glViewer::normalsMode(NormalsMode _mode)
void
glViewer::copyToImage( QImage& _image,
unsigned int /* _l */ , unsigned int /* _t */ ,
unsigned int /* _w */ , unsigned int /* _h */ ,
unsigned int _l, unsigned int _t,
unsigned int _w, unsigned int _h,
GLenum /* _buffer */ )
{
makeCurrent();
_image = glWidget_->grabFrameBuffer(true);
_image = glWidget_->grabFrameBuffer(true).copy (_l, _t, _w, _h).convertToFormat (QImage::Format_RGB32);
}
......@@ -939,10 +949,6 @@ void glViewer::paintGL()
static bool initialized = false;
if (!initialized)
{
// we use GLEW to manage extensions
// initialize it first
glewInit();
// lock update
properties_.lockUpdate();
......@@ -1049,15 +1055,6 @@ void glViewer::moveEvent (QGraphicsSceneMoveEvent *)
//-----------------------------------------------------------------------------
void glViewer::paint(QPainter * _painter, const QStyleOptionGraphicsItem *, QWidget *)
{
if (_painter->paintEngine()->type() != QPaintEngine::OpenGL) {
std::cerr << "glViewer: paint needs a QGLWidget to be set as viewport on the graphics view\n";
return;
}
paintGL ();
}
void glViewer::encodeView(QString& _view)
{
const ACG::GLMatrixd m = glstate_->modelview();
......@@ -1248,19 +1245,10 @@ glViewer::createWidgets(QStatusBar* _sb)
wheelY->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
wheelZ->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
glBaseLayout_ = new QGraphicsGridLayout;
glBaseLayout_->addItem(wheelX, 1, 0);
glBaseLayout_->addItem(wheelY, 2, 1);
glBaseLayout_->addItem(wheelZ, 1, 3);
glBaseLayout_->setColumnStretchFactor(0,0);
glBaseLayout_->setColumnStretchFactor(1,0);
glBaseLayout_->setColumnStretchFactor(2,1);
glBaseLayout_->setColumnStretchFactor(3,0);
glBaseLayout_->setRowStretchFactor(0,1);
glBaseLayout_->setRowStretchFactor(1,0);
glBaseLayout_->setRowStretchFactor(2,0);
glBaseLayout_ = new QtGLViewerLayout;
glBaseLayout_->addWheelX(wheelX);
glBaseLayout_->addWheelY(wheelY);
glBaseLayout_->addWheelZ(wheelZ);
setLayout(glBaseLayout_);
}
......@@ -1700,6 +1688,9 @@ void glViewer::actionPickMenu( QAction * _action )
void
glViewer::viewMouseEvent(QMouseEvent* _event)
{
QPointF f (mapFromScene(QPointF(_event->pos().x(), _event->pos().y())));
QPoint pos (f.x(), f.y());
switch (_event->type())
{
case QEvent::MouseButtonPress:
......@@ -1708,14 +1699,14 @@ glViewer::viewMouseEvent(QMouseEvent* _event)
if (_event->modifiers() & Qt::ShiftModifier)
{
ACG::Vec3d c;
if (fast_pick(_event->pos(), c))
if (fast_pick(pos, c))
{
trackball_center_ = c;
trackball_radius_ = std::max(scene_radius_, (c-glstate_->eye()).norm()*0.9f);
}
}
lastPoint_hitSphere_ = mapToSphere( lastPoint2D_=_event->pos(),
lastPoint_hitSphere_ = mapToSphere( lastPoint2D_= pos,
lastPoint3D_ );
isRotating_ = true;
timer_->stop();
......@@ -1743,7 +1734,7 @@ glViewer::viewMouseEvent(QMouseEvent* _event)
// mouse button should be pressed
if (_event->buttons() & (Qt::LeftButton | Qt::MidButton))
{
QPoint newPoint2D = _event->pos();
QPoint newPoint2D = pos;
if ( (newPoint2D.x()<0) || (newPoint2D.x() > (int)glWidth()) ||
(newPoint2D.y()<0) || (newPoint2D.y() > (int)glHeight()) )
......@@ -1853,11 +1844,14 @@ glViewer::viewMouseEvent(QMouseEvent* _event)
void
glViewer::lightMouseEvent(QMouseEvent* _event)
{
QPointF f (mapFromScene(QPointF(_event->pos().x(), _event->pos().y())));
QPoint pos (f.x(), f.y());
switch (_event->type())
{
case QEvent::MouseButtonPress:
{
lastPoint_hitSphere_ = mapToSphere( lastPoint2D_=_event->pos(),
lastPoint_hitSphere_ = mapToSphere( lastPoint2D_= pos,
lastPoint3D_ );
isRotating_ = true;
timer_->stop();
......@@ -1870,7 +1864,7 @@ glViewer::lightMouseEvent(QMouseEvent* _event)
// rotate lights
if (_event->buttons() & Qt::LeftButton)
{
QPoint newPoint2D = _event->pos();
QPoint newPoint2D = pos;
if ( (newPoint2D.x()<0) || (newPoint2D.x() > (int)glWidth()) ||
(newPoint2D.y()<0) || (newPoint2D.y() > (int)glHeight()) )
......@@ -1977,18 +1971,17 @@ bool glViewer::mapToSphere(const QPoint& _v2D, ACG::Vec3d& _v3D) const
void glViewer::slotAnimation()
{
static int msecs=0, count=0;
QTime t;
t.start();
makeCurrent();
rotate( lastRotationAxis_, lastRotationAngle_ );
updateGL();
if (!properties_.updateLocked()) {
msecs += t.elapsed();
if (count==10) {
msecs += frame_time_;
if (count >= 10 && msecs >= 500) {
assert(statusbar_!=0);
char s[100];
sprintf( s, "%.3f fps", (10000.0 / (float)msecs) );
sprintf( s, "%.3f fps", (1000.0 * count / (float)msecs) );
statusbar_->showMessage(s,2000);
count = msecs = 0;
}
......@@ -2025,6 +2018,7 @@ void glViewer::snapshot()
qApp->processEvents();
makeCurrent();
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
paintGL();
glFinish();
......
......@@ -83,7 +83,6 @@ class QSplitter;
class QTimer;
class QImage;
class QSocketNotifier;
class QGraphicsGridLayout;
//== NAMESPACES ===============================================================
......@@ -97,6 +96,7 @@ namespace ACG {
}
class QtGLGraphicsScene;
class QtGLGraphicsView;
class QtGLViewerLayout;
class QtShiftPopupMenu;
......@@ -408,8 +408,6 @@ protected:
virtual void resizeEvent(QGraphicsSceneResizeEvent * _e);
/// handle move events
virtual void moveEvent (QGraphicsSceneMoveEvent * _e);
/// do painting
virtual void paint(QPainter * _painter, const QStyleOptionGraphicsItem * _option, QWidget * _widget = 0);
/// handle mouse press events
virtual void glMousePressEvent(QMouseEvent* _event);
......@@ -554,7 +552,7 @@ private:
QGLWidget* glWidget_;
// Base graphics widget layout
QGraphicsGridLayout* glBaseLayout_;
QtGLViewerLayout* glBaseLayout_;
// rotate around x-axis
ACG::QtWidgets::QtWheel* wheelX_;
......@@ -854,7 +852,6 @@ private:
bool lastPoint_hitSphere_;
bool allowRotation_;
// animation stuff
ACG::Vec3d lastRotationAxis_;
double lastRotationAngle_;
......
......@@ -57,20 +57,29 @@ QtGLGraphicsScene::QtGLGraphicsScene(std::vector< glViewer *> *_views) :
{
}
/*
void QtGLGraphicsScene::drawBackground(QPainter *_painter, const QRectF &)
{
if (_painter->paintEngine()->type() != QPaintEngine::OpenGL) {
std::cerr << "QtGLGraphicsScene: drawBackground needs a QGLWidget to be set as viewport on the graphics view\n";
return;
}
if (_painter->paintEngine()->type() != QPaintEngine::OpenGL) {
std::cerr << "QtGLGraphicsScene: drawBackground needs a QGLWidget to be set as viewport on the graphics view\n";
return;
}
w_->paintGL();
static bool initialized = false;
if (!initialized)
{
// we use GLEW to manage extensions
// initialize it first
glewInit();
}
for (unsigned int i = 0; i < views_->size (); i++)
{
if (views_->at(i)->isVisible())
views_->at(i)->paintGL();
}
}
*/
glViewer* QtGLGraphicsScene::findView (const QPointF &p)
{
for (unsigned int i = 0; i < views_->size (); i++)
......
......@@ -71,9 +71,8 @@ public:
protected:
/*
virtual void drawBackground(QPainter *_painter, const QRectF &_rect);
*/
virtual void mousePressEvent(QGraphicsSceneMouseEvent* _e);
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* _e);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* _e);
......
//=============================================================================
//
// OpenFlipper
// Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
// www.openflipper.org
//
//-----------------------------------------------------------------------------
//
// License
//
// OpenFlipper is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// OpenFlipper is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with OpenFlipper. If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
// $Revision: $
// $Author: $
// $Date: $
//
//=============================================================================
//=============================================================================
//
// CLASS QtGLViewerLayout - IMPLEMENTATION
//
//=============================================================================
//== INCLUDES =================================================================
#include "QtGLViewerLayout.hh"
//== NAMESPACES ===============================================================
//== CLASS IMPLEMENTATION======================================================
QtGLViewerLayout::QtGLViewerLayout (QGraphicsLayoutItem * _parent) :
QGraphicsLayout (_parent),
wheelX_ (0),
wheelY_ (0),
wheelZ_ (0)
{
}
//-----------------------------------------------------------------------------
void QtGLViewerLayout::addWheelX (QGraphicsWidget *_item)
{
if (wheelX_)
items_.remove(items_.indexOf(wheelX_));
wheelX_ = _item;
items_.append(_item);
}
//-----------------------------------------------------------------------------
void QtGLViewerLayout::addWheelY (QGraphicsWidget *_item)
{
if (wheelY_)
items_.remove(items_.indexOf(wheelY_));
wheelY_ = _item;
items_.append(_item);
}
//-----------------------------------------------------------------------------
void QtGLViewerLayout::addWheelZ (QGraphicsWidget *_item)
{
if (wheelZ_)
items_.remove(items_.indexOf(wheelZ_));
wheelZ_ = _item;
items_.append(_item);
}
//-----------------------------------------------------------------------------
int QtGLViewerLayout::count() const
{
return items_.size();
}
//-----------------------------------------------------------------------------
QGraphicsLayoutItem * QtGLViewerLayout::itemAt(int _i) const
{
if (_i < 0 || _i >= items_.size())
return 0;
return items_[_i];
}
//-----------------------------------------------------------------------------
void QtGLViewerLayout::removeAt (int _index)
{
if (_index < 0 || _index >= items_.size())
return;
if (items_[_index] == wheelX_)
wheelX_ = 0;
if (items_[_index] == wheelY_)
wheelY_ = 0;
if (items_[_index] == wheelZ_)
wheelZ_ = 0;
items_.remove(_index);
}
//-----------------------------------------------------------------------------
QSizeF QtGLViewerLayout::sizeHint(Qt::SizeHint _which, const QSizeF & _constraint) const
{
return _constraint;
}
//-----------------------------------------------------------------------------
void QtGLViewerLayout::setGeometry(const QRectF & rect)