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

📄 volcutknee.cpp

📁 VTK入门样例(种类齐全)
💻 CPP
字号:
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    $RCSfile: VolCutKnee.cxx,v $
  Language:  C++
  Date:      $Date: 2003/03/10 14:03:33 $
  Version:   $Revision: 1.0 $

  Copyright (c) 2003 Huiqun Zhou
  Department of Earth Sciences
  Nanjing University
  All rights reserved.
  
     This software is distributed WITHOUT ANY WARRANTY; without even 
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
// This example shows how to.
//

#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkContourFilter.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkPointData.h"
#include "vtkProperty.h"
#include "vtkVolumeProperty.h"
#include "vtkSLCReader.h"
#include "vtkPiecewiseFunction.h"
#include "vtkCamera.h"
#include "vtkFloatArray.h"
#include "vtkVolumeRayCastCompositeFunction.h"
#include "vtkVolumeRayCastMapper.h"
#include "vtkImageShrink3D.h"
#include "vtkPoints.h"
#include "vtkPlanes.h"
#include "vtkClipPolyData.h"

int main()
{
	vtkRenderer *ren1 = vtkRenderer::New();
  		ren1->BackingStoreOn();

	vtkRenderWindow *renWin = vtkRenderWindow::New();
		renWin->AddRenderer(ren1);

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

	vtkSLCReader *reader = vtkSLCReader::New();
		reader->SetFileName("nut.slc");
		reader->Update();

	vtkPiecewiseFunction *white_tfun = vtkPiecewiseFunction::New();
		white_tfun->AddPoint(0, 1.0);
		white_tfun->AddPoint(255, 1.0);

	vtkPiecewiseFunction *tfun = vtkPiecewiseFunction::New();
		tfun->AddPoint(70, 0.0);
		tfun->AddPoint(80, 1.0); 

	ren1->SetBackground(0.1, 0.2, 0.4);

	vtkVolumeProperty *vol_prop = vtkVolumeProperty::New();
		vol_prop->SetColor(white_tfun);
		vol_prop->SetScalarOpacity(tfun);
		vol_prop->SetInterpolationTypeToLinear();
		vol_prop->ShadeOn();

	vtkVolumeRayCastCompositeFunction *comp_func = 
					vtkVolumeRayCastCompositeFunction::New();

	vtkVolumeRayCastMapper *volmap = vtkVolumeRayCastMapper::New();
		volmap->SetVolumeRayCastFunction(comp_func);
		volmap->SetInput(reader->GetOutput());
		volmap->SetSampleDistance(1.0);

	vtkVolume *vol = vtkVolume::New();
		vol->SetProperty(vol_prop);
		vol->SetMapper(volmap);

	ren1->AddVolume(vol);

	vtkImageShrink3D *shrink = vtkImageShrink3D::New();
  		shrink->SetInput((vtkDataObject *)reader->GetOutput());
  		shrink->SetShrinkFactors(4, 4, 2);
  		shrink->AveragingOn();

	vtkContourFilter *contour = vtkContourFilter::New();
  		contour->SetInput((vtkDataSet *)shrink->GetOutput());
  		contour->SetValue(0, 30.0);

	vtkPoints *points = vtkPoints::New();
  		points->InsertPoint(0, 100.0, 150.0, 130.0);
  		points->InsertPoint(1, 100.0, 150.0, 130.0);
  		points->InsertPoint(2, 100.0, 150.0, 130.0);

	vtkFloatArray *normals = vtkFloatArray::New();
		normals->SetNumberOfComponents(3);
		float normtemp[3];
		normtemp[0] = 1.0; normtemp[1] = 0.0; normtemp[2] = 0.0;
		normals->InsertTuple(0, normtemp);
		normtemp[0] = 0.0; normtemp[1] = 1.0; normtemp[2] = 0.0;
		normals->InsertTuple(1, normtemp);
		normtemp[0] = 0.0; normtemp[1] = 0.0; normtemp[2] = 1.0;
		normals->InsertTuple(2, normtemp);
  
	vtkPlanes *planes = vtkPlanes::New();
  		planes->SetPoints(points);
  		planes->SetNormals(normals);

	vtkClipPolyData *clipper = vtkClipPolyData::New();
  		clipper->SetInput(contour->GetOutput());
  		clipper->SetClipFunction(planes);
  		clipper->GenerateClipScalarsOn();

	vtkPolyDataMapper *skin_mapper = vtkPolyDataMapper::New();
  		skin_mapper->SetInput(clipper->GetOutput());
  		skin_mapper->ScalarVisibilityOff();

	vtkActor *skin = vtkActor::New();
  		skin->SetMapper(skin_mapper);
  		skin->GetProperty()->SetColor(0.8, 0.4, 0.2);

	ren1->AddActor(skin);

	renWin->SetSize(400, 400);


	ren1->GetActiveCamera()->SetPosition(-47.5305, -319.315, 92.0083);
	ren1->GetActiveCamera()->SetFocalPoint(78.9121, 89.8372, 95.1229);
	ren1->GetActiveCamera()->SetViewUp(-0.00708891, 0.00980254, -0.999927);
	ren1->GetActiveCamera()->SetClippingRange(42.8255, 2141.28);

	renWin->Render();

	// interact with data
	iren->Initialize();
	iren->Start();

	skin->Delete();
	skin_mapper->Delete();
	clipper->Delete();
	planes->Delete();
	normals->Delete();
	points->Delete();
	contour->Delete();
	shrink->Delete();
	vol->Delete();
	volmap->Delete();
	comp_func->Delete();
	vol_prop->Delete();
	tfun->Delete();
	white_tfun->Delete();
	reader->Delete();
	iren->Delete();
	renWin->Delete();
	ren1->Delete();

	return 0;
}

⌨️ 快捷键说明

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