1 #include
2 VTK_MODULE_INIT(vtkRenderingOpenGL);3 VTK_MODULE_INIT(vtkRenderingFreeType);4 VTK_MODULE_INIT(vtkInteractionStyle);5
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 //研究一下坐标系显示位置
20 #include
21 intmain()22 {23 vtkSmartPointer sourcePoints =
24 vtkSmartPointer::New();25 double sourcePoint1[3] = { 0.5, 0, 0};26 sourcePoints->InsertNextPoint(sourcePoint1);27 double sourcePoint2[3] = { 0, 0.5, 0};28 sourcePoints->InsertNextPoint(sourcePoint2);29 double sourcePoint3[3] = { 0, 0, 0.5};30 sourcePoints->InsertNextPoint(sourcePoint3);31
32 vtkSmartPointer targetPoints =
33 vtkSmartPointer::New();34 double targetPoint1[3] = { 0.0, 0.0, 0.55};35 targetPoints->InsertNextPoint(targetPoint1);36 double targetPoint2[3] = { 0.0, 0.55, 0.0};37 targetPoints->InsertNextPoint(targetPoint2);38 double targetPoint3[3] = { -0.55, 0.0, 0.0};39 targetPoints->InsertNextPoint(targetPoint3);40 //利用Landmark算法求变换矩阵
41 vtkSmartPointer landmarkTransform =
42 vtkSmartPointer::New();43 landmarkTransform->SetSourceLandmarks(sourcePoints);44 landmarkTransform->SetTargetLandmarks(targetPoints);45 landmarkTransform->SetModeToRigidBody(); //执行刚体配准
46 landmarkTransform->Update();47 构造PolyData类型 进行图形可视化48 vtkSmartPointer source =
49 vtkSmartPointer::New();50 source->SetPoints(sourcePoints);51 vtkSmartPointer target =
52 vtkSmartPointer::New();53 target->SetPoints(targetPoints);54 /
55 vtkSmartPointer sourceGlyphFilter =
56 vtkSmartPointer::New();57 sourceGlyphFilter->SetInputData(source);58 sourceGlyphFilter->Update();59
60 vtkSmartPointer targetGlyphFilter =
61 vtkSmartPointer::New();62 targetGlyphFilter->SetInputData(target);63 targetGlyphFilter->Update();64 源数据施加配准变换矩阵65 vtkSmartPointer transformFilter =
66 vtkSmartPointer::New();67 transformFilter->SetInputData(sourceGlyphFilter->GetOutput());68 transformFilter->SetTransform(landmarkTransform);69 transformFilter->Update();70 /
71 vtkSmartPointer sourceMapper =
72 vtkSmartPointer::New();73 sourceMapper->SetInputConnection(sourceGlyphFilter->GetOutputPort());74
75 vtkSmartPointer sourceActor =
76 vtkSmartPointer::New();77 sourceActor->SetMapper(sourceMapper);78 sourceActor->GetProperty()->SetColor(1, 1, 0);79 sourceActor->GetProperty()->SetPointSize(10);80
81 vtkSmartPointer targetMapper =
82 vtkSmartPointer::New();83 targetMapper->SetInputConnection(targetGlyphFilter->GetOutputPort());84
85 vtkSmartPointer targetActor =
86 vtkSmartPointer::New();87 targetActor->SetMapper(targetMapper);88 targetActor->GetProperty()->SetColor(0, 1, 0);89 targetActor->GetProperty()->SetPointSize(10);90
91 vtkSmartPointer solutionMapper =
92 vtkSmartPointer::New();93 solutionMapper->SetInputConnection(transformFilter->GetOutputPort());94
95 vtkSmartPointer solutionActor =
96 vtkSmartPointer::New();97 solutionActor->SetMapper(solutionMapper);98 solutionActor->GetProperty()->SetColor(1, 0, 0);99 solutionActor->GetProperty()->SetPointSize(10);100
101 vtkSmartPointer render =
102 vtkSmartPointer::New();103 render->AddActor(sourceActor);104 render->AddActor(targetActor);105 render->AddActor(solutionActor);106 render->SetBackground(0, 0, 0);107
108 vtkSmartPointer rw =
109 vtkSmartPointer::New();110 rw->AddRenderer(render);111 rw->SetSize(480, 480);112 rw->SetWindowName("Regisration by Landmark");113 //设置坐标系显示功能
114 vtkSmartPointer axes =
115 vtkSmartPointer::New();116 axes->SetScale(10);117 render->AddActor(axes);118
119 vtkSmartPointer rwi =
120 vtkSmartPointer::New();121 rwi->SetRenderWindow(rw);122 /************************************************************/
123 vtkSmartPointer widget =
124 vtkSmartPointer::New();125 widget->SetOutlineColor(0.9300, 0.5700, 0.1300);126 widget->SetOrientationMarker(axes);127 widget->SetInteractor(rwi); //加入鼠标交互
128 widget->SetViewport(0.0, 0.0, 0.3, 0.3); //设置显示位置
129 widget->SetEnabled(1);130 widget->InteractiveOn();//开启鼠标交互
131 /************************************************************/
132 render->ResetCamera();133 rw->Render();134 rwi->Initialize();135 rwi->Start();136
137 return 0;138 }