void CVTK01View::Slice3D()
{
int xyz[3];
double sp[3];
m_vtk->m_imgData->GetDimensions(xyz);
m_vtk->m_imgData->GetSpacing(sp);
if(xyz[0]+xyz[1]+xyz[2]<4)
{
AfxMessageBox(_T("No 3D data!!!"));
return;
}
pDlg->UpdateData(TRUE);
double pos[3];
pos[0]=(pDlg->Xposition-1)*sp[0];
pos[1]=(pDlg->Yposition-1)*sp[1];
pos[2]=(pDlg->Zposition-1)*sp[2];
//---------------------pipeline--------------------
m_vtk->m_pMapperList[0]->SetInput(m_vtk->m_planeList[0]->GetOutput());
m_vtk->m_pMapperList[1]->SetInput(m_vtk->m_planeList[1]->GetOutput());
m_vtk->m_pMapperList[2]->SetInput(m_vtk->m_planeList[2]->GetOutput());
m_vtk->m_actorList[0] ->SetMapper(m_vtk->m_pMapperList[0]);
m_vtk->m_actorList[1] ->SetMapper(m_vtk->m_pMapperList[1]);
m_vtk->m_actorList[2] ->SetMapper(m_vtk->m_pMapperList[2]);
m_vtk->m_actorList[0] ->SetTexture(m_vtk->m_atext1);
m_vtk->m_actorList[1] ->SetTexture(m_vtk->m_atext2);
m_vtk->m_actorList[2] ->SetTexture(m_vtk->m_atext3);
m_vtk->m_ren->AddActor(m_vtk->m_actorList[0]);
m_vtk->m_ren->AddActor(m_vtk->m_actorList[1]);
m_vtk->m_ren->AddActor(m_vtk->m_actorList[2]);
//---------------------Reslice --------------------
m_vtk->reslicex->SetInput(m_vtk->m_imgData);
m_vtk->reslicey->SetInput(m_vtk->m_imgData);
m_vtk->reslicez->SetInput(m_vtk->m_imgData);
m_vtk->reslicez->SetResliceAxesDirectionCosines( //ZSlice指向原始z軸,切片爲原來的xoy平面
1, 0, 0, // z
0, 1, 0, // ↗
0, 0, 1 // →x
); // ↓
m_vtk->reslicez->InterpolateOn(); // y
m_vtk->reslicez->SetInterpolationModeToLinear();
m_vtk->reslicez->SetResliceAxesOrigin(pos[0],pos[1],pos[2]);
m_vtk->reslicez->SetOutputDimensionality(2);
m_vtk->m_atext1->SetInput(m_vtk->reslicez->GetOutput());
m_vtk->reslicey->SetResliceAxesDirectionCosines( //ZSlice指向原始y軸反向,切片爲原來的xoz平面
1, 0, 0, // z y
0, 0, -1, // ↑↗
0, 1, 0 // →x
); //
m_vtk->reslicey->InterpolateOn(); //
m_vtk->reslicey->SetInterpolationModeToLinear();
m_vtk->reslicey->SetResliceAxesOrigin(pos[0],pos[1],pos[2]);
m_vtk->reslicey->SetOutputDimensionality(2);
m_vtk->m_atext2->SetInput(m_vtk->reslicey->GetOutput());
m_vtk->reslicex->SetResliceAxesDirectionCosines( //ZSlice指向原始x軸反向,切片爲原來的zoy平面
0, 0, -1, // x
0, 1, 0, // ↗
1, 0, 0 // z←
); // ↓
m_vtk->reslicex->InterpolateOn(); // y
m_vtk->reslicex->SetInterpolationModeToLinear();
m_vtk->reslicex->SetResliceAxesOrigin(pos[0],pos[1],pos[2]);
m_vtk->reslicex->SetOutputDimensionality(2);
m_vtk->m_atext3->SetInput(m_vtk->reslicex->GetOutput());
//---------------------set plane position--------------------
m_vtk->m_planeList[0]->SetXResolution(xyz[0]);//切片xoy面平行於原來的xoy
m_vtk->m_planeList[0]->SetYResolution(xyz[1]);
//m_vtk->m_planeList[0]->SetNormal(0,0,1); //根據下面三個點就可以確定此法向量
m_vtk->m_planeList[0]->SetOrigin(0,0,0);
m_vtk->m_planeList[0]->SetPoint1( (xyz[0]-1)*sp[0],0,0);
m_vtk->m_planeList[0]->SetPoint2(0,(xyz[1]-1)*sp[1],0);
m_vtk->m_planeList[0]->Push(pos[2]);
m_vtk->m_planeList[1]->SetXResolution(xyz[0]);//切片xoy面平行於原來的xoz
m_vtk->m_planeList[1]->SetYResolution(xyz[2]);
//m_vtk->m_planeList[1]->SetNormal(0,-1,0);
m_vtk->m_planeList[1]->SetOrigin(0,0,(xyz[2]-1)*sp[2]);
m_vtk->m_planeList[1]->SetPoint1((xyz[0]-1)*sp[0],0,(xyz[2]-1)*sp[2]);
m_vtk->m_planeList[1]->SetPoint2(0,0,0);
m_vtk->m_planeList[1]->Push(pos[1]);
m_vtk->m_planeList[2]->SetXResolution(xyz[2]);//切片xoy面平行於原來的zoy
m_vtk->m_planeList[2]->SetYResolution(xyz[1]);
//m_vtk->m_planeList[2]->SetNormal(-1,0,0);
m_vtk->m_planeList[2]->SetOrigin(0,0,(xyz[2]-1)*sp[2]);
m_vtk->m_planeList[2]->SetPoint1(0,0,0);
m_vtk->m_planeList[2]->SetPoint2(0,(xyz[1]-1)*sp[1],(xyz[2]-1)*sp[2]);
m_vtk->m_planeList[2]->Push(pos[0]);
m_vtk->m_ren->GetViewProps()->RemoveAllItems();
m_vtk->m_ren->AddActor(m_vtk->m_axesactorC);
m_vtk->m_ren->AddActor(m_vtk->m_actorList[0]);
m_vtk->m_ren->AddActor(m_vtk->m_actorList[1]);
m_vtk->m_ren->AddActor(m_vtk->m_actorList[2]);
m_vtk->m_renWin->Render();
}
vtkImageReslice 切片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.