📄 vtk.cpp
字号:
//}
//#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 + -