tihui.cpp

来自「VTK入门样例(种类齐全)」· C++ 代码 · 共 152 行

CPP
152
字号

#include "vtkCamera.h"
#include "vtkPiecewiseFunction.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkVolume.h"
#include "vtkVolumeProperty.h"
#include "vtkVolumeRayCastCompositeFunction.h"
#include "vtkExtractGrid.h"
#include "vtkVolumeRayCastMapper.h"
#include "vtkColorTransferFunction.h"
#include "vtkActor.h" 
#include "vtkOutlineFilter.h" 
#include "vtkPolyDataMapper.h" 
#include "vtkPlane.h"
#include "vtkCutter.h"
#include "vtkLookupTable.h"
#include "vtkProperty.h"
#include "vtkPolyDataMapper.h" 
#include "vtkContourFilter.h" 
#include "vtkPolyDataNormals.h"
#include "vtkPolyDataMapper.h"
#include "vtkStructuredGridOutlineFilter.h"
#include "vtkTubeFilter.h"
#include "vtkPLOT3DReader.h"

void main() 
{ 
	vtkRenderWindow *renWin = vtkRenderWindow::New();
	vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
	  iren->SetRenderWindow(renWin);
	vtkRenderer *ren = vtkRenderer::New();
	  renWin->AddRenderer(ren);

  vtkPLOT3DReader *pl3d = vtkPLOT3DReader::New();
	pl3d->SetXYZFileName("combxyz.bin");
	pl3d->SetQFileName("combq.bin");
	pl3d-> SetScalarFunctionNumber (120); 
	pl3d-> SetVectorFunctionNumber (202);
	pl3d->Update(); //force a read to occur

	vtkExtractGrid *extract=vtkExtractGrid::New();
	  extract-> SetVOI (1, 55, -1000, 1000 ,-1000 ,1000);
	  extract-> SetInputConnection(pl3d->GetOutputPort());

	// The (implicit) plane is used to do the cutting
	vtkPlane *plane=vtkPlane::New();
	  plane-> SetOrigin (0 ,4 ,2);
	  plane-> SetNormal (0 ,1 ,0);

	// The cutter is set up to process each contour value over all cells
	// (SetSortByToSortByCell). This results in an ordered output of polygons 
	// which is key to the compositing.
	vtkCutter *cutter=vtkCutter::New();
	  cutter-> SetInputConnection (extract-> GetOutputPort());
	  cutter-> SetCutFunction (plane);
	  cutter-> GenerateCutScalarsOff();
	  cutter-> SetSortByToSortByCell();

	vtkLookupTable *clut=vtkLookupTable::New();
	  clut-> SetHueRange( 0 ,.67);
	  clut-> Build();

	vtkPolyDataMapper *cutterMapper=vtkPolyDataMapper::New();
	  cutterMapper-> SetInputConnection (cutter->GetOutputPort());
	  cutterMapper-> SetScalarRange (0.18 ,0.7);
	  cutterMapper-> SetLookupTable (clut);

	vtkActor *cut=vtkActor::New();
	  cut-> SetMapper (cutterMapper);

	// Add in some surface geometry for interest.
	vtkContourFilter *iso=vtkContourFilter::New();
		iso-> SetInputConnection (pl3d-> GetOutputPort());
		iso-> SetValue (0,-100000);
		iso->Update();


	vtkPolyDataNormals *normals=vtkPolyDataNormals::New();
		normals-> SetInputConnection (iso-> GetOutputPort());
		normals-> SetFeatureAngle (45);

	vtkPolyDataMapper *isoMapper=vtkPolyDataMapper::New();
		isoMapper-> SetInputConnection (normals-> GetOutputPort());
		isoMapper-> ScalarVisibilityOff();

	vtkActor *isoActor=vtkActor::New();
		isoActor-> SetMapper (isoMapper);
		isoActor-> GetProperty()-> SetDiffuseColor (1,0.5,0);
		isoActor-> GetProperty()-> SetSpecularColor (1,1,0.9);
		isoActor-> GetProperty()-> SetDiffuse (.8);
		isoActor-> GetProperty()-> SetSpecular (.5);
		isoActor-> GetProperty()-> SetSpecularPower (30);

	vtkStructuredGridOutlineFilter *outline=vtkStructuredGridOutlineFilter::New();
		outline-> SetInputConnection (pl3d-> GetOutputPort());

	vtkTubeFilter *outlineTubes=vtkTubeFilter::New();
	  outlineTubes-> SetInputConnection (outline-> GetOutputPort());
	  outlineTubes-> SetRadius (.1);

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

	vtkActor *outlineActor=vtkActor::New();
		outlineActor-> SetMapper(outlineMapper);
		outlineActor-> GetProperty()->SetColor(1,1,0);

	  ren-> AddActor (isoActor);
	  isoActor-> VisibilityOn();
	  ren-> AddActor (cut);
	  cut-> GetProperty()-> SetOpacity (0.1);
	  ren->AddActor(outlineActor);
	//  outlineActor-> GetProperty()->SetColor(1,1,0);

	  ren->SetBackground(1, 1, 1);
	  renWin->SetSize(600,600);

	ren-> GetActiveCamera()->SetClippingRange( 3.95297, 50);
	ren-> GetActiveCamera()->SetFocalPoint( 9.71821, 0.458166, 29.3999);
	ren-> GetActiveCamera()->SetPosition( 2.7439, -37.3196, 38.7167);
	ren-> GetActiveCamera()->ComputeViewPlaneNormal();
	ren-> GetActiveCamera()->SetViewUp( -0.16123, 0.264271, 0.950876);

	//  global cam1 opacity
	  plane-> SetNormal(ren-> GetActiveCamera()->GetViewPlaneNormal());
	  plane-> SetOrigin(ren-> GetActiveCamera()->GetFocalPoint());
	  cutter-> GenerateValues (20, -5, 5);
	  clut->SetAlphaRange(.5,.1);



  ren->ResetCamera();
  ren->GetActiveCamera()->Zoom(1.5);
  
  renWin->Render();


  iren->Start();

  // Clean up
  ren->Delete();
  iren->Delete();
  renWin->Delete();
  
  return;
}



⌨️ 快捷键说明

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