/********************************************************************** 文件名: 5.3_ImageLogicExample.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 int main(int, char *[]) { vtkSmartPointer imageSource1 = vtkSmartPointer::New(); imageSource1->SetScalarTypeToUnsignedChar(); imageSource1->SetNumberOfScalarComponents(1); imageSource1->SetExtent(0, 100, 0, 100, 0, 0); imageSource1->SetDrawColor(0.0); imageSource1->FillBox(0,100,0,100); imageSource1->SetDrawColor(255); imageSource1->FillBox(20,60,20,60); imageSource1->Update(); vtkSmartPointer imageSource2 = vtkSmartPointer::New(); imageSource2->SetNumberOfScalarComponents(1); imageSource2->SetScalarTypeToUnsignedChar(); imageSource2->SetExtent(0, 100, 0, 100, 0, 0); imageSource2->SetDrawColor(0.0); imageSource2->FillBox(0,100,0,100); imageSource2->SetDrawColor(255.0); imageSource2->FillBox(40,80,40,80); imageSource2->Update(); vtkSmartPointer imageLogic = vtkSmartPointer::New(); imageLogic->SetInput1(imageSource1->GetOutput()); imageLogic->SetInput2(imageSource2->GetOutput()); imageLogic->SetOperationToXor(); imageLogic->SetOutputTrueValue(128); imageLogic->Update(); vtkSmartPointer originalActor1 = vtkSmartPointer::New(); originalActor1->SetInput(imageSource1->GetOutput()); vtkSmartPointer originalActor2 = vtkSmartPointer::New(); originalActor2->SetInput(imageSource2->GetOutput()); vtkSmartPointer logicActor = vtkSmartPointer::New(); logicActor->SetInput(imageLogic->GetOutput()); double leftViewport[4] = {0.0, 0.0, 0.33, 1.0}; double midViewport[4] = {0.33, 0.0, 0.66, 1.0}; double rightViewport[4] = {0.66, 0.0, 1.0, 1.0}; vtkSmartPointer originalRenderer1 = vtkSmartPointer::New(); originalRenderer1->SetViewport(leftViewport); originalRenderer1->AddActor(originalActor1); originalRenderer1->ResetCamera(); originalRenderer1->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer originalRenderer2 = vtkSmartPointer::New(); originalRenderer2->SetViewport(midViewport); originalRenderer2->AddActor(originalActor2); originalRenderer2->ResetCamera(); originalRenderer2->SetBackground(0.8, 0.8, 0.8); vtkSmartPointer logicRenderer = vtkSmartPointer::New(); logicRenderer->SetViewport(rightViewport); logicRenderer->AddActor(logicActor); logicRenderer->ResetCamera(); logicRenderer->SetBackground(0.6, 0.6, 0.6); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->AddRenderer(originalRenderer1); renderWindow->AddRenderer(originalRenderer2); renderWindow->AddRenderer(logicRenderer); renderWindow->SetSize(640, 320); renderWindow->Render(); renderWindow->SetWindowName("ImageLogicExample"); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); vtkSmartPointer style = vtkSmartPointer::New(); renderWindowInteractor->SetInteractorStyle(style); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }