You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
4.2 KiB
135 lines
4.2 KiB
2 years ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: $RCSfile: Arrays.cxx,v $
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
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 demonstrate the use of VTK data arrays as attribute
|
||
|
// data as well as field data. It creates geometry (vtkPolyData) as
|
||
|
// well as attribute data explicitly.
|
||
|
|
||
|
// first include the required header files for the vtk classes we are using
|
||
|
#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"
|
||
|
|
||
|
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(4);
|
||
|
// 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[4][3] = { {0.0, 0.0, 0.0}, {0.0, 1.0, 0.0},
|
||
|
{1.0, 0.0, 0.0}, {1.0, 1.0, 0.0} };
|
||
|
for (i=0; i<4; 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(4);
|
||
|
strips->InsertCellPoint(0);
|
||
|
strips->InsertCellPoint(1);
|
||
|
strips->InsertCellPoint(2);
|
||
|
strips->InsertCellPoint(3);
|
||
|
|
||
|
// 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(10);
|
||
|
temperature->InsertNextValue(20);
|
||
|
temperature->InsertNextValue(30);
|
||
|
temperature->InsertNextValue(40);
|
||
|
|
||
|
// 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);
|
||
|
// Assign scalars
|
||
|
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(0, 40);
|
||
|
|
||
|
// Create an actor.
|
||
|
vtkActor* actor = vtkActor::New();
|
||
|
actor->SetMapper(mapper);
|
||
|
|
||
|
// Create the rendering objects.
|
||
|
vtkRenderer* ren = vtkRenderer::New();
|
||
|
ren->AddActor(actor);
|
||
|
|
||
|
vtkRenderWindow* renWin = vtkRenderWindow::New();
|
||
|
renWin->AddRenderer(ren);
|
||
|
|
||
|
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();
|
||
|
ren->Delete();
|
||
|
renWin->Delete();
|
||
|
iren->Delete();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|