⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vtkview.cpp

📁 关于医学图象处理程序的VTK
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		skinNormals->Delete();
	}
	else
		AfxMessageBox("先打开一DICOM序列!");	
}

void CVTKView::OnChKitwarefilter() 
{
	CVTKDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here
	if(pDoc->m_vtkproc.GetFlag3D()==TRUE)
	{
		m_Flag_DicomTovtk=TRUE;
		CDICOM3DDlg m_dicom3ddlg;
		m_dicom3ddlg.DoModal();

		vtkRenderer *aRenderer = vtkRenderer::New();
		vtkRenderWindow *renWin = vtkRenderWindow::New();
		renWin->AddRenderer(aRenderer);
		vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
		iren->SetRenderWindow(renWin);

		vtkKitwareContourFilter* m_KitwareContourFilter=vtkKitwareContourFilter::New();
		m_KitwareContourFilter->SetInput(pDoc->m_vtkproc.GetDICOMReader3D()->GetOutput()); 
		m_KitwareContourFilter->SetValue(0, m_dicom3ddlg.m_extract);


		vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();
		skinNormals->SetInput(m_KitwareContourFilter->GetOutput());
		skinNormals->SetFeatureAngle(60.0);

		skinStripper->SetInput(skinNormals->GetOutput());

		vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
		skinMapper->SetInput(skinStripper->GetOutput());
		skinMapper->ScalarVisibilityOff();

		vtkActor *skin = vtkActor::New(); 
		skin->SetMapper(skinMapper);
		skin->GetProperty()->SetColor(1, 0.7, 0.6);
		skin->RotateX(90);
	
		vtkRenderer *ren1=vtkRenderer::New();
		ren1->AddActor(skin);
		ren1->SetBackground(0,0,0);

		renWin->AddRenderer(ren1);
		iren->SetRenderWindow(renWin);
		renWin->SetSize( 500, 500 );

		iren->Initialize();
		iren->Start();

		skinMapper->Delete();
		skin->Delete();
		ren1->Delete();
		renWin->Delete();
		iren->Delete();
		m_KitwareContourFilter->Delete();
		skinNormals->Delete();
	}
	else
		AfxMessageBox("先打开一DICOM序列!");	
}

void CVTKView::OnChDividingcubes() 
{
	CVTKDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here
	if(pDoc->m_vtkproc.GetFlag3D()==TRUE)
	{
		m_Flag_DicomTovtk=TRUE;
		CDICOM3DDlg m_dicom3ddlg;
		m_dicom3ddlg.DoModal();

		vtkRenderer *aRenderer = vtkRenderer::New();
		vtkRenderWindow *renWin = vtkRenderWindow::New();
		renWin->AddRenderer(aRenderer);
		vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
		iren->SetRenderWindow(renWin);

		vtkDividingCubes *iso=vtkDividingCubes::New();
		iso->SetInput(pDoc->m_vtkproc.GetDICOMReader3D()->GetOutput());
		iso->SetValue(m_dicom3ddlg.m_extract);
		iso->SetDistance(1);
		iso->SetIncrement(1);

		this->skinStripper->SetInput(iso->GetOutput());

		vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
		skinMapper->SetInput(this->skinStripper->GetOutput());
		skinMapper->ScalarVisibilityOff();

		vtkActor *skin = vtkActor::New(); 
		skin->SetMapper(skinMapper); 
		skin->GetProperty()->SetColor(1, 0.7, 0.6);
		skin->RotateX(90);
	
		vtkRenderer *ren1=vtkRenderer::New();
		ren1->AddActor(skin);
		ren1->SetBackground(0,0,0);

		renWin->AddRenderer(ren1);
		iren->SetRenderWindow(renWin);
		renWin->SetSize(500,500);

		iren->Initialize();
		iren->Start();

		skinMapper->Delete();
		skin->Delete();
		ren1->Delete();
		renWin->Delete();
		iren->Delete();
		iso->Delete();
	}
	else
		AfxMessageBox("先打开一DICOM序列!");
}

void CVTKView::OnFileVtk() 
{
	CVTKDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here
	char szFileters[]="VTK files(*.vtk)|*.vtk|All files (*.*)|*.*||";
	CFileDialog opendlg(TRUE,"","",
		OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFileters,this);

	if(opendlg.DoModal()==IDOK)
	{
	    pDoc->m_vtkproc.GetDataSetReader()->SetFileName(opendlg.GetPathName());
		pDoc->m_vtkproc.vtkShowGraph(pDoc->m_vtkproc.GetDataSetReader());
    }
}

void CVTKView::OnChDicomtovtk() 
{
	CVTKDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here
	if(m_Flag_DicomTovtk==TRUE)
	{
		char szFileters[]="vtk files(*.vtk)|*.vtk||";
		CFileDialog savedlg(FALSE,"","",
			OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFileters,this);

		if(savedlg.DoModal()==IDOK)
		{
			if(savedlg.GetFileExt()=="vtk")
			{
			vtkPolyDataWriter *wSP=vtkPolyDataWriter::New();
			wSP->SetInput(skinStripper->GetOutput());
			wSP->SetFileName(savedlg.GetPathName());
			wSP->Write();
			wSP->Delete();
			}
		}
		AfxMessageBox("已保存!");
	}
	else
		AfxMessageBox("先进行三维重建!");

}

void CVTKView::OnImageChange() 
{
	CVTKDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here
	CImageDlg imagedlg;
	imagedlg.DoModal();
 
	if(imagedlg.string1=="bmp"|imagedlg.string1=="BMP")
	{
	    pDoc->m_vtkproc.GetBMPReader()->SetFileName(imagedlg.m_edit1);
		if(imagedlg.string2=="bmp"|imagedlg.string2=="BMP")
		{
			vtkBMPWriter* wr=vtkBMPWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetBMPReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNG")
		{
			vtkPNGWriter* wr=vtkPNGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetBMPReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNM")
		{
			vtkPNMWriter* wr=vtkPNMWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetBMPReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="TIFF")
		{
			vtkTIFFWriter* wr=vtkTIFFWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetBMPReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="JPEG"|imagedlg.string2=="JPG"|imagedlg.string2=="JPE"|imagedlg.string2=="JFIF")
		{
			vtkJPEGWriter* wr=vtkJPEGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetBMPReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
	}
//////////////////////////////////////////////////////////////////////////////////////////
	else if(imagedlg.string1=="PNG")
	{
	    pDoc->m_vtkproc.GetPNGReader()->SetFileName(imagedlg.m_edit1);
		if(imagedlg.string2=="bmp"|imagedlg.string2=="BMP")
		{
			vtkBMPWriter* wr=vtkBMPWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNG")
		{
			vtkPNGWriter* wr=vtkPNGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNM")
		{
			vtkPNMWriter* wr=vtkPNMWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="TIFF")
		{
			vtkTIFFWriter* wr=vtkTIFFWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="JPEG"|imagedlg.string2=="JPG"|imagedlg.string2=="JPE"|imagedlg.string2=="JFIF")
		{
			vtkJPEGWriter* wr=vtkJPEGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
	}
////////////////////////////////////////////////////////////////////////////////////////////////////
	else if(imagedlg.string1=="PNM")
	{
	    pDoc->m_vtkproc.GetPNMReader()->SetFileName(imagedlg.m_edit1);
		if(imagedlg.string2=="bmp"|imagedlg.string2=="BMP")
		{
			vtkBMPWriter* wr=vtkBMPWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNMReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNG")
		{
			vtkPNGWriter* wr=vtkPNGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNMReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNM")
		{
			vtkPNMWriter* wr=vtkPNMWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNMReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="TIFF")
		{
			vtkTIFFWriter* wr=vtkTIFFWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNMReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="JPEG"|imagedlg.string2=="JPG"|imagedlg.string2=="JPE"|imagedlg.string2=="JFIF")
		{
			vtkJPEGWriter* wr=vtkJPEGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetPNMReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
	}
	//////////////////////////////////////////////////////////////////////////////////////
	else if(imagedlg.string1=="TIFF")
	{
	    pDoc->m_vtkproc.GetTIFFReader()->SetFileName(imagedlg.m_edit1);
		if(imagedlg.string2=="bmp"|imagedlg.string2=="BMP")
		{
			vtkBMPWriter* wr=vtkBMPWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetTIFFReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNG")
		{
			vtkPNGWriter* wr=vtkPNGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetTIFFReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNM")
		{
			vtkPNMWriter* wr=vtkPNMWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetTIFFReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="TIFF")
		{
			vtkTIFFWriter* wr=vtkTIFFWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetTIFFReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="JPEG"|imagedlg.string2=="JPG"|imagedlg.string2=="JPE"|imagedlg.string2=="JFIF")
		{
			vtkJPEGWriter* wr=vtkJPEGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetTIFFReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
	}
/////////////////////////////////////////////////////////////////////////////////////////////
	else if(imagedlg.string1=="dcm")
	{
	    pDoc->m_vtkproc.GetDICOMReader()->SetFileName(imagedlg.m_edit1);
		vtkImageShiftScale *shiftScale=vtkImageShiftScale::New();
		shiftScale->SetInput(pDoc->m_vtkproc.GetDICOMReader()->GetOutput());
		shiftScale->SetShift(0);
		shiftScale->SetScale(0.05);
		shiftScale->SetOutputScalarTypeToUnsignedChar(); 

		if(imagedlg.string2=="bmp"|imagedlg.string2=="BMP")
		{
			vtkBMPWriter* wr=vtkBMPWriter::New();
			wr->SetInput(shiftScale->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNG")
		{
			vtkPNGWriter* wr=vtkPNGWriter::New();
			wr->SetInput(shiftScale->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNM")
		{
			vtkPNMWriter* wr=vtkPNMWriter::New();
			wr->SetInput(shiftScale->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="TIFF")
		{
			AfxMessageBox("先转换为BMP图像,再转换为TIFF图像!");
		}
		else if(imagedlg.string2=="JPEG"|imagedlg.string2=="JPG"|imagedlg.string2=="JPE"|imagedlg.string2=="JFIF")
		{
			vtkJPEGWriter* wr=vtkJPEGWriter::New();
			wr->SetInput(shiftScale->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		shiftScale->Delete();
	}
	/////////////////////////////////////////////////////////////////////////////////
	else //if(imagedlg.string1=="JPG")
	{
	    pDoc->m_vtkproc.GetJPEGReader()->SetFileName(imagedlg.m_edit1);
		if(imagedlg.string2=="bmp"|imagedlg.string2=="BMP")
		{
			vtkBMPWriter* wr=vtkBMPWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetJPEGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNG")
		{
			vtkPNGWriter* wr=vtkPNGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetJPEGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="PNM")
		{
			vtkPNMWriter* wr=vtkPNMWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetJPEGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="TIFF")
		{
			vtkTIFFWriter* wr=vtkTIFFWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetJPEGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
		else if(imagedlg.string2=="JPEG"|imagedlg.string2=="JPG"|imagedlg.string2=="JPE"|imagedlg.string2=="JFIF")
		{
			vtkJPEGWriter* wr=vtkJPEGWriter::New();
			wr->SetInput(pDoc->m_vtkproc.GetJPEGReader()->GetOutput());
			wr->SetFileName(imagedlg.m_edit2);
			wr->Write();
			wr->Delete();
		}
	}
}

void CVTKView::OnFileOpen() 
{
	CVTKDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here
		char szFileters[]="Bitmap files(*.bmp)|*.bmp|\
		PNG files(*.PNG)|*.PNG|\
		PNM files(*.PNM)|*.PNM|\
		JPEG files(*.JPG;*.JPEG;*.JPE;*.JFIF)|*.JPG;*.JPEG;*.JPE;*.JFIF|\
		TIFF files (*.TIFF)|*.TIFF|\
		DICOM files(*.dcm)|*.dcm||";
	CFileDialog opendlg(TRUE,"","",
		OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFileters,this);
	if(opendlg.DoModal()==IDOK)
	{
		if(opendlg.GetFileExt()=="bmp"|opendlg.GetFileExt()=="BMP")
		{
			pDoc->m_vtkproc.GetBMPReader()->SetFileName(opendlg.GetPathName());
			pDoc->m_vtkproc.vtkShowImage(pDoc->m_vtkproc.GetBMPReader()->GetOutput());
		}
		else if(opendlg.GetFileExt()=="PNG")
		{
			pDoc->m_vtkproc.GetPNGReader()->SetFileName(opendlg.GetPathName());
			pDoc->m_vtkproc.vtkShowImage(pDoc->m_vtkproc.GetPNGReader()->GetOutput());
		}
		else if(opendlg.GetFileExt()=="PNM")
		{
			pDoc->m_vtkproc.GetPNMReader()->SetFileName(opendlg.GetPathName());
			pDoc->m_vtkproc.vtkShowImage(pDoc->m_vtkproc.GetPNMReader()->GetOutput());
		}
		else if(opendlg.GetFileExt()=="TIFF")
		{
			pDoc->m_vtkproc.GetTIFFReader()->SetFileName(opendlg.GetPathName());
			pDoc->m_vtkproc.vtkShowImage(pDoc->m_vtkproc.GetTIFFReader()->GetOutput());
		}
		else if(opendlg.GetFileExt()=="JPG"|opendlg.GetFileExt()=="JPEG"|opendlg.GetFileExt()=="JPE"|opendlg.GetFileExt()=="JFIF")
		{
			pDoc->m_vtkproc.GetJPEGReader()->SetFileName(opendlg.GetPathName());
			pDoc->m_vtkproc.vtkShowImage(pDoc->m_vtkproc.GetJPEGReader()->GetOutput());
		}
		else if(opendlg.GetFileExt()=="dcm")
		{
			pDoc->m_vtkproc.GetDICOMReader()->SetFileName(opendlg.GetPathName());
			pDoc->m_vtkproc.SetFlag(TRUE);
			pDoc->m_vtkproc.vtkShowDICOMImage(pDoc->m_vtkproc.GetDICOMReader()->GetOutput());
		}
	}
}

void CVTKView::OnChRaycast() 
{
	CVTKDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here


}

void CVTKView::OnPrGaussmooth() 
{
	CVTKDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here
	if(pDoc->m_vtkproc.GetFlag()==TRUE)
	{
		CSMOTHDlg m_smoothdlg;
		m_smoothdlg.DoModal();
	
		vtkImageGaussianSmooth *gs=vtkImageGaussianSmooth::New();
		gs->SetInput(pDoc->m_vtkproc.GetDICOMReader()->GetOutput());
		gs->SetDimensionality(m_smoothdlg.m_dimension);
		gs->SetRadiusFactors(1 ,1 ,0);

		pDoc->m_vtkproc.vtkShowDICOMImage(gs->GetOutput());
	}
	else
		AfxMessageBox("先打开一张CT图像!");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -