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

📄 vtk.cpp

📁 VTK入门样例(种类齐全)
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//}

//#include "vtkRenderer.h"
//#include "vtkRenderWindow.h"
//#include "vtkRenderWindowInteractor.h"
//#include "vtkQuadric.h"
//#include "vtkSampleFunction.h"
//#include "vtkContourFilter.h"
//#include "vtkPolyDataMapper.h"
//#include "vtkActor.h"
//#include "vtkOutlineFilter.h"
//#include "vtkProperty.h"
//
////#include "SaveImage.h"
//
//void main( int argc, char *argv[] )
//{
//	vtkRenderer *aren = vtkRenderer::New();
//	vtkRenderWindow *renWin = vtkRenderWindow::New();
//	renWin->AddRenderer(aren);
//	vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
//	iren->SetRenderWindow(renWin);
//	//
//	// Create surfaces F(x,y,z) = constant
//	//
//	// Sample quadric function
//	vtkQuadric *quadric = vtkQuadric::New();
//	//evaluate implicit quadric function 
//	//评估暗示的二次功能。
//	quadric->SetCoefficients(.5,1,.2,0.6,.1,2.0,0,.2,0,0);
//	//F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
//
//	vtkSampleFunction *sample = vtkSampleFunction::New();
//	//vtkSampleFunction 是在 vtkStructuredPoints 的每点评估一个暗示的功能和常态的一个来源物体。
//	//使用者能叙述空间的样品尺寸和位置运行那抽取样品。 产生关闭表面 (连同 vtkContourFilter), 
//	//胜过能被打开在样品空间的边界上设定特别的价值。  
//	sample->SetSampleDimensions(50,50,50);
//	sample->SetImplicitFunction(quadric);
//
//	vtkContourFilter *contour = vtkContourFilter::New();
//	contour->SetInput((vtkDataSet *)sample->GetOutput());
//	contour->GenerateValues(5,0,1.2);
//	vtkPolyDataMapper *contourMapper = vtkPolyDataMapper::New();
//	contourMapper->SetInput(contour->GetOutput());
//	contourMapper->SetScalarRange(0,1.2);
//	vtkActor *contourActor = vtkActor::New();
//	contourActor->SetMapper(contourMapper);
//
//	// Create outline
//	vtkOutlineFilter *outline = vtkOutlineFilter::New();
//	outline->SetInput((vtkDataSet *)sample->GetOutput());
//	vtkPolyDataMapper *outlineMapper = vtkPolyDataMapper::New();
//	outlineMapper->SetInput(outline->GetOutput());
//	vtkActor *outlineActor = vtkActor::New();
//	outlineActor->SetMapper(outlineMapper);
//	outlineActor->GetProperty()->SetColor(0,0,0);
//	//
//	// Rendering stuff
//	//
//	aren->SetBackground(1,1,1);
//	aren->AddActor(contourActor);
//	aren->AddActor(outlineActor);
//
//	renWin->SetSize(300,300);
//	renWin->Render();
//
//	//  SAVEIMAGE( renWin );
//
//	// interact with data
//	iren->Start();
//
//	// Clean up
//	aren->Delete();
//	renWin->Delete();
//	iren->Delete();
//	quadric->Delete();
//	sample->Delete();
//	contour->Delete();
//	contourMapper->Delete();
//	contourActor->Delete();
//	outline->Delete();
//	outlineMapper->Delete();
//	outlineActor->Delete();
//}



//#include "vtkSphereSource.h"
//#include "vtkPolyDataMapper.h"
//#include "vtkRenderWindow.h"
//#include "vtkRenderWindowInteractor.h"
//#include "vtkCamera.h"
//#include "vtkActor.h"
//#include "vtkRenderer.h"
//#include "vtkPolyData.h"
//#include "vtkBoxWidget.h"
//#include "vtkCardinalSpline.h"
//#include "vtkPoints.h"
//#include "stdio.h"
//#include <time.h>
//#include <vtkGlyph3D.h>
//#include <vtkProperty.h>
//#include <vtkCellArray.h>
//#include <vtkPointDataToCellData.h>
//#include <vtkPolyLine.h>
//
//void main()
//{
//
//	srand(time(NULL)) ;
//
//	//	rand()/RAND_MAX;//	0 - RAND_MAX
//	vtkRenderer *ren = vtkRenderer::New();
//	vtkRenderWindow *renWindow = vtkRenderWindow::New();
//	renWindow->AddRenderer(ren);
//	renWindow->SetSize( 600, 600 );
//
//	vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
//	iren->SetRenderWindow(renWindow);
//
//	int numberOfInputPoints = 30;
//
//	vtkCardinalSpline *aSplineX = vtkCardinalSpline::New();
//	vtkCardinalSpline *aSplineY = vtkCardinalSpline::New();
//	vtkCardinalSpline *aSplineZ = vtkCardinalSpline::New();
//
//	vtkPoints *inputPoints = vtkPoints::New();
//
//	double x,y,z;
//	int i;
//	for(i=0;i<numberOfInputPoints;i++)
//	{
//		x = (float)rand()/(float)RAND_MAX;
//		y = (float)rand()/(float)RAND_MAX;
//		z = (float)rand()/(float)RAND_MAX;
//		printf(" x:%f,y:%f,z:%f\n",x,y,z);
//		aSplineX->AddPoint(i, x);
//		aSplineY->AddPoint(i, y);
//		aSplineZ->AddPoint(i, z);
//		inputPoints->InsertPoint(i, x, y, z);
//	}
//
//
//	vtkPolyData *inputData =vtkPolyData::New();
//	inputData->SetPoints(inputPoints);
//
//	vtkSphereSource *balls =vtkSphereSource::New();
//	balls->SetRadius(.01);
//	balls->SetPhiResolution(10);
//	balls->SetThetaResolution(10);
//
//	vtkGlyph3D *glyphPoints =vtkGlyph3D::New();
//	glyphPoints->SetInput(inputData);
//	glyphPoints->SetSource(balls->GetOutput());
//
//	vtkPolyDataMapper *glyphMapper = vtkPolyDataMapper::New();
//	glyphMapper->SetInputConnection(glyphPoints->GetOutputPort());
//
//	vtkActor *glyph = vtkActor::New();
//	glyph->SetMapper(glyphMapper);
//	glyph->GetProperty()->SetDiffuseColor(1,0,0);
//	glyph->GetProperty()->SetSpecular(.3);
//	glyph->GetProperty()->SetSpecularPower(30);
//
//	///////////////
//	vtkPointDataToCellData *pointDataToCellData = vtkPointDataToCellData::New();
//	pointDataToCellData->SetInputConnection((vtkAlgorithmOutput *)inputPoints);
//	pointDataToCellData->PassPointDataOn();
//
//	vtkPolyDataMapper *plyMapper=vtkPolyDataMapper::New();
//	plyMapper-> SetInputConnection (pointDataToCellData-> GetOutputPort());
//	vtkActor *plyActor=vtkActor::New();
//	plyActor-> SetMapper(plyMapper);
//
//
//
//
//	//////////////
//	//ren->AddActor(glyph);
//	ren->AddActor(plyActor);
//
//	iren->Initialize();
//	renWindow->Render();
//
//	iren->Start();
//}

//如何通过点来形成面,并且给每个点赋值,以及颜色的变化(这个颜色还是有点问题)
//学习了几种数据类型
#include "vtkActor.h"
#include "vtkCellArray.h"
#include "vtkDoubleArray.h"
#include "vtkFloatArray.h"
#include "vtkIntArray.h"
#include "vtkPointData.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkAxesActor.h"
#include <vtkCamera.h>
#include <vtkTextProperty.h>
#include <vtkProperty.h>
#include <vtkAxes.h>
#include <vtkTubeFilter.h>

int main()
{
	int i;

	// Create a float array which represents the points.
	vtkFloatArray* pcoords = vtkFloatArray::New();/*定义了一组单精度的值来描述点*/

	// Note that by default, an array has 1 component.
	// We have to change it to 3 for points
	pcoords->SetNumberOfComponents(3);  //设置维度
	// We ask pcoords to allocate room for at least 4 tuples
	// and set the number of tuples to 4.
	pcoords->SetNumberOfTuples(5);//设置数组
	// Assign each tuple. There are 5 specialized versions of SetTuple:
	// SetTuple1 SetTuple2 SetTuple3 SetTuple4 SetTuple9
	// These take 1, 2, 3, 4 and 9 components respectively.
	float pts[5][3] = { {-90, 0, 20000101},{-89.75, 0, 20000101}, {-90, 359.75,20000101},
	{90,0, 20000101}, {90,359.75, 20000101} }; //定了开始和结束的四个顶点
	for (i=0; i<5; i++)
	{
		pcoords->SetTuple(i, pts[i]);
	}

	// Create vtkPoints and assign pcoords as the internal data array.
	vtkPoints* points = vtkPoints::New();
	points->SetData(pcoords);//获得这个四个点

	// Create the cells. In this case, a triangle strip with 2 triangles
	// (which can be represented by 4 points)
	vtkCellArray* strips = vtkCellArray::New();
	strips->InsertNextCell(5);//设置单元有几个点组成
	strips->InsertCellPoint(0);
	strips->InsertCellPoint(1);
	strips->InsertCellPoint(2);
	strips->InsertCellPoint(3);
	strips->InsertCellPoint(4);

	// Create an integer array with 4 tuples. Note that when using
	// InsertNextValue (or InsertNextTuple1 which is equivalent in
	// this situation), the array will expand automatically
	vtkIntArray* temperature = vtkIntArray::New();
	temperature->SetName("Temperature");   
	temperature->InsertNextValue(2.92192);
	temperature->InsertNextValue(-1.28129);
	temperature->InsertNextValue(-2.31008);
	temperature->InsertNextValue(2.01);
	temperature->InsertNextValue(4.16562);

	// Create a double array.
	vtkDoubleArray* vorticity = vtkDoubleArray::New();
	vorticity->SetName("Vorticity");
	vorticity->InsertNextValue(2.7);
	vorticity->InsertNextValue(4.1);
	vorticity->InsertNextValue(5.3);
	vorticity->InsertNextValue(3.4);

	// Create the dataset. In this case, we create a vtkPolyData
	vtkPolyData* polydata = vtkPolyData::New();
	// Assign points and cells
	polydata->SetPoints(points);
	polydata->SetStrips(strips);
	//polydata->SetLines(strips);
	// Assign scalars
	// polydata->GetPointData()返回指向点的数据
	polydata->GetPointData()->SetScalars(temperature); // 给点赋值
	// Add the vorticity array. In this example, this field
	// is not used.
	polydata->GetPointData()->AddArray(vorticity);

	// Create the mapper and set the appropriate scalar range
	// (default is (0,1)
	vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
	mapper->SetInput(polydata);
	mapper->SetScalarRange(-2.5,5.0);//控制标量值怎样映射到表中

	// Create an actor.
	vtkActor* actor = vtkActor::New();
	actor->SetMapper(mapper);
	//建立坐标系
	//vtkAxesActor *axes = vtkAxesActor::New();
 //   axes->SetTotalLength(17,17,17);
	//axes->SetNormalizedShaftLength(1,1,1);
	//axes->SetNormalizedTipLength(0.05,0.05,0.05);
	//axes->AxisLabelsOn();
	//axes->SetShaftTypeToLine();
	//axes->SetAxisLabels(5);

	//vtkProperty * property = axes->GetXAxisTipProperty();//获得轴末端的属性(指那个箭头),x轴
	//	property->SetRepresentationToWireframe();//控制物体几何表面的描述
	//	property->SetDiffuse(0);//指定漫反射光源的系数
	//	property->SetAmbient(1);//指定室内照明的系数
	//	property->SetColor( 1, 0, 1 );//指定箭头的颜色
	//
	//	property = axes->GetYAxisTipProperty();//获得轴末端的属性(指那个箭头),y轴
	//	property->SetRepresentationToWireframe();
	//	property->SetDiffuse(0);
	//	property->SetAmbient(1);
	//	property->SetColor( 1, 1, 0 );
	//
	//	property = axes->GetZAxisTipProperty();
	//	property->SetRepresentationToWireframe();
	//	property->SetDiffuse(0);
	//	property->SetAmbient(1);
	//    property->SetColor(0,1,0);

		vtkPolyDataMapper *axesMapper = vtkPolyDataMapper::New();
		//axesMapper->SetInput(axes->GetOutput());
		//vtkActor *axesActor = vtkActor::New();
		//axesActor->SetMapper(axesMapper);

		vtkAxes *axes1 =vtkAxes ::New();
	    axes1->SetOrigin(-90, 0, 2000010);
		axes1->SetScaleFactor(17);
		
		vtkTubeFilter *axesTubes = vtkTubeFilter::New();
		axesTubes->SetInput(axes1->GetOutput());
		axesTubes->SetRadius(axes1->GetScaleFactor()/25.0);
		axesTubes->SetNumberOfSides(6);
		axesMapper->SetInput(axesTubes->GetOutput());
		vtkActor *axesActor = vtkActor::New();
		axesActor->SetMapper(axesMapper);

	// Create the rendering objects.
	vtkRenderer* ren = vtkRenderer::New();
	ren->AddActor(actor);
	//vtkRenderer *ren1 = vtkRenderer::New();
	//ren->AddActor(axesActor);

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

	renWin->SetSize(800,600);

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

	pcoords->Delete();
	points->Delete();
	strips->Delete();
	temperature->Delete();
	vorticity->Delete();
	polydata->Delete();
	mapper->Delete();
	actor->Delete();
   axesActor->Delete();
	ren->Delete();
	renWin->Delete();
	iren->Delete();
	return 0;
}

⌨️ 快捷键说明

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