Difference between revisions of "VTK/Examples/Cxx/PolyData/Casting"

From KitwarePublic
< VTK‎ | Examples‎ | Cxx
Jump to navigationJump to search
(Replaced content with "= '''See [https://lorensen.github.io/VTKExamples/site/Cxx/PolyData/Casting Casting] on the new [https://lorensen.github.io/VTKExamples/site/ VTKExamples website].''' =")
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
This example creates a polydata object with 3 points and attaches a distance value to each point. To retrieve the array from the polydata, we have to use a SafeDownCast to the type that we want. This is necessary because to keep things as general as possible the polydata will return an abstract array class.
+
= '''See [https://lorensen.github.io/VTKExamples/site/Cxx/PolyData/Casting Casting] on the new [https://lorensen.github.io/VTKExamples/site/ VTKExamples website].''' =
 
 
==Casting.cxx==
 
<source lang="cpp">
 
#include <vtkSmartPointer.h>
 
#include <vtkDoubleArray.h>
 
#include <vtkIntArray.h>
 
#include <vtkPoints.h>
 
#include <vtkPolyData.h>
 
#include <vtkPointData.h>
 
 
 
int main(int, char *[])
 
{
 
  //create points
 
  vtkSmartPointer<vtkPoints> points =
 
    vtkSmartPointer<vtkPoints>::New();
 
 
 
  unsigned int numberOfPoints = 3;
 
  points->InsertNextPoint ( 0.0, 0.0, 0.0 );
 
  points->InsertNextPoint ( 1.0, 0.0, 0.0 );
 
  points->InsertNextPoint ( 0.0, 1.0, 0.0 );
 
 
 
  //add the points to a polydata
 
  vtkSmartPointer<vtkPolyData> polydata =
 
    vtkSmartPointer<vtkPolyData>::New();
 
  polydata->SetPoints ( points );
 
 
 
  //add distances to each point
 
  vtkSmartPointer<vtkDoubleArray> distances =
 
    vtkSmartPointer<vtkDoubleArray>::New();
 
  distances->SetNumberOfComponents ( 1 );
 
  distances->SetName ( "Distances" );
 
 
 
  distances->InsertNextValue ( 1.1 );
 
  distances->InsertNextValue ( 2.2 );
 
  distances->InsertNextValue ( 3.3 );
 
 
 
  polydata->GetPointData()->AddArray ( distances );
 
 
 
  //get the distances from the polydata
 
  vtkDoubleArray* array = vtkDoubleArray::SafeDownCast ( polydata->GetPointData()->GetArray ( "Distances" ) );
 
 
 
  if ( array )
 
    {
 
    for ( unsigned int i = 0; i < numberOfPoints; i++ )
 
      {
 
      double dist;
 
      dist = array->GetValue ( i );
 
      std::cout << "Distance: " << dist << std::endl;
 
      }
 
    }
 
 
 
  //cast the double distances to ints
 
  vtkDoubleArray* doubleDistances = vtkDoubleArray::SafeDownCast ( polydata->GetPointData()->GetArray ( "Distances" ) );
 
  vtkIntArray* intDistances = vtkIntArray::SafeDownCast ( doubleDistances );
 
 
 
  if ( intDistances )
 
    {
 
    for ( unsigned int i = 0; i < numberOfPoints; i++ )
 
      {
 
      int dist;
 
      dist = intDistances->GetValue ( i );
 
      std::cout << "Distance: " << dist << std::endl;
 
      }
 
    }
 
  else
 
    {
 
    std::cout << "invalid cast." << std::endl;
 
    }
 
 
 
  return EXIT_SUCCESS;
 
}
 
 
 
</source>
 
 
 
==CMakeLists.txt==
 
<source lang="cmake">
 
cmake_minimum_required(VERSION 2.6)
 
PROJECT(Casting)
 
 
 
FIND_PACKAGE(VTK REQUIRED)
 
INCLUDE(${VTK_USE_FILE})
 
 
 
ADD_EXECUTABLE(Casting Casting.cxx)
 
TARGET_LINK_LIBRARIES(Casting vtkHybrid)
 
</source>
 

Latest revision as of 15:12, 9 September 2019

See Casting on the new VTKExamples website.