Hi,<br><br>I am trying to display each slice from a series of CT scans in a
QVTKwidget. The QVTKWidget itself is in a QMainWindow with 2 other
widgets to browse and load the data and a slider to view each slice. I want to be able to display the
data in QVTKwidget as soon as I hit the load button and use a slider to display every slice from the series. I am facing two problems with my application. <br><br>(1) when I run the application I get a bunch of errors that open in a new vtkOutputWindow. How do I eliminate these? The errors that I get are as follows:<br>
-----<br>ERROR: In ..\..\vtk-5.2.1\Filtering\vtkDemandDrivenPipeline.cxx, line 725<br>vtkStreamingDemandDrivenPipeline (0487BC08): Input port 0 of algorithm vtkImageMapToWindowLevelColors(0487AA68) has 0 connections but is not optional.<br>
<br>ERROR: In ..\..\vtk-5.2.1\Filtering\vtkDemandDrivenPipeline.cxx, line 725<br>vtkStreamingDemandDrivenPipeline (0487BC08): Input port 0 of algorithm vtkImageMapToWindowLevelColors(0487AA68) has 0 connections but is not optional.<br>
<br>ERROR: In ..\..\vtk-5.2.1\Filtering\vtkDemandDrivenPipeline.cxx, line 725<br>vtkStreamingDemandDrivenPipeline (0487BC08): Input port 0 of algorithm vtkImageMapToWindowLevelColors(0487AA68) has 0 connections but is not optional.<br>
<br>ERROR: In ..\..\vtk-5.2.1\Filtering\vtkDemandDrivenPipeline.cxx, line 725<br>vtkStreamingDemandDrivenPipeline (0487BC08): Input port 0 of algorithm vtkImageMapToWindowLevelColors(0487AA68) has 0 connections but is not optional.<br>
<br>ERROR: In ..\..\vtk-5.2.1\Rendering\vtkImageActor.cxx, line 267<br>vtkOpenGLImageActor (0487A430): This filter requires unsigned char scalars as input<br><br>ERROR: In ..\..\vtk-5.2.1\Filtering\vtkDemandDrivenPipeline.cxx, line 725<br>
vtkStreamingDemandDrivenPipeline (0487BC08): Input port 0 of algorithm vtkImageMapToWindowLevelColors(0487AA68) has 0 connections but is not optional.<br><br>ERROR: In ..\..\vtk-5.2.1\Filtering\vtkDemandDrivenPipeline.cxx, line 725<br>
vtkStreamingDemandDrivenPipeline (0487BC08): Input port 0 of algorithm vtkImageMapToWindowLevelColors(0487AA68) has 0 connections but is not optional.<br><br>ERROR: In ..\..\vtk-5.2.1\Filtering\vtkDemandDrivenPipeline.cxx, line 725<br>
vtkStreamingDemandDrivenPipeline (0487BC08): Input port 0 of algorithm vtkImageMapToWindowLevelColors(0487AA68) has 0 connections but is not optional.<br><br>ERROR: In ..\..\vtk-5.2.1\Filtering\vtkDemandDrivenPipeline.cxx, line 725<br>
vtkStreamingDemandDrivenPipeline (0487BC08): Input port 0 of algorithm vtkImageMapToWindowLevelColors(0487AA68) has 0 connections but is not optional<br>ERROR: In ..\..\vtk-5.2.1\Rendering\vtkImageActor.cxx, line 267<br>vtkOpenGLImageActor (0487A430): This filter requires unsigned char scalars as input<br>
<br>---------<br><br>(2)My application windows also opens up and I can load the data fine. But when I use the slider, it opens up a new Win32OpenGLWindow and displays each slice in this window instead of my QVTKWidget window. <br>
<br>Can anyone please guide me on solving these 2 errors? I will really appreciate all assistance with this. <br><br>Thanks,<br>Ashish<br><br>Here's my code:<br>------header file----<br>#include <QObject><br>#include <QPushButton><br>
#include <QLabel><br>#include <QHBoxLayout><br>#include <QVBoxLayout><br>#include <QMainWindow><br>#include <QVTKWidget.h><br>#include <QWidget><br>#include <QString><br>#include <QFileDialog><br>
#include <QDir><br>#include <qapplication.h><br>#include <qobject.h><br>#include <QtGui><br>#include <QSlider><br><br>#include <vtkDICOMImageReader.h><br>#include <vtkImageViewer2.h><br>
#include <vtkRenderWindow.h><br>
#include "vtkRenderer.h"<br><br>using namespace std;<br><br>class test : public QObject<br>{<br> Q_OBJECT<br><br>public:<br> string dirname;<br> vtkDICOMImageReader *reader;<br> vtkImageViewer2 *imgview;<br>
<br> QMainWindow *mymainwindow;<br> QWidget *centralwidget;<br> QLabel *mylabel;<br> QPushButton *mypbutton;<br> QPushButton *myloadbutton;<br> QSlider *slider1;<br> QVTKWidget *vtkwidget;<br> QHBoxLayout *myhlayout;<br>
QVBoxLayout *myvlayout;<br>
test(QObject* parent = 0);<br> ~test();<br><br><br> public slots:<br> void OnLoad();<br> void OnBrowse();<br> void OnSlide(int);<br><br>};<br>------cpp file------<br>#include "test.h"<br>
test::test(QObject * parent):QObject(parent)<br>
{<br> reader = vtkDICOMImageReader::New();<br> imgview = vtkImageViewer2::New();<br><br> mymainwindow = new QMainWindow();<br> centralwidget = new QWidget(mymainwindow);<br><br> mylabel = new QLabel(centralwidget);<br>
mypbutton = new QPushButton(centralwidget);<br> myloadbutton = new QPushButton(centralwidget);<br> slider1 = new QSlider(Qt::Horizontal,centralwidget);<br><br> vtkwidget = new QVTKWidget(centralwidget);<br> vtkwidget->GetRenderWindow()->AddRenderer(imgview->GetRenderer());<br>
<div id=":13o" class="ii gt">
vtkwidget->setFixedSize(512,512);<br><br> myhlayout = new QHBoxLayout();<br> myvlayout = new QVBoxLayout();<br><br> //setup UI<br> mylabel->setText("Select Dicom Dir");<br> mypbutton->setText("Browse");<br>
this->connect(this->mypbutton,SIGNAL(clicked()),this, SLOT(OnBrowse()));<br><br> myloadbutton->setText("Load");<br> this->connect(this->mypbutton,SIGNAL(clicked()),this, SLOT(OnLoad()));<br>
<br> this->connect(this->slider1,SIGNAL(valueChanged(int)),this,SLOT(OnSlide(int)));<br>
<br> myhlayout->addWidget(mylabel);<br> myhlayout->addWidget(mypbutton);<br> myhlayout->addWidget(myloadbutton);<br><br> myvlayout->addLayout(myhlayout);<br> myvlayout->addWidget(vtkwidget);<br>
myvlayout->addWidget(slider1);<br>
<br> centralwidget->setLayout(myvlayout);<br> mymainwindow->setCentralWidget(centralwidget);<br> mymainwindow->show();<br>}<br><br>test::~test()<br>{<br> reader->Delete();<br> imgview->Delete();<br>
}<br><br>void test::OnLoad()<br>{<br> reader->SetDirectoryName(dirname.c_str());<br> reader->Update();<br><br> imgview->SetInput(reader->GetOutput());<br> imgview->GetRenderer()->ResetCamera();<br>
vtkwidget->update();<br>
<br>}<br><br>void test::OnSlide(int value)<br>{<br> this->slider1->setRange(this->imgview->GetSliceMin(),this->imgview->GetSliceMax());<br> imgview->SetSlice(value);<br><br>}<br><br>void test::OnBrowse()<br>
{<br> QString indirectory = QFileDialog::getExistingDirectory(this->centralwidget,tr("Select Input Directory"), QDir::currentPath());<br> dirname = indirectory.toStdString();<br>
<br>}<br>------main.cpp---------<br>#include "test.h"<br>void main(int argc, char *argv[])<br>{<br> QApplication app(argc, argv);<br> test *mywin = new test;<br> app.exec();<br><br>}</div><br>