Hi Lars,<br><br>Thanks a lot. All of the solutions that you suggested worked. Is any one approach faster than the other?<br><br>Thanks again.<br>Ashish<br><br><div class="gmail_quote">On Sat, Nov 21, 2009 at 12:46 AM, lars-friedrich <span dir="ltr">&lt;<a href="mailto:lars-friedrich@gmx.net" target="_blank">lars-friedrich@gmx.net</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Hi Ashish,<br>
<br>
<br>
I think I can suggest some possible solutions to your problem with<br>
vtkImageViewer2-handling:<br>
<br>
<br>
1. the easiest thing may be to use your &#39;blank&#39;-image instead of removing<br>
the view-props of the renderer; I mean, you did already implement it in<br>
order to overcome the broken pipeline problem vtkImageViewer2 usually causes<br>
at situations when its input is NULL ...; e.g. do this in the unload-slot:<br>
{<br>
    //imgview-&gt;GetRenderer()-&gt;RemoveAllViewProps(); // forget about that<br>
    imgview-&gt;SetInput(blank); // simply set the blank input again<br>
<div>    imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>
    vtkwidget-&gt;update();<br>
}<br>
<br>
<br>
</div>2. the problem with removing the renderer&#39;s view props is that<br>
vtkImageViewer2 does not automatically add the view props again - you must<br>
either do this (a) manually or (b) re-trigger the internal<br>
InstallPipeline-method<br>
<br>
(a)<br>
load-slot:<br>
<div>{<br>
    reader-&gt;SetDirectoryName(dirname.c_str());<br>
    reader-&gt;Update();<br>
    imgview-&gt;SetInput(reader-&gt;GetOutput());<br>
</div>    if (!imgview-&gt;GetRenderer()-&gt;HasViewProp(imgview-&gt;GetImageActor())) //<br>
manually check whether we&#39;ve to re-add the actor<br>
      imgview-&gt;GetRenderer()-&gt;AddViewProp(imgview-&gt;GetImageActor());<br>
<div>    imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>
    vtkwidget-&gt;update();<br>
}<br>
</div>unload-slot:<br>
{<br>
    //imgview-&gt;GetRenderer()-&gt;RemoveAllViewProps();<br>
    imgview-&gt;GetRenderer()-&gt;RemoveViewProp(imgview-&gt;GetImageActor()); //<br>
remove vtkImageViewer&#39;s specific actor<br>
<div>    imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>
    vtkwidget-&gt;update();<br>
}<br>
<br>
<br>
</div>(b)<br>
load-slot:<br>
<div>{<br>
    reader-&gt;SetDirectoryName(dirname.c_str());<br>
    reader-&gt;Update();<br>
    imgview-&gt;SetInput(reader-&gt;GetOutput());<br>
<br>
</div>    imgview-&gt;SetRenderWindow(NULL); // internal call of UninstallPipeline()<br>
is for example triggered by re-setting render window ...<br>
    imgview-&gt;SetRenderWindow(vtkwidget-&gt;GetRenderWindow());<br>
<div><br>
    imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>
    vtkwidget-&gt;update();<br>
}<br>
</div>unload-slot:<br>
{<br>
    //imgview-&gt;GetRenderer()-&gt;RemoveAllViewProps();<br>
    imgview-&gt;GetRenderer()-&gt;RemoveViewProp(imgview-&gt;GetImageActor()); //<br>
remove vtkImageViewer&#39;s specific actor<br>
<div>    imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>
    vtkwidget-&gt;update();<br>
}<br>
<br>
<br>
<br>
<br>
</div>HTH,<br>
<br>
lars<br>
<div><div></div><div><br>
<br>
<br>
<br>
Ashish Singh-4 wrote:<br>
&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; I am trying to display each slice from a series of CT scans in a<br>
&gt; QVTKwidget.<br>
&gt; The QVTKWidget itself is in a QMainWindow with 3 other widgets to browse,<br>
&gt; load and unload the data. I want to be able to display the data in<br>
&gt; QVTKwidget as soon as I hit the load button. I also want to be able to<br>
&gt; unload the data and clear the QVTKwidget as soon as I hit the unload<br>
&gt; button<br>
&gt; so that I can load a new dataset afterwards.<br>
&gt;<br>
&gt; I can read and display the data fine only the first time. I can also<br>
&gt; unload<br>
&gt; the data, but after unload when I try to load new data it doesn&#39;t show up<br>
&gt; in<br>
&gt; my QVTKwidget. Can anyone please tell me what am I missing or doing wrong<br>
&gt; here and how to correct it?<br>
&gt;<br>
&gt; My development environment is:<br>
&gt; Windows XP Pro x64<br>
&gt; Visual Studio 2005<br>
&gt; VTK 5.4.2<br>
&gt; Qt 4.5.0<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Ashish<br>
&gt;<br>
&gt; Here&#39;s the code that I use:<br>
&gt; ----Header file: test.h-----<br>
&gt; #include &lt;QObject&gt;<br>
&gt; #include &lt;QPushButton&gt;<br>
&gt; #include &lt;QLabel&gt;<br>
&gt; #include &lt;QHBoxLayout&gt;<br>
&gt; #include &lt;QVBoxLayout&gt;<br>
&gt; #include &lt;QMainWindow&gt;<br>
&gt; #include &lt;QVTKWidget.h&gt;<br>
&gt; #include &lt;QWidget&gt;<br>
&gt; #include &lt;QString&gt;<br>
&gt; #include &lt;QFileDialog&gt;<br>
&gt; #include &lt;QDir&gt;<br>
&gt; #include &lt;qapplication.h&gt;<br>
&gt; #include &lt;qobject.h&gt;<br>
&gt; #include &lt;QtGui&gt;<br>
&gt;<br>
&gt; #include &lt;vtkDICOMImageReader.h&gt;<br>
&gt; #include &lt;vtkImageViewer2.h&gt;<br>
&gt; #include &lt;vtkRenderWindow.h&gt;<br>
&gt; #include &quot;vtkRenderer.h&quot;<br>
&gt; #include &quot;vtkCornerAnnotation.h&quot;<br>
&gt; #include &quot;vtkImageData.h&quot;<br>
&gt;<br>
&gt;<br>
&gt; using namespace std;<br>
&gt;<br>
&gt; class test : public QObject<br>
&gt; {<br>
&gt;     Q_OBJECT<br>
&gt;<br>
&gt; public:<br>
&gt;     string dirname;<br>
&gt;     vtkDICOMImageReader *reader;<br>
&gt;     vtkImageViewer2 *imgview;<br>
&gt;     vtkImageData *blank;<br>
&gt;<br>
&gt;     QMainWindow *mymainwindow;<br>
&gt;     QWidget *centralwidget;<br>
&gt;     QLabel *mylabel;<br>
&gt;     QPushButton *mypbutton;<br>
&gt;     QPushButton *myloadbutton;<br>
&gt;     QPushButton *myunloadbutton;<br>
&gt;     QVTKWidget *vtkwidget;<br>
&gt;     QHBoxLayout *myhlayout;<br>
&gt;     QVBoxLayout *myvlayout;<br>
&gt;     test(QObject* parent = 0);<br>
&gt;     ~test();<br>
&gt;<br>
&gt;     public slots:<br>
&gt;         void OnLoad();<br>
&gt;         void OnBrowse();<br>
&gt;         void OnUnLoad();<br>
&gt;<br>
&gt; };<br>
&gt;<br>
&gt; -----cpp file: test.cpp-------<br>
&gt; #include &quot;test.h&quot;<br>
&gt;<br>
&gt; test::test(QObject * parent):QObject(parent)<br>
&gt; {<br>
&gt;     reader = vtkDICOMImageReader::New();<br>
&gt;     imgview = vtkImageViewer2::New();<br>
&gt;<br>
&gt;     //create dummy data to create start up blank image<br>
&gt;     blank = vtkImageData::New();<br>
&gt;     blank-&gt;SetDimensions(10, 10, 1);<br>
&gt;     blank-&gt;AllocateScalars();<br>
&gt;     for (int i = 0; i &lt; 10; i++)<br>
&gt;         for (int j = 0; j &lt; 10; j++)<br>
&gt;             blank-&gt;SetScalarComponentFromDouble(i, j, 0, 0, 0);<br>
&gt;     blank-&gt;Update();<br>
&gt;     imgview-&gt;SetInput(blank);<br>
&gt;     imgview-&gt;SetInput(blank);<br>
&gt;     //create dummy data to create start up blank image<br>
&gt;<br>
&gt;     mymainwindow = new QMainWindow();<br>
&gt;     centralwidget = new QWidget(mymainwindow);<br>
&gt;<br>
&gt;     mylabel = new QLabel(centralwidget);<br>
&gt;     mypbutton = new QPushButton(centralwidget);<br>
&gt;     myloadbutton = new QPushButton(centralwidget);<br>
&gt;     myunloadbutton = new QPushButton(centralwidget);<br>
&gt;<br>
&gt;     vtkwidget = new QVTKWidget(centralwidget);<br>
&gt;     vtkwidget-&gt;GetRenderWindow()-&gt;AddRenderer(imgview-&gt;GetRenderer());<br>
&gt;     vtkwidget-&gt;setFixedSize(512,512);<br>
&gt;<br>
&gt;     myhlayout = new QHBoxLayout();<br>
&gt;     myvlayout = new QVBoxLayout();<br>
&gt;<br>
&gt;     //setup UI<br>
&gt;     mylabel-&gt;setText(&quot;Select Dicom Dir&quot;);<br>
&gt;     mypbutton-&gt;setText(&quot;Browse&quot;);<br>
&gt;     this-&gt;connect(this-&gt;mypbutton,SIGNAL(clicked()),this,<br>
&gt; SLOT(OnBrowse()));<br>
&gt;<br>
&gt;     myloadbutton-&gt;setText(&quot;Load&quot;);<br>
&gt;     this-&gt;connect(this-&gt;myloadbutton,SIGNAL(clicked()),this,<br>
&gt; SLOT(OnLoad()));<br>
&gt;<br>
&gt;     myunloadbutton-&gt;setText(&quot;Unload&quot;);<br>
&gt;<br>
&gt; this-&gt;connect(this-&gt;myunloadbutton,SIGNAL(clicked()),this,SLOT(OnUnLoad()));<br>
&gt;<br>
&gt;     myhlayout-&gt;addWidget(mylabel);<br>
&gt;     myhlayout-&gt;addWidget(mypbutton);<br>
&gt;     myhlayout-&gt;addWidget(myloadbutton);<br>
&gt;     myhlayout-&gt;addWidget(myunloadbutton);<br>
&gt;<br>
&gt;     myvlayout-&gt;addLayout(myhlayout);<br>
&gt;     myvlayout-&gt;addWidget(vtkwidget);<br>
&gt;<br>
&gt;     centralwidget-&gt;setLayout(myvlayout);<br>
&gt;     mymainwindow-&gt;setCentralWidget(centralwidget);<br>
&gt;     mymainwindow-&gt;show();<br>
&gt; }<br>
&gt;<br>
&gt; test::~test()<br>
&gt; {<br>
&gt;     reader-&gt;Delete();<br>
&gt;     imgview-&gt;Delete();<br>
&gt;     blank-&gt;Delete();<br>
&gt; }<br>
&gt;<br>
&gt; void test::OnLoad()<br>
&gt; {<br>
&gt;     reader-&gt;SetDirectoryName(dirname.c_str());<br>
&gt;     reader-&gt;Update();<br>
&gt;     imgview-&gt;SetInput(reader-&gt;GetOutput());<br>
&gt;     imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>
&gt;     vtkwidget-&gt;update();<br>
&gt; }<br>
&gt;<br>
&gt; void test::OnUnLoad()<br>
&gt; {<br>
&gt;     imgview-&gt;GetRenderer()-&gt;RemoveAllViewProps();<br>
&gt;     imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>
&gt;     vtkwidget-&gt;update();<br>
&gt; }<br>
&gt;<br>
&gt; void test::OnBrowse()<br>
&gt; {<br>
&gt;     QString indirectory =<br>
&gt; QFileDialog::getExistingDirectory(this-&gt;centralwidget,tr(&quot;Select Input<br>
&gt; Directory&quot;), QDir::currentPath());<br>
&gt;     dirname = indirectory.toStdString();<br>
&gt; }<br>
&gt;<br>
&gt; -----main.cpp---------<br>
&gt; #include &quot;test.h&quot;<br>
&gt; void main(int argc, char *argv[])<br>
&gt; {<br>
&gt;     QApplication app(argc, argv);<br>
&gt;     test *mywin = new test;<br>
&gt;     app.exec();<br>
&gt;<br>
&gt; }<br>
&gt;<br>
</div></div><div>&gt; _______________________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the VTK FAQ at:<br>
&gt; <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">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" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
&gt;<br>
&gt;<br>
<br>
</div><font color="#888888">--<br>
View this message in context: <a href="http://old.nabble.com/QVTK-issue-with-vtkImageViewer2-tp26429989p26454127.html" target="_blank">http://old.nabble.com/QVTK-issue-with-vtkImageViewer2-tp26429989p26454127.html</a><br>


</font><div><div></div><div>Sent from the VTK - Users mailing list archive at Nabble.com.<br>
<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
</div></div></blockquote></div><br>