📄 headclip.cpp
字号:
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkVolume16Reader.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkProperty.h"
#include "vtkOutlineFilter.h"
#include "vtkCamera.h"
#include "vtkPolyDataMapper.h"
#include "vtkStripper.h"
#include "vtkPolyDataNormals.h"
#include "vtkContourFilter.h"
#include "vtkPlane.h"
#include "vtkClipPolyData.h"
#include "vtkCutter.h"
#include "vtkPolyData.h"
#include "vtkTriangleFilter.h"
int main ()
{
vtkRenderer *ren1 = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren1);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
vtkVolume16Reader *reader = vtkVolume16Reader::New();
reader->SetDataDimensions(64,64);
reader->SetDataByteOrderToLittleEndian();
reader->SetFilePrefix ("E://Data/head/half"); //64*64.dcm 1~93 //256*256.dcm 1~113
reader->SetImageRange(1, 93);
reader->SetDataSpacing (3.2, 3.2, 1.5);
vtkPlane *plane=vtkPlane::New(); //plane位置由初始位置Origin和法线方向Normal确定
plane->SetOrigin(95,1,0); //设置plane的原始位置 参数:(x,y,z)
plane->SetNormal(0,0,0); //设置plane的法线方向 参数:(x,y,z)
vtkContourFilter *boneExtractor = vtkContourFilter::New();
boneExtractor->SetInput((vtkDataSet *) reader->GetOutput());
boneExtractor->SetValue(0, 1150);
vtkPolyDataNormals *boneNormals = vtkPolyDataNormals::New();
boneNormals->SetInput(boneExtractor->GetOutput());
boneNormals->SetFeatureAngle(60.0);
vtkClipPolyData *clipper=vtkClipPolyData::New();
clipper->SetInput(boneNormals->GetOutput());
clipper->SetClipFunction(plane);
clipper->GenerateClipScalarsOn();
clipper->GenerateClippedOutputOn();
clipper->SetValue(0.5);
vtkPolyDataMapper *clipMapper=vtkPolyDataMapper::New();
clipMapper->SetInput(clipper->GetOutput());
clipMapper->ScalarVisibilityOff();
vtkProperty *backProp=vtkProperty::New();
backProp->SetDiffuseColor(50,50,50);
vtkActor *clipActor=vtkActor::New();
clipActor->SetMapper(clipMapper);
clipActor->SetBackfaceProperty(backProp);
clipActor->GetProperty()->SetDiffuseColor(1, 1, 0.9412);
vtkCutter *cutEdges=vtkCutter::New();
cutEdges->SetInput(boneNormals->GetOutput());
cutEdges->SetCutFunction(plane);
cutEdges->GenerateCutScalarsOn();
cutEdges->SetValue(0,0.5);
vtkStripper *cutStrips=vtkStripper::New();
cutStrips->SetInput(cutEdges->GetOutput());
cutStrips->Update();
vtkPolyData *cutPoly=vtkPolyData::New();
cutPoly->SetPoints((cutStrips->GetOutput())->GetPoints());
cutPoly->SetPolys((cutStrips->GetOutput())->GetLines());
vtkTriangleFilter *cutTriangles=vtkTriangleFilter::New();
cutTriangles->SetInput(cutPoly);
vtkPolyDataMapper *cutMapper=vtkPolyDataMapper::New();
cutMapper->SetInput(cutPoly);
cutMapper->SetInput(cutTriangles->GetOutput());
vtkActor *cutActor=vtkActor::New();
cutActor->SetMapper(cutMapper);
cutActor->GetProperty()->SetColor(10,100,30);
vtkPolyDataMapper *restMapper=vtkPolyDataMapper::New();
restMapper->SetInput(clipper->GetOutput());
restMapper->ScalarVisibilityOff();
vtkActor *restActor=vtkActor::New();
restActor->SetMapper(restMapper);
restActor->GetProperty()->SetRepresentationToWireframe();
vtkCamera *aCamera = vtkCamera::New();
aCamera->SetViewUp (0, 0, -1);
aCamera->SetPosition (0, 1, 0);
aCamera->SetFocalPoint (0, 0, 0);
aCamera->ComputeViewPlaneNormal();
ren1->AddActor(clipActor);
ren1->AddActor(cutActor);
ren1->AddActor(restActor);
ren1->SetActiveCamera(aCamera);
ren1->ResetCamera ();
aCamera->Azimuth(30);
aCamera->Elevation(30);
aCamera->Dolly(1.0);
ren1->SetBackground(0,0,0);
ren1->ResetCameraClippingRange();
renWin->SetSize(600,600);
renWin->Render();
iren->Initialize();
iren->Start();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -