35 #include <QResizeEvent>
36 #include "vtkRenderWindow.h"
37 #include "vtkRenderer.h"
38 #include <QGridLayout>
51 QVTKWidget(parent, f),
52 mMouseEventTarget(NULL),
55 mOffScreenRendering =
false;
56 this->setContextMenuPolicy(Qt::CustomContextMenu);
57 connect(
this, SIGNAL(customContextMenuRequested(
const QPoint &)),
this, SLOT(customContextMenuRequestedSlot(
const QPoint &)));
60 this->setLayout(
new QGridLayout);
61 disableGLHiDPI(this->winId());
89 return dynamic_cast<QGridLayout*
>(layout());
92 void ViewContainer::paintEvent(QPaintEvent* event)
94 inherited_widget::paintEvent(event);
121 this->initializeRenderWindow();
137 mOffScreenRendering = on;
142 return mOffScreenRendering;
145 void ViewContainer::initializeRenderWindow()
150 QString uid = QString(
"rw_oscr=%1").arg(mOffScreenRendering);
152 if (!mCachedRenderWindows.count(uid))
155 this->addBackgroundRenderer(rw);
156 rw->SetOffScreenRendering(mOffScreenRendering);
157 mCachedRenderWindows[uid] = rw;
173 rw->AddRenderer(renderer);
174 renderer->SetViewport(0,0,1,1);
175 QColor background = palette().color(QPalette::Background);
176 renderer->SetBackground(background.redF(), background.greenF(), background.blueF());
179 void ViewContainer::customContextMenuRequestedSlot(
const QPoint& point)
181 ViewItem* item = this->findViewItem(point);
185 QWidget* sender =
dynamic_cast<QWidget*
>(this->sender());
186 QPoint pointGlobal = sender->mapToGlobal(point);
188 item->customContextMenuRequestedGlobalSlot(pointGlobal);
191 void ViewContainer::mouseMoveEvent(QMouseEvent* event)
193 inherited_widget::mouseMoveEvent(event);
202 void ViewContainer::mousePressEvent(QMouseEvent* event)
208 if ((this->contextMenuPolicy() == Qt::CustomContextMenu) && event->buttons().testFlag(Qt::RightButton))
211 inherited_widget::mousePressEvent(event);
221 QPoint ViewContainer::convertToItemSpace(
const QPoint &pos, ViewItem* item)
const
223 QRect r = item->geometry();
224 QPoint retval(pos.x() - r.left(), pos.y() - r.top());
228 ViewItem* ViewContainer::findViewItem(
const QPoint &pos)
233 QRect r = item->geometry();
240 void ViewContainer::mouseReleaseEvent(QMouseEvent* event)
242 inherited_widget::mouseReleaseEvent(event);
252 void ViewContainer::focusInEvent(QFocusEvent* event)
254 inherited_widget::focusInEvent(event);
257 void ViewContainer::wheelEvent(QWheelEvent* event)
259 inherited_widget::wheelEvent(event);
261 ViewItem *item = this->findViewItem(event->pos());
264 QPoint p = this->convertToItemSpace(event->pos(), item);
265 item->mouseWheelSlot(p.x(), p.y(),
266 event->delta(),
event->orientation(),
event->buttons());
270 void ViewContainer::showEvent(QShowEvent* event)
272 inherited_widget::showEvent(event);
282 hash += item->
getView()->computeTotalMTime();
290 QString msg(
"During rendering of ViewContainer");
300 void ViewContainer::resizeEvent( QResizeEvent *event)
302 inherited_widget::resizeEvent(event);
vtkSmartPointer< class vtkRenderWindow > vtkRenderWindowPtr
cstring_cast_Placeholder cstring_cast(const T &val)
LayoutPosition span
size of region
void mouseReleaseSlot(int x, int y, Qt::MouseButtons buttons)
#define report_gl_error_text(text)
ViewContainer(QWidget *parent=NULL, Qt::WindowFlags f=0)
ViewItem * addView(QString uid, LayoutRegion region, QString name="")
void mousePressSlot(int x, int y, Qt::MouseButtons buttons)
vtkSmartPointer< class vtkRenderer > vtkRendererPtr
ViewItem * getViewItem(int index)
vtkRenderWindowPtr getRenderWindow()
unsigned long mMTimeHash
sum of all MTimes in objects rendered
void mouseMoveSlot(int x, int y, Qt::MouseButtons buttons)
void setStretchFactors(QGridLayout *layout, LayoutRegion region, int stretchFactor)
virtual void setModified()
void renderAll()
Use this function to render all views at once. Do not call render on each view.
static const int MaxGridSize
LayoutPosition pos
start position of region
virtual void setOffScreenRenderingAndClear(bool on)
virtual QGridLayout * getGridLayout()
ViewRepCollectionPtr getView()
virtual bool getOffScreenRendering() const
vtkRenderWindowPtr mRenderWindow
ViewItem * mMouseEventTarget