📄 vtkview.cpp
字号:
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 + -