⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slice3.cpp

📁 VTK入门样例(种类齐全)
💻 CPP
字号:
#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 "vtkCallbackCommand.h"
#include "vtkActor2D.h"
#include "vtkPointWidget.h"
#include "vtkInteractorStyleImage.h"

#include "vtkImageMapper.h"
#include "vtkStructuredPointsReader.h"
#include"vtkBMPReader.h"
#include"vtkWindowToImageFilter.h"

vtkImagePlaneWidget* planeWidgetX;
vtkImagePlaneWidget* planeWidgetY;
vtkImagePlaneWidget* planeWidgetZ;

class vtkmyPWCallbackz : public vtkCommand
{
public:
  static vtkmyPWCallbackz *New() 
    { return new vtkmyPWCallbackz; }
  virtual void Execute(vtkObject *caller, unsigned long, void*)
    {
      vtkPointWidget *pointWidget = reinterpret_cast<vtkPointWidget*>(caller);

	  double position[3];    
	  pointWidget->GetPosition(position);
	  this->WidgetX->SetSlicePosition(position[0]);
	  this->WidgetY->SetSlicePosition(position[1]);
    }
  vtkmyPWCallbackz():WidgetX(0), WidgetY(0){}
  vtkImagePlaneWidget* WidgetX;
  vtkImagePlaneWidget* WidgetY;
};

class vtkmyPWCallbackx : public vtkCommand
{
public:
  static vtkmyPWCallbackx *New() 
    { return new vtkmyPWCallbackx; }
  virtual void Execute(vtkObject *caller, unsigned long, void*)
    {
      vtkPointWidget *pointWidget = reinterpret_cast<vtkPointWidget*>(caller);

	  double position[3];    
	  pointWidget->GetPosition(position);
	  this->WidgetY->SetSlicePosition(position[0]);
	  this->WidgetZ->SetSlicePosition(position[1]);
    }
  vtkmyPWCallbackx():WidgetY(0), WidgetZ(0){}
  vtkImagePlaneWidget* WidgetY;
  vtkImagePlaneWidget* WidgetZ;
};

class vtkmyPWCallbacky : public vtkCommand
{
public:
  static vtkmyPWCallbacky *New() 
    { return new vtkmyPWCallbacky; }
  virtual void Execute(vtkObject *caller, unsigned long, void*)
    {
      vtkPointWidget *pointWidget = reinterpret_cast<vtkPointWidget*>(caller);

	  double position[3];    
	  pointWidget->GetPosition(position);
	  this->WidgetX->SetSlicePosition(position[1]);
	  this->WidgetZ->SetSlicePosition(position[0]);
    }
  vtkmyPWCallbacky():WidgetX(0), WidgetZ(0){}
  vtkImagePlaneWidget* WidgetX;
  vtkImagePlaneWidget* WidgetZ;
};


int main()
{  
  vtkRenderer* ren1 = vtkRenderer::New();
  vtkRenderer* ren2 = vtkRenderer::New();
  vtkRenderer* ren3 = vtkRenderer::New();
  vtkRenderer* ren4 = vtkRenderer::New();
  vtkRenderer* ren5 = vtkRenderer::New();

  vtkRenderWindow* renWin = vtkRenderWindow::New();	
    renWin->AddRenderer(ren5);
    renWin->AddRenderer(ren2);
    renWin->AddRenderer(ren3);
    renWin->AddRenderer(ren4);
	renWin->AddRenderer(ren1);

  vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
    iren->SetRenderWindow(renWin);

  vtkInteractorStyleImage *interactor=vtkInteractorStyleImage::New();
    iren-> SetInteractorStyle (interactor);
/////////////////

	vtkStructuredPointsReader *reader=vtkStructuredPointsReader::New();
	    reader->SetFileName("E://CT/fei.VTK");
	reader->Update();

  vtkOutlineFilter* outline = vtkOutlineFilter::New();
    outline->SetInputConnection(reader->GetOutputPort());

  vtkPolyDataMapper* outlineMapper = vtkPolyDataMapper::New();
    outlineMapper->SetInputConnection(outline->GetOutputPort());

  vtkCellPicker* picker = vtkCellPicker::New();
    picker->SetTolerance(0.005);

  vtkProperty* ipwProp = vtkProperty::New();
   //assign default props to the ipw's texture plane actor

  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->SetResliceInterpolateToCubic();
    planeWidgetX->SetInput((vtkDataSet *)reader->GetOutput());
    planeWidgetX->SetPlaneOrientationToXAxes();
    planeWidgetX->SetSlicePosition(100);
    planeWidgetX->DisplayTextOn();
    planeWidgetX->On();
    planeWidgetX->InteractionOff();
    planeWidgetX->InteractionOn();

  planeWidgetY = vtkImagePlaneWidget::New();
    planeWidgetY->SetInteractor( iren);
    planeWidgetY->SetKeyPressActivationValue('y');
    planeWidgetY->SetPicker(picker);
    planeWidgetY->GetPlaneProperty()->SetColor(1,1,0);
    planeWidgetY->SetTexturePlaneProperty(ipwProp);
    planeWidgetY->TextureInterpolateOn();
    planeWidgetY->SetResliceInterpolateToCubic();
    planeWidgetY->SetInput((vtkDataSet *)reader->GetOutput());
    planeWidgetY->SetPlaneOrientationToYAxes();
    planeWidgetY->SetSlicePosition(100);
    planeWidgetY->SetLookupTable( planeWidgetX->GetLookupTable());
    planeWidgetY->DisplayTextOff();
    planeWidgetY->UpdatePlacement();
    planeWidgetY->On();

  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->RestrictPlaneToVolumeOff();  
    planeWidgetZ->SetInput((vtkDataSet *)reader->GetOutput());
    planeWidgetZ->SetPlaneOrientationToZAxes();
    planeWidgetZ->SetSliceIndex(25);
    planeWidgetZ->SetLookupTable( planeWidgetX->GetLookupTable());
    planeWidgetZ->DisplayTextOn();
    planeWidgetZ->On();

  double wl[2];
  planeWidgetZ->GetWindowLevel(wl);

  // Add a 2D image to test the GetReslice method
  //横断面
  vtkImageMapToColors* colorMapz = vtkImageMapToColors::New();
    colorMapz->PassAlphaToOutputOff();
    colorMapz->SetActiveComponent(2);
    colorMapz->SetOutputFormatToLuminance();
    colorMapz->SetInput(planeWidgetZ->GetResliceOutput());
    colorMapz->SetLookupTable(planeWidgetX->GetLookupTable());

  vtkImageActor* imageActorz = vtkImageActor::New();
      imageActorz->PickableOn();
	imageActorz->DragableOff();
    imageActorz->SetInput(colorMapz->GetOutput());
//冠
  vtkImageMapToColors* colorMapx = vtkImageMapToColors::New();
    colorMapx->PassAlphaToOutputOff();
    colorMapx->SetActiveComponent(2);
    colorMapx->SetOutputFormatToLuminance();
    colorMapx->SetInput(planeWidgetX->GetResliceOutput());
    colorMapx->SetLookupTable(planeWidgetX->GetLookupTable());

  vtkImageActor* imageActorx = vtkImageActor::New();
    imageActorx->SetInput(colorMapx->GetOutput());

///矢
   vtkImageMapToColors* colorMapy = vtkImageMapToColors::New();
    colorMapy->PassAlphaToOutputOff();
    colorMapy->SetActiveComponent(2);
    colorMapy->SetOutputFormatToLuminance();
    colorMapy->SetInput(planeWidgetY->GetResliceOutput());
    colorMapy->SetLookupTable(planeWidgetX->GetLookupTable());

  vtkImageActor* imageActory = vtkImageActor::New();
    imageActory->SetInput(colorMapy->GetOutput());

  vtkActor* outlineActor =  vtkActor::New();
    outlineActor->SetMapper( outlineMapper);
	outlineActor->VisibilityOff(); 

  // Add the actors
  ren2->AddActor2D( imageActorz);
  ren3->AddActor2D( imageActorx);
  ren4->AddActor2D( imageActory);
  ren1->AddActor( outlineActor);

  ren1->SetBackground( 1, 1, 0);
  ren2->SetBackground( 1, 1, 0);
  ren3->SetBackground( 1, 1, 0);
  ren4->SetBackground( 1, 1, 0);

  renWin->SetSize( 710, 710);

  ren4->SetViewport(0.51,0.51,1,1);
  ren2->SetViewport(0,0.51,0.49,1);
  ren3->SetViewport(0,0,0.49,0.49);
  ren1->SetViewport(0.51,0,1,0.49);



//  ren4->GetActiveCamera()->Roll(180);
//  ren3->GetActiveCamera()->Roll(90);

 ren2->SetViewPoint  (1,1,1 ); 
  // Set the actors' postions
  //
  renWin->Render();
  
  ren1->GetActiveCamera()->Elevation(110);
  ren1->GetActiveCamera()->SetViewUp(0, 0, -1);
  ren1->GetActiveCamera()->Azimuth(45);
  ren1->GetActiveCamera()->Dolly(1.15);
  ren1->ResetCameraClippingRange();

////////////////////////


  vtkmyPWCallbackz *myCallbackz = vtkmyPWCallbackz::New();
    myCallbackz->WidgetX = planeWidgetX;
    myCallbackz->WidgetY = planeWidgetY;

  vtkmyPWCallbackx *myCallbackx = vtkmyPWCallbackx::New();
    myCallbackx->WidgetY = planeWidgetY;
    myCallbackx->WidgetZ = planeWidgetZ;

  vtkmyPWCallbacky *myCallbacky = vtkmyPWCallbacky::New();
    myCallbacky->WidgetX = planeWidgetX;
    myCallbacky->WidgetZ = planeWidgetZ;

  vtkPointWidget *pointWidgetz = vtkPointWidget::New();
	pointWidgetz->SetInteractor(iren);
	pointWidgetz->SetInput((vtkDataSet *)planeWidgetZ->GetResliceOutput());
	pointWidgetz->AllOff();
	pointWidgetz->PlaceWidget();
	pointWidgetz->AddObserver(vtkCommand::InteractionEvent,myCallbackz);
	pointWidgetz->GetProperty()->SetColor(1,1,1);
//	pointWidgetz->SetPosition(100,100,0);
	pointWidgetz->SetCurrentRenderer (ren2); 
	pointWidgetz->On();

  vtkPointWidget *pointWidgetx = vtkPointWidget::New();
	pointWidgetx->SetInteractor(iren);
	pointWidgetx->SetInput((vtkDataSet *)planeWidgetX->GetResliceOutput());
	pointWidgetx->AllOff();
	pointWidgetx->PlaceWidget();	  
	pointWidgetx->AddObserver(vtkCommand::InteractionEvent,myCallbackx);
	pointWidgetx->GetProperty()->SetColor(1,1,1);
//	pointWidgetx->SetPosition(100,100,0);
	pointWidgetx->SetCurrentRenderer (ren3); 
	pointWidgetx->On();

  vtkPointWidget *pointWidgety = vtkPointWidget::New();
	pointWidgety->SetInteractor(iren);
	pointWidgety->SetInput((vtkDataSet *)planeWidgetY->GetResliceOutput());
	pointWidgety->AllOff();
	pointWidgety->PlaceWidget();
	pointWidgety->AddObserver(vtkCommand::InteractionEvent,myCallbacky);
	pointWidgety->GetProperty()->SetColor(1,1,1);
//	pointWidgety->SetPosition(100,100,0);
	pointWidgety->SetCurrentRenderer (ren4); 
	pointWidgety->On();  
///////////////////////////////

  vtkCallbackCommand* callback = vtkCallbackCommand::New();
  //callback->SetCallback();
	  callback->SetClientData((void *)ren1);
//	  renWin->GetInteractor()->AddObserver(vtkCommand::LeftButtonPressEvent, callback, 1.0);
//	  renWin->GetInteractor()->AddObserver(vtkCommand::MouseMoveEvent, callback, 1.0);
//	  renWin->GetInteractor()->AddObserver(vtkCommand::LeftButtonReleaseEvent, callback, 1.0);

  renWin->Render();
  // Interact with data
  // Render the image
  //

  iren->Initialize();
//iren->FlyToImage  (ren2,  256,256) ; 
//iren->FlyToImage  (ren3,  256,256) ; 
//iren->FlyToImage  (ren4,  256,256) ; 
  iren->Start();
  renWin->Render();

  callback->Delete();
  ipwProp->Delete();
  planeWidgetX->Delete();
  planeWidgetY->Delete();
  planeWidgetZ->Delete();
  colorMapz->Delete();
  imageActorz->Delete();
  picker->Delete();
  outlineActor->Delete();
  outlineMapper->Delete();
  outline->Delete();
  iren->Delete();
  renWin->Delete();
  ren1->Delete();
  ren2->Delete();
  reader->Delete();

  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -