/********************************************************************** 文件名: 6.8_PolyDataLandmarkReg.cpp Copyright (c) 张晓东, 罗火灵. All rights reserved. 更多信息请访问: http://www.vtkchina.org (VTK中国) http://blog.csdn.net/www_doling_net (东灵工作室) **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include int main(int, char *[]) { vtkSmartPointer sourcePoints = vtkSmartPointer::New(); double sourcePoint1[3] = {0.5, 0.0, 0.0}; sourcePoints->InsertNextPoint(sourcePoint1); double sourcePoint2[3] = {0.0, 0.5, 0.0}; sourcePoints->InsertNextPoint(sourcePoint2); double sourcePoint3[3] = {0.0, 0.0, 0.5}; sourcePoints->InsertNextPoint(sourcePoint3); vtkSmartPointer targetPoints = vtkSmartPointer::New(); double targetPoint1[3] = {0.0, 0.0, 0.55}; targetPoints->InsertNextPoint(targetPoint1); double targetPoint2[3] = {0.0, 0.55, 0.0}; targetPoints->InsertNextPoint(targetPoint2); double targetPoint3[3] = {-0.55, 0.0, 0.0}; targetPoints->InsertNextPoint(targetPoint3); vtkSmartPointer landmarkTransform = vtkSmartPointer::New(); landmarkTransform->SetSourceLandmarks(sourcePoints); landmarkTransform->SetTargetLandmarks(targetPoints); landmarkTransform->SetModeToRigidBody(); landmarkTransform->Update(); vtkSmartPointer source = vtkSmartPointer::New(); source->SetPoints(sourcePoints); vtkSmartPointer target = vtkSmartPointer::New(); target->SetPoints(targetPoints); vtkSmartPointer sourceGlyphFilter = vtkSmartPointer::New(); sourceGlyphFilter->SetInput(source); sourceGlyphFilter->Update(); vtkSmartPointer targetGlyphFilter = vtkSmartPointer::New(); targetGlyphFilter->SetInput(target); targetGlyphFilter->Update(); vtkSmartPointer transformFilter = vtkSmartPointer::New(); transformFilter->SetInput(sourceGlyphFilter->GetOutput()); transformFilter->SetTransform(landmarkTransform); transformFilter->Update(); vtkSmartPointer sourceMapper = vtkSmartPointer::New(); sourceMapper->SetInputConnection(sourceGlyphFilter->GetOutputPort()); vtkSmartPointer sourceActor = vtkSmartPointer::New(); sourceActor->SetMapper(sourceMapper); sourceActor->GetProperty()->SetColor(1,1,0); sourceActor->GetProperty()->SetPointSize(5); vtkSmartPointer targetMapper = vtkSmartPointer::New(); targetMapper->SetInputConnection(targetGlyphFilter->GetOutputPort()); vtkSmartPointer targetActor = vtkSmartPointer::New(); targetActor->SetMapper(targetMapper); targetActor->GetProperty()->SetColor(1,0,0); targetActor->GetProperty()->SetPointSize(5); vtkSmartPointer solutionMapper = vtkSmartPointer::New(); solutionMapper->SetInputConnection(transformFilter->GetOutputPort()); vtkSmartPointer solutionActor = vtkSmartPointer::New(); solutionActor->SetMapper(solutionMapper); solutionActor->GetProperty()->SetColor(0,0,1); solutionActor->GetProperty()->SetPointSize(5); vtkSmartPointer renderer = vtkSmartPointer::New(); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->AddRenderer(renderer); renderer->AddActor(sourceActor); renderer->AddActor(targetActor); renderer->AddActor(solutionActor); vtkSmartPointer axes = vtkSmartPointer::New(); axes->SetScale(30); renderer->AddActor(axes); renderer->SetBackground(.3, .6, .3); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindow->SetSize(640, 480); renderWindow->Render(); renderWindow->SetWindowName("PolyDataLandmarkReg"); renderWindow->Render(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }