QuadraticTetra
VTKExamples/Cxx/GeometricObjects/QuadraticTetra
Description¶
The quadratic tetrahedron is a primary three-dimensional cell. It is defined by ten points. The first four points are located at the vertices of the tetrahedron; the next six are located in the middle of each of the six edges
Other Languages
See (Python)
Code¶
QuadraticTetra.cxx
#include <vtkActor.h> #include <vtkDataSetMapper.h> #include <vtkGlyph3D.h> #include <vtkMinimalStandardRandomSequence.h> #include <vtkNamedColors.h> #include <vtkPoints.h> #include <vtkProperty.h> #include <vtkQuadraticTetra.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkSmartPointer.h> #include <vtkSphereSource.h> #include <vtkTessellatorFilter.h> #include <vtkUnstructuredGrid.h> namespace { vtkSmartPointer<vtkUnstructuredGrid> MakeQuadraticTetra(); } int main (int, char *[]) { vtkSmartPointer<vtkNamedColors> namedColors = vtkSmartPointer<vtkNamedColors>::New(); vtkSmartPointer<vtkUnstructuredGrid> uGrid = MakeQuadraticTetra(); vtkSmartPointer<vtkTessellatorFilter> tessellate = vtkSmartPointer<vtkTessellatorFilter>::New(); tessellate->SetInputData(uGrid); vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New(); mapper->SetInputConnection(tessellate->GetOutputPort()); mapper->ScalarVisibilityOff(); // Create an actor for the grid vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); actor->GetProperty()->SetDiffuseColor( namedColors->GetColor3d("Tomato").GetData()); actor->GetProperty()->SetEdgeColor( namedColors->GetColor3d("IvoryBlack").GetData()); actor->GetProperty()->EdgeVisibilityOn(); vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New(); sphereSource->SetRadius(0.02); vtkSmartPointer<vtkGlyph3D> glyph3D = vtkSmartPointer<vtkGlyph3D>::New(); glyph3D->SetInputData(uGrid); glyph3D->SetSourceConnection(sphereSource->GetOutputPort()); glyph3D->ScalingOff(); glyph3D->Update(); vtkSmartPointer<vtkDataSetMapper> glyph3DMapper = vtkSmartPointer<vtkDataSetMapper>::New(); glyph3DMapper->SetInputConnection(glyph3D->GetOutputPort()); glyph3DMapper->ScalarVisibilityOff(); vtkSmartPointer<vtkActor> glyph3DActor = vtkSmartPointer<vtkActor>::New(); glyph3DActor->SetMapper(glyph3DMapper); glyph3DActor->GetProperty()->SetColor( namedColors->GetColor3d("Banana").GetData()); // Visualize vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->SetWindowName("Quadratic Tetra"); renderWindow->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); interactor->SetRenderWindow(renderWindow); renderer->AddActor(actor); renderer->AddActor(glyph3DActor); renderer->SetBackground(namedColors->GetColor3d("SlateGray").GetData()); renderWindow->Render(); interactor->Start(); return EXIT_SUCCESS; } namespace { vtkSmartPointer<vtkUnstructuredGrid> MakeQuadraticTetra() { vtkSmartPointer<vtkQuadraticTetra> aTetra = vtkSmartPointer<vtkQuadraticTetra>::New(); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); double *pcoords = aTetra->GetParametricCoords(); vtkSmartPointer<vtkMinimalStandardRandomSequence> rng = vtkSmartPointer<vtkMinimalStandardRandomSequence>::New(); points->SetNumberOfPoints(aTetra->GetNumberOfPoints()); rng->SetSeed(5070); // for testing for (auto i = 0; i < aTetra->GetNumberOfPoints(); ++i) { double perturbation[3]; for (auto j = 0; j < 3; ++j) { rng->Next(); perturbation[j] = rng->GetRangeValue(-0.1, 0.1); } aTetra->GetPointIds()->SetId(i, i); points->SetPoint(i, *(pcoords + 3 * i) + perturbation[0], *(pcoords + 3 * i + 1) + perturbation[1], *(pcoords + 3 * i + 2) + perturbation[2]); } // Add the points and tetra to an unstructured grid vtkSmartPointer<vtkUnstructuredGrid> uGrid = vtkSmartPointer<vtkUnstructuredGrid>::New(); uGrid->SetPoints(points); uGrid->InsertNextCell(aTetra->GetCellType(), aTetra->GetPointIds()); return uGrid; } }
CMakeLists.txt¶
cmake_minimum_required(VERSION 2.8) PROJECT(QuadraticTetra) find_package(VTK REQUIRED) include(${VTK_USE_FILE}) add_executable(QuadraticTetra MACOSX_BUNDLE QuadraticTetra.cxx ) target_link_libraries(QuadraticTetra ${VTK_LIBRARIES})
Download and Build QuadraticTetra¶
Click here to download QuadraticTetra and its CMakeLists.txt file. Once the tarball QuadraticTetra.tar has been downloaded and extracted,
cd QuadraticTetra/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:
./QuadraticTetra
WINDOWS USERS
Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.