int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // new for itk 4.8 itk::JPEGImageIOFactory::RegisterOneFactory(); // init m_pInvertIntensityFilter = InvertIntensityFilterType::New(); m_pConnector = FilterType::New(); ////////////////////////// // vtk objects // QT/VTK interact m_pRenderer = vtkRenderer::New(); // ui.vtkWidget->GetRenderWindow()->AddRenderer(m_pRenderer); m_pRenderWindow = vtkRenderWindow::New(); m_pRenderWindow->AddRenderer(m_pRenderer); m_pRenderWindowInteractor = vtkRenderWindowInteractor::New(); m_pRenderWindowInteractor->SetRenderWindow(m_pRenderWindow); m_pTissueExtractor = vtkMarchingCubes::New(); //vtkContourFilter::New(); m_pTissueNormals = vtkPolyDataNormals::New(); m_pTissueMapper = vtkPolyDataMapper::New(); m_pTissue = vtkActor::New(); m_pTextActor = vtkActor2D::New(); m_pTextMapper = vtkTextMapper::New(); // read a volume // QString strVolumeIndex; //strVolumeIndex.sprintf("../", nZoomOut, // iWidth, iLength, iHeight); QString strSeriesFormat; strSeriesFormat = QString("K:/Projects/TestVol3/%04d.jpg"); //qDebug() << strSeriesFormat; NameGeneratorType::Pointer pNameGenerator = NameGeneratorType::New(); pNameGenerator->SetSeriesFormat(strSeriesFormat.toStdString()); unsigned int nStartIndex = 1; pNameGenerator->SetStartIndex(nStartIndex); //0 ); pNameGenerator->SetEndIndex(256); pNameGenerator->SetIncrementIndex( 2 ); /////////// // optional //pReader->SetImageIO(itk::JPEGImageIO::New()); ReaderType::Pointer pReader = ReaderType::New(); pReader->SetFileNames(pNameGenerator->GetFileNames()); try { pReader->Update(); } catch (itk::ExceptionObject & err ) { std::cerr << "ExceptionObject caught !" << std::endl; std::cerr << err << std::endl; return EXIT_FAILURE; } m_pImageData = pReader->GetOutput(); // m_pImageData->DisconnectPipeline(); // execute pipeline m_pInvertIntensityFilter->SetInput(m_pImageData); m_pConnector->SetInput(m_pInvertIntensityFilter->GetOutput()); //m_pReader->GetOutput()); #if VTK_MAJOR_VERSION <= 5 m_pTissueExtractor->SetInput(m_pConnector->GetOutput()); #else m_pConnector->Update(); m_pTissueExtractor->SetInputData(m_pConnector->GetOutput()); #endif //int nIsoSurface = ui.lineEditValue->text().toInt(); //if(nIsoSurface == 0) int nIsoSurface = 155; m_pTissueExtractor->SetValue(0, nIsoSurface); #if VTK_MAJOR_VERSION <= 5 m_pTissueNormals->SetInput(m_pTissueExtractor->GetOutput()); #else m_pTissueNormals->SetInputConnection(m_pTissueExtractor->GetOutputPort()); #endif //m_pTissueNormals->SetFeatureAngle(60.0); #if VTK_MAJOR_VERSION <= 5 m_pTissueMapper->SetInput(m_pTissueNormals->GetOutput()); #else m_pTissueMapper->SetInputConnection(m_pTissueNormals->GetOutputPort()); #endif m_pTissueMapper->ScalarVisibilityOff(); m_pTissue->SetMapper(m_pTissueMapper); //if(!m_pVolumeMapper) //{ // m_pVolumeMapper = vtkFixedPointVolumeRayCastMapper::New(); // m_pVolumeMapper->SetInput(m_pConnector->GetOutput()); // m_pVolume = vtkVolume::New(); // m_pVolume->SetMapper(m_pVolumeMapper); // m_pVolume->Update(); // //m_pRenderer->AddActor(m_pVolume); m_pRenderer->AddActor(m_pTissue); m_pRenderer->SetBackground(0.0,0.0,0.4); m_pRenderer->ResetCamera(); m_pRenderer->GetRenderWindow()->Render(); m_pRenderWindowInteractor->Start(); // save to vtk vtkPolyDataWriter* pWriter = vtkPolyDataWriter::New(); #if VTK_MAJOR_VERSION <= 5 pWriter->SetInput(m_pTissueNormals->GetOutput()); #else pWriter->SetInputConnection(m_pTissueNormals->GetOutputPort()); #endif QString strVTKFileName; strVTKFileName.sprintf("test2.vtk"); pWriter->SetFileName(strVTKFileName.toStdString().c_str()); pWriter->SetFileTypeToBinary(); pWriter->Write(); // save to stl vtkSTLWriter* pSTLWriter = vtkSTLWriter::New(); #if VTK_MAJOR_VERSION <= 5 pSTLWriter->SetInput(m_pTissueNormals->GetOutput()); #else pSTLWriter->SetInputConnection(m_pTissueNormals->GetOutputPort()); #endif QString strSTLFileName; strSTLFileName.sprintf("test2.stl"); pSTLWriter->SetFileName(strSTLFileName.toStdString().c_str()); pSTLWriter->SetFileTypeToBinary(); pSTLWriter->Write(); // finalize m_pRenderer->Delete(); m_pTissueExtractor->Delete(); m_pTissueNormals->Delete(); m_pTissueMapper->Delete(); m_pTissue->Delete(); m_pTextActor->Delete();; m_pTextMapper->Delete(); pReader->Delete(); pWriter->Delete(); pSTLWriter->Delete(); // TODO: there are missing pointers to be deleted. Add them. return a.exec(); }