<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7651.53">
<TITLE>RE: [vtkusers] QVTKWidget with vtkImageViewer2 glitch</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Thank for the pointer. Since setting the size of the image viewer is apparently the problem I created a custom QVTKWidget that embeds an vtkImageViewer2. The<BR>
implementation is basically:<BR>
<BR>
ImageViewerWidget::ImageViewerWidget(QWidget *_parent) : QVTKWidget(_parent)<BR>
{<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer = vtkImageViewer2::New ();<BR>
}<BR>
<BR>
void ImageViewerWidget::SetInput ( vtkImageData *_image )<BR>
{<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;SetInput ( _image );<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;SetupInteractor(GetInteractor());&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;SetRenderWindow(GetRenderWindow());<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;UpdateDisplayExtent ();<BR>
}<BR>
<BR>
void ImageViewerWidget::resizeEvent ( QResizeEvent * event )<BR>
{<BR>
&nbsp;&nbsp;&nbsp; QVTKWidget::resizeEvent(event);<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;SetSize(width(),height());<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;SetPosition(x(),y());<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;UpdateDisplayExtent ();&nbsp;&nbsp;&nbsp;<BR>
}<BR>
<BR>
void ImageViewerWidget::showEvent ( QShowEvent * event )<BR>
{<BR>
&nbsp;&nbsp;&nbsp; QVTKWidget::showEvent(event);<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;SetSize(width(),height());<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;SetPosition(x(),y());<BR>
&nbsp;&nbsp;&nbsp; m_imageViewer-&gt;UpdateDisplayExtent ();<BR>
}<BR>
<BR>
This gets rid of the problems I mentioned, because the size is set explicitly on a show and resize event.<BR>
<BR>
However, there is a new problem that occurs only when there are multiple QVTKWidgets around. Upon starting the application (I have four QVTKWidgets in a grid layout), a random number of widgets actually show up (sometimes all four, but usually only two or three). After, seemingly, an arbitrary number of resize actions one or more QVTKWidgets become defunctional (it stops resizing and does not respond to input any more). When you click on a defunctional QVTKWidget, the whole desktop screen flickers once. It almost seems as if there can be only on QVTKWidget because the first QVTKWidget that is initialized always remains working.<BR>
<BR>
best,<BR>
Jeroen<BR>
<BR>
--<BR>
Leiden University Medical Center<BR>
Image Processing Division<BR>
<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: Clinton Stimpson [<A HREF="mailto:clinton@elemtech.com">mailto:clinton@elemtech.com</A>]<BR>
Sent: Wed 2/25/2009 7:06 PM<BR>
To: Wijnhout, J.S. (LKEB)<BR>
Cc: vtkusers@vtk.org<BR>
Subject: Re: [vtkusers] QVTKWidget with vtkImageViewer2 glitch<BR>
<BR>
<BR>
Here's what I understand is happening.<BR>
<BR>
vtkImageViewer2::Render assumes it can change the size of the window and<BR>
places the image accordingly.<BR>
When embedded in a GUI, the size of the window can't always be changed,<BR>
so the image shows up in the wrong place based on what it thought the<BR>
window size was.<BR>
Your workaround give vtkImageViewer2 a chance to successfully resize a<BR>
window and initialize the camera properly based on that, then you<BR>
replaced the window and kept the correctly initialized camera.<BR>
<BR>
There are probably other workarounds, such as fixing the camera<BR>
yourself.&nbsp; I'd file a bug against vtkImageViewer2.<BR>
<BR>
Clint<BR>
<BR>
<BR>
J.S.Wijnhout@lumc.nl wrote:<BR>
&gt; Hi,<BR>
&gt;<BR>
&gt; For starters, I have read the thread on this issue:<BR>
&gt; <A HREF="http://www.vtk.org/pipermail/vtkusers/2008-November/098242.html">http://www.vtk.org/pipermail/vtkusers/2008-November/098242.html</A><BR>
&gt;<BR>
&gt; However I managed to get vtkImageViewer2 working inside a QVTKWidget,<BR>
&gt; with one glitch however. The sample code is printed at the bottom of<BR>
&gt; the screen.<BR>
&gt; The way I got this to work relies on the order in which calls to<BR>
&gt; Render and SetRenderWindow are made. First I render the image viewer<BR>
&gt; by calling vtkImageViewer2::Render, after that I attach the image<BR>
&gt; viewer render window to the QVTKWidget. This works, but because I call<BR>
&gt; render first a separate render window is created and then (after the<BR>
&gt; call to QVTKWidget::SetRenderWindow) reparented to the QVTKWidget.<BR>
&gt; This happens really fast, so I guess I could live with it. But it<BR>
&gt; keeps me wondering what I should do to have it functioning properly.<BR>
&gt; Any advice on how to circumvent or fix vtkImageViewer2 would be welcome.<BR>
&gt;<BR>
&gt; best,<BR>
&gt; Jeroen<BR>
&gt;<BR>
&gt;<BR>
&gt; #include &lt;vtkRenderer.h&gt;<BR>
&gt; #include &lt;vtkRenderWindow.h&gt;<BR>
&gt; #include &lt;vtkImageViewer2.h&gt;<BR>
&gt; #include &lt;vtkRenderWindowInteractor.h&gt;<BR>
&gt; #include &lt;vtkPNGReader.h&gt;<BR>
&gt;<BR>
&gt; #include &lt;QVTKWidget.h&gt;<BR>
&gt;<BR>
&gt; #include &lt;QApplication&gt;<BR>
&gt; #include &lt;QMainWindow&gt;<BR>
&gt; #include &lt;QStatusBar&gt;<BR>
&gt;<BR>
&gt; int main ( int argc, char **argv )<BR>
&gt; {<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; QApplication app(argc,argv);<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; const char* fileName = argv[1];<BR>
&gt;&nbsp;&nbsp;&nbsp;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; QMainWindow w;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; w.statusBar()-&gt;showMessage(fileName);<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; QVTKWidget vtkWidget;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; vtkWidget.setAutomaticImageCacheEnabled(false);<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; w.setCentralWidget(&amp;vtkWidget);<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; vtkPNGReader *reader1 = vtkPNGReader::New ();<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; reader1-&gt;SetFileName(fileName);<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; reader1-&gt;Update ();<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; vtkImageViewer2 *viewer1 = vtkImageViewer2::New ();<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; viewer1-&gt;SetInput(reader1-&gt;GetOutput());<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; viewer1-&gt;SetupInteractor(vtkWidget.GetInteractor());<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; viewer1-&gt;Render ();<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; viewer1-&gt;SetRenderWindow(vtkWidget.GetRenderWindow());<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; w.show ();<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; app.exec ();<BR>
&gt;<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; viewer1-&gt;Delete ();<BR>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; reader1-&gt;Delete ();<BR>
&gt; }<BR>
&gt;<BR>
&gt;<BR>
&gt;&nbsp;<BR>
&gt; ------------------------------------------------------------------------<BR>
&gt;<BR>
&gt; _______________________________________________<BR>
&gt; Powered by www.kitware.com<BR>
&gt;<BR>
&gt; Visit other Kitware open-source projects at <A HREF="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</A><BR>
&gt;<BR>
&gt; Please keep messages on-topic and check the VTK FAQ at: <A HREF="http://www.vtk.org/Wiki/VTK_FAQ">http://www.vtk.org/Wiki/VTK_FAQ</A><BR>
&gt;<BR>
&gt; Follow this link to subscribe/unsubscribe:<BR>
&gt; <A HREF="http://www.vtk.org/mailman/listinfo/vtkusers">http://www.vtk.org/mailman/listinfo/vtkusers</A><BR>
&gt;&nbsp;&nbsp;<BR>
<BR>
<BR>
<BR>
<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>