VTK例子20-vtkImagePlaneWidget显示四幅图像
vtkImagePlaneWidget显示四幅图像#include "stdafx.h"#include "vtkActor.h"#include "vtkCamera.h"#include "vtkCellPicker.h"#include "vtkCommand.h"#include "vtkImageActor.h"#include "vtkImageMapToColors.h"#include "vtkImagePlaneWidget.h"#include "vtkImageReader.h"#include "vtkInteractorEventRecorder.h"#include "vtkLookupTable.h"#include "vtkOutlineFilter.h"#include "vtkPolyDataMapper.h"#include "vtkProperty.h"#include "vtkRenderWindow.h"#include "vtkRenderWindowInteractor.h"#include "vtkRenderer.h"#include "vtkVolume16Reader.h"#include "vtkImageData.h"#include "vtkTestUtilities.h"#include "vtkRegressionTestImage.h"#include "vtkDebugLeaks.h"class vtkWidgetWindowLevelCallback : public vtkCommand{public:static vtkWidgetWindowLevelCallback *New(){ return new vtkWidgetWindowLevelCallback; }void Execute( vtkObject *caller, unsigned long vtkNotUsed( event ), void *callData ){ vtkImagePlaneWidget* self = reinterpret_cast< vtkImagePlaneWidget* >( caller ); if(!self) return; double* wl = static_cast<double*>( callData ); if ( self == this->WidgetX ) { this->WidgetY->SetWindowLevel(wl,wl); this->WidgetZ->SetWindowLevel(wl,wl); } else if( self == this->WidgetY ) { this->WidgetX->SetWindowLevel(wl,wl); this->WidgetZ->SetWindowLevel(wl,wl); } else if (self == this->WidgetZ) { this->WidgetX->SetWindowLevel(wl,wl); this->WidgetY->SetWindowLevel(wl,wl); }}vtkWidgetWindowLevelCallback():WidgetX( 0 ), WidgetY( 0 ), WidgetZ ( 0 ) {}vtkImagePlaneWidget* WidgetX;vtkImagePlaneWidget* WidgetY;vtkImagePlaneWidget* WidgetZ;};int main( int argc, char *argv[] ){char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/headsq/quarter");vtkVolume16Reader* v16 =vtkVolume16Reader::New(); v16->SetDataDimensions( 64, 64); v16->SetDataByteOrderToLittleEndian(); v16->SetImageRange( 1, 93); v16->SetDataSpacing( 3.2, 3.2, 1.5); v16->SetFilePrefix("E://VTK//VTKData//Data//headsq//quarter"); //v16->SetFilePrefix(fname); v16->SetDataMask( 0x7fff); v16->Update();delete[] fname;vtkOutlineFilter* outline = vtkOutlineFilter::New(); outline->SetInputConnection(v16->GetOutputPort());vtkPolyDataMapper* outlineMapper = vtkPolyDataMapper::New(); outlineMapper->SetInputConnection(outline->GetOutputPort());vtkActor* outlineActor =vtkActor::New(); outlineActor->SetMapper( outlineMapper);vtkRenderer* ren1 = vtkRenderer::New();vtkRenderer* ren2 = vtkRenderer::New();vtkRenderer* ren3 = vtkRenderer::New();vtkRenderer* ren = vtkRenderer::New();vtkRenderWindow* renWin = vtkRenderWindow::New(); renWin->AddRenderer(ren1); renWin->AddRenderer(ren2); renWin->AddRenderer(ren3); renWin->AddRenderer(ren);vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin);vtkCellPicker* picker = vtkCellPicker::New(); picker->SetTolerance(0.005);vtkProperty* ipwProp = vtkProperty::New(); //assign default props to the ipw's texture plane actor
vtkImagePlaneWidget* planeWidgetX = vtkImagePlaneWidget::New(); planeWidgetX->SetInteractor( iren); planeWidgetX->SetKeyPressActivationValue('x'); planeWidgetX->SetPicker(picker); planeWidgetX->RestrictPlaneToVolumeOn(); planeWidgetX->GetPlaneProperty()->SetColor(1,0,0); planeWidgetX->SetTexturePlaneProperty(ipwProp); planeWidgetX->TextureInterpolateOff(); planeWidgetX->SetResliceInterpolateToNearestNeighbour(); planeWidgetX->SetInput(v16->GetOutput()); planeWidgetX->SetPlaneOrientationToXAxes(); planeWidgetX->SetSliceIndex(32); planeWidgetX->GetTexturePlaneProperty()->SetOpacity(1); planeWidgetX->DisplayTextOn(); planeWidgetX->On(); planeWidgetX->InteractionOn(); vtkImagePlaneWidget* planeWidgetY = vtkImagePlaneWidget::New(); planeWidgetY->SetInteractor( iren); planeWidgetY->SetKeyPressActivationValue('y'); planeWidgetY->SetPicker(picker); planeWidgetY->GetPlaneProperty()->SetColor(1,1,0); planeWidgetY->SetTexturePlaneProperty(ipwProp); planeWidgetY->TextureInterpolateOn(); planeWidgetY->SetResliceInterpolateToLinear(); planeWidgetY->SetInput(v16->GetOutput()); planeWidgetY->SetPlaneOrientationToYAxes(); planeWidgetY->SetSlicePosition(122.5); planeWidgetY->GetTexturePlaneProperty()->SetOpacity(1); planeWidgetY->SetLookupTable( planeWidgetX->GetLookupTable()); planeWidgetY->DisplayTextOn(); planeWidgetY->UpdatePlacement(); planeWidgetY->On();vtkImagePlaneWidget* planeWidgetZ = vtkImagePlaneWidget::New(); planeWidgetZ->SetInteractor( iren); planeWidgetZ->SetKeyPressActivationValue('z'); planeWidgetZ->SetPicker(picker); planeWidgetZ->GetPlaneProperty()->SetColor(0,0,1); planeWidgetZ->SetTexturePlaneProperty(ipwProp); planeWidgetZ->TextureInterpolateOn(); planeWidgetZ->SetResliceInterpolateToCubic(); planeWidgetZ->SetInput(v16->GetOutput()); planeWidgetZ->SetPlaneOrientationToZAxes(); planeWidgetZ->SetSliceIndex(46); planeWidgetZ->GetTexturePlaneProperty()->SetOpacity(1); planeWidgetZ->SetLookupTable( planeWidgetX->GetLookupTable()); planeWidgetZ->DisplayTextOn(); planeWidgetZ->On(); vtkWidgetWindowLevelCallback* cbk = vtkWidgetWindowLevelCallback::New(); cbk->WidgetX = planeWidgetX; cbk->WidgetY = planeWidgetY; cbk->WidgetZ = planeWidgetZ;// planeWidgetX->AddObserver( vtkCommand::EndWindowLevelEvent, cbk ); //planeWidgetY->AddObserver( vtkCommand::EndWindowLevelEvent, cbk ); //planeWidgetZ->AddObserver( vtkCommand::EndWindowLevelEvent, cbk ); cbk->Delete();//double wl;// planeWidgetZ->GetWindowLevel(wl);
// Add a 2D image to test the GetReslice method// vtkImageMapToColors* colorMap1 = vtkImageMapToColors::New(); colorMap1->PassAlphaToOutputOff(); colorMap1->SetActiveComponent(0); colorMap1->SetOutputFormatToLuminance(); colorMap1->SetInput(planeWidgetX->GetResliceOutput()); colorMap1->SetLookupTable(planeWidgetX->GetLookupTable()); vtkImageActor* imageActor1 = vtkImageActor::New(); imageActor1->PickableOff(); imageActor1->SetInput(colorMap1->GetOutput()); vtkImageMapToColors* colorMap2 = vtkImageMapToColors::New(); colorMap2->PassAlphaToOutputOff(); colorMap2->SetActiveComponent(0); colorMap2->SetOutputFormatToLuminance(); colorMap2->SetInput(planeWidgetY->GetResliceOutput()); colorMap2->SetLookupTable(planeWidgetX->GetLookupTable());vtkImageActor* imageActor2 = vtkImageActor::New(); imageActor2->PickableOff(); imageActor2->SetInput(colorMap2->GetOutput());vtkImageMapToColors* colorMap3 = vtkImageMapToColors::New(); colorMap3->PassAlphaToOutputOff(); colorMap3->SetActiveComponent(0); colorMap3->SetOutputFormatToLuminance(); colorMap3->SetInput(planeWidgetZ->GetResliceOutput()); colorMap3->SetLookupTable(planeWidgetX->GetLookupTable());vtkImageActor* imageActor3 = vtkImageActor::New(); imageActor3->PickableOff(); imageActor3->SetInput(colorMap3->GetOutput()); //Add the actorsren->AddActor( outlineActor);ren1->AddActor( imageActor1);ren2->AddActor( imageActor2);ren3->AddActor( imageActor3);ren->SetBackground( 0.1, 0.1, 0.2);ren1->SetBackground( 0.1, 0.2, 0.1);ren2->SetBackground( 0.2, 0.1, 0.2);ren3->SetBackground( 0.2, 0.2, 0.2);renWin->SetSize( 600, 400);ren->SetViewport(0,0.5,0.5,1);ren1->SetViewport(0.5,0.5,1,1);ren2->SetViewport(0,0,0.5,0.5);ren3->SetViewport(0.5,0,1,0.5);// Set the actors' postions//renWin->Render();//iren->SetEventPosition(100,200);//iren->SetKeyCode('r');//iren->InvokeEvent(vtkCommand::CharEvent,NULL);//iren->SetEventPosition( 200,200);//iren->SetKeyCode('r');// iren->InvokeEvent(vtkCommand::CharEvent,NULL);renWin->Render();ren->GetActiveCamera()->Elevation(110);ren->GetActiveCamera()->SetViewUp(0, 0, -1);ren->GetActiveCamera()->Azimuth(45);ren->GetActiveCamera()->Dolly(1.15);ren->ResetCameraClippingRange();iren->Initialize();iren->Start();renWin->Render();// Test SetKeyPressActivationValue for one of the widgets////iren->SetKeyCode('z');//iren->InvokeEvent(vtkCommand::CharEvent,NULL);//iren->SetKeyCode('z');//iren->InvokeEvent(vtkCommand::CharEvent,NULL);// Remove the observers so we can go interactive. Without this the "-I"// testing option fails.int retVal = vtkRegressionTestImage( renWin );if ( retVal == vtkRegressionTester::DO_INTERACTOR){ iren->Start();} //Clean upgetchar();cbk->Delete();ipwProp->Delete();planeWidgetX->Delete();planeWidgetY->Delete();planeWidgetZ->Delete();colorMap1->Delete();imageActor1->Delete();colorMap2->Delete();imageActor2->Delete();colorMap3->Delete();imageActor3->Delete(); picker->Delete();outlineActor->Delete();outlineMapper->Delete();outline->Delete();iren->Delete();renWin->Delete();ren->Delete();ren1->Delete();ren2->Delete();ren3->Delete();v16->Delete();return !retVal;} 看着还不错,学习下 顶贴 回复看下,!! 顶
页:
[1]