UGrid
VTKExamples/Cxx/UnstructuredGrid/UGrid
Description¶
Creation of an unstructured grid.
Info
See Figure 5-21 in Chapter 05 the VTK Textbook.
Other Languages
See (Python)
Code¶
UGrid.cxx
#include <vtkActor.h> #include <vtkCamera.h> #include <vtkCellType.h> #include <vtkDataSetMapper.h> #include <vtkNamedColors.h> #include <vtkPoints.h> #include <vtkProperty.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> #include <vtkUnstructuredGrid.h> int main( int, char *[] ) { int i; static double x[27][3]={{0,0,0}, {1,0,0}, {2,0,0}, {0,1,0}, {1,1,0}, {2,1,0}, {0,0,1}, {1,0,1}, {2,0,1}, {0,1,1}, {1,1,1}, {2,1,1}, {0,1,2}, {1,1,2}, {2,1,2}, {0,1,3}, {1,1,3}, {2,1,3}, {0,1,4}, {1,1,4}, {2,1,4}, {0,1,5}, {1,1,5}, {2,1,5}, {0,1,6}, {1,1,6}, {2,1,6}}; static vtkIdType pts[12][8]={{0, 1, 4, 3, 6, 7, 10, 9}, {1, 2, 5, 4, 7, 8, 11, 10}, {6, 10, 9, 12, 0, 0, 0, 0}, {8, 11, 10, 14, 0, 0, 0, 0}, {16, 17, 14, 13, 12, 15, 0, 0}, {18, 15, 19, 16, 20, 17, 0, 0}, {22, 23, 20, 19, 0, 0, 0, 0}, {21, 22, 18, 0, 0, 0, 0, 0}, {22, 19, 18, 0, 0, 0, 0, 0}, {23, 26, 0, 0, 0, 0, 0, 0}, {21, 24, 0, 0, 0, 0, 0, 0}, {25, 0, 0, 0, 0, 0, 0, 0}}; vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New(); vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New(); renWin->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New(); iren->SetRenderWindow(renWin); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); for (i=0; i<27; i++) points->InsertPoint(i,x[i]); vtkSmartPointer<vtkUnstructuredGrid> ugrid = vtkSmartPointer<vtkUnstructuredGrid>::New(); ugrid->Allocate(100); ugrid->InsertNextCell(VTK_HEXAHEDRON, 8, pts[0]); ugrid->InsertNextCell(VTK_HEXAHEDRON, 8, pts[1]); ugrid->InsertNextCell(VTK_TETRA, 4, pts[2]); ugrid->InsertNextCell(VTK_TETRA, 4, pts[3]); ugrid->InsertNextCell(VTK_POLYGON, 6, pts[4]); ugrid->InsertNextCell(VTK_TRIANGLE_STRIP, 6, pts[5]); ugrid->InsertNextCell(VTK_QUAD, 4, pts[6]); ugrid->InsertNextCell(VTK_TRIANGLE, 3, pts[7]); ugrid->InsertNextCell(VTK_TRIANGLE, 3, pts[8]); ugrid->InsertNextCell(VTK_LINE, 2, pts[9]); ugrid->InsertNextCell(VTK_LINE, 2, pts[10]); ugrid->InsertNextCell(VTK_VERTEX, 1, pts[11]); ugrid->SetPoints(points); vtkSmartPointer<vtkDataSetMapper> ugridMapper = vtkSmartPointer<vtkDataSetMapper>::New(); ugridMapper->SetInputData(ugrid); vtkSmartPointer<vtkActor> ugridActor = vtkSmartPointer<vtkActor>::New(); ugridActor->SetMapper(ugridMapper); ugridActor->GetProperty()->SetColor(colors->GetColor3d("Peacock").GetData()); ugridActor->GetProperty()->EdgeVisibilityOn(); renderer->AddActor(ugridActor); renderer->SetBackground(colors->GetColor3d("Beige").GetData()); renderer->ResetCamera(); renderer->GetActiveCamera()->Elevation(60.0); renderer->GetActiveCamera()->Azimuth(30.0); renderer->GetActiveCamera()->Dolly(1.2); renWin->SetSize(640, 480); // interact with data renWin->Render(); iren->Start(); return EXIT_SUCCESS; }
CMakeLists.txt¶
cmake_minimum_required(VERSION 3.3 FATAL_ERROR) project(UGrid) find_package(VTK COMPONENTS vtkCommonColor vtkCommonCore vtkCommonDataModel vtkInteractionStyle vtkRenderingCore vtkRenderingFreeType vtkRenderingOpenGL2 QUIET) if (NOT VTK_FOUND) message("Skipping UGrid: ${VTK_NOT_FOUND_MESSAGE}") return () endif() message (STATUS "VTK_VERSION: ${VTK_VERSION}") if (VTK_VERSION VERSION_LESS "8.90.0") # old system include(${VTK_USE_FILE}) add_executable(UGrid MACOSX_BUNDLE UGrid.cxx ) target_link_libraries(UGrid PRIVATE ${VTK_LIBRARIES}) else () # include all components add_executable(UGrid MACOSX_BUNDLE UGrid.cxx ) target_link_libraries(UGrid PRIVATE ${VTK_LIBRARIES}) # vtk_module_autoinit is needed vtk_module_autoinit( TARGETS UGrid MODULES ${VTK_LIBRARIES} ) endif ()
Download and Build UGrid¶
Click here to download UGrid and its CMakeLists.txt file. Once the tarball UGrid.tar has been downloaded and extracted,
cd UGrid/build
If VTK is installed:
cmake ..
If VTK is not installed but compiled on your system, you will need to specify the path to your VTK build:
cmake -DVTK_DIR:PATH=/home/me/vtk_build ..
Build the project:
make
and run it:
./UGrid
WINDOWS USERS
Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.