VTK/Tutorials/TriangleGeometryVertices: Difference between revisions

From KitwarePublic
< VTK‎ | Tutorials
Jump to navigationJump to search
(New page: This example writes the coordinates of the corners of a triangle to a vtp file. There is now geometry (points) as well as topology (vertices). If you open this file in Paraview, you will n...)
 
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
This example writes the coordinates of the corners of a triangle to a vtp file. There is now geometry (points) as well as topology (vertices). If you open this file in Paraview, you will now see the points immediately.
This example writes the coordinates of the corners of a triangle to a vtp file. There is now geometry (points) as well as topology (vertices). If you open this file in Paraview, you will now see the points immediately.


==TriangleVertices.cxx==
<source lang="cpp">
<source lang="cpp">
#include <iostream>
#include <vtkCellArray.h>
#include <vector>
#include <vtkSmartPointer.h>
#include <vtkPoints.h>
#include <vtkXMLPolyDataWriter.h>
#include <vtkPolyData.h>


#include "vtkCellArray.h"
int main(int argc, char *argv[])
#include "vtkPoints.h"
{
#include "vtkXMLPolyDataWriter.h"
  //Setup point coordinates
#include "vtkPolyData.h"
  double X[3] = {1.0, 0.0, 0.0};
  double Y[3] = {0.0, 0.0, 1.0};
  double Z[3] = {0.0, 0.0, 0.0};
 
  //Create points and add a vertex at each point. Really what you are doing is adding
  //cells to the polydata, and the cells only contain 1 element, so they are, by definition,
  //0-D topology (vertices).
  vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
  vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();


struct Point
  for ( unsigned int i = 0; i < 3; ++i )
{
    {
double x,y,z;
    //Declare a variable to store the index of the point that gets added. This behaves just like an unsigned int.
Point(const double xin, const double yin, const double zin) : x(xin), y(yin), z(zin) {}
    vtkIdType pid[1];
};
   
    //Add a point to the polydata and save its index, which we will use to create the vertex on that point.
    pid[0] = points->InsertNextPoint ( X[i], Y[i], Z[i] );
   
    //create a vertex cell on the point that was just added.
    vertices->InsertNextCell ( 1,pid );
    }


int main()
  //create a polydata object
{
  vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
//setup points
std::vector<Point> Coords;
Coords.push_back(Point(-1.0, 1.0, 0.0));
Coords.push_back(Point(1.0, 1.0, 0.0));
Coords.push_back(Point(1.0, -1.0, 0.0));
vtkPoints* Points = vtkPoints::New();
vtkCellArray* Vertices = vtkCellArray::New();


for ( unsigned int i = 0; i < Coords.size(); ++i )
  //set the points and vertices we created as the geometry and topology of the polydata
{
  polydata->SetPoints ( points );
vtkIdType pid[1];
  polydata->SetVerts ( vertices );
Point P = Coords[i];
pid[0] = Points->InsertNextPoint(P.x, P.y, P.z);
Vertices->InsertNextCell(1,pid);
}
vtkPolyData* polydata = vtkPolyData::New();


polydata->SetPoints(Points);
  //write the polydata to a file
polydata->SetVerts(Vertices);
  vtkSmartPointer<vtkXMLPolyDataWriter> writer = vtkSmartPointer<vtkXMLPolyDataWriter>::New();
  writer->SetFileName ( "TriangleVerts.vtp" );
vtkXMLPolyDataWriter* writer = vtkXMLPolyDataWriter::New();
#if VTK_MAJOR_VERSION <= 5
writer->SetFileName("TriangleVerts.vtp");
  writer->SetInput ( polydata );
writer->SetInput(polydata);
#else
writer->Write();
  writer->SetInputData ( polydata );
#endif
  writer->Write();


  return EXIT_SUCCESS;
}
}
</source>
==CMakeLists.txt==
<source lang="cmake">
cmake_minimum_required(VERSION 2.6)
project(TriangleVertices)
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
add_executable(TriangleVertices TriangleVertices.cxx)
if(VTK_LIBRARIES)
  target_link_libraries(TriangleVertices ${VTK_LIBRARIES})
else()
  target_link_libraries(TriangleVertices vtkHybrid)
endif()
</source>
</source>

Latest revision as of 19:18, 25 April 2014

This example writes the coordinates of the corners of a triangle to a vtp file. There is now geometry (points) as well as topology (vertices). If you open this file in Paraview, you will now see the points immediately.

TriangleVertices.cxx

<source lang="cpp">

  1. include <vtkCellArray.h>
  2. include <vtkSmartPointer.h>
  3. include <vtkPoints.h>
  4. include <vtkXMLPolyDataWriter.h>
  5. include <vtkPolyData.h>

int main(int argc, char *argv[]) {

 //Setup point coordinates
 double X[3] = {1.0, 0.0, 0.0};
 double Y[3] = {0.0, 0.0, 1.0};
 double Z[3] = {0.0, 0.0, 0.0};
 //Create points and add a vertex at each point. Really what you are doing is adding
 //cells to the polydata, and the cells only contain 1 element, so they are, by definition,
 //0-D topology (vertices).
 vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
 vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();
 for ( unsigned int i = 0; i < 3; ++i )
   {
   //Declare a variable to store the index of the point that gets added. This behaves just like an unsigned int.
   vtkIdType pid[1];
   
   //Add a point to the polydata and save its index, which we will use to create the vertex on that point.
   pid[0] = points->InsertNextPoint ( X[i], Y[i], Z[i] );
   
   //create a vertex cell on the point that was just added.
   vertices->InsertNextCell ( 1,pid );
   }
 //create a polydata object
 vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
 //set the points and vertices we created as the geometry and topology of the polydata
 polydata->SetPoints ( points );
 polydata->SetVerts ( vertices );
 //write the polydata to a file
 vtkSmartPointer<vtkXMLPolyDataWriter> writer = vtkSmartPointer<vtkXMLPolyDataWriter>::New();
 writer->SetFileName ( "TriangleVerts.vtp" );
  1. if VTK_MAJOR_VERSION <= 5
 writer->SetInput ( polydata );
  1. else
 writer->SetInputData ( polydata );
  1. endif
 writer->Write();
 return EXIT_SUCCESS;

}

</source>

CMakeLists.txt

<source lang="cmake"> cmake_minimum_required(VERSION 2.6)

project(TriangleVertices)

find_package(VTK REQUIRED) include(${VTK_USE_FILE})

add_executable(TriangleVertices TriangleVertices.cxx) if(VTK_LIBRARIES)

 target_link_libraries(TriangleVertices ${VTK_LIBRARIES})

else()

 target_link_libraries(TriangleVertices vtkHybrid)

endif() </source>