QuadraticHexahedron
VTKExamples/Cxx/GeometricObjects/QuadraticHexahedron
Code¶
QuadraticHexahedron.cxx
#include <vtkSmartPointer.h> #include <vtkUnstructuredGrid.h> #include <vtkQuadraticHexahedron.h> #include <vtkTessellatorFilter.h> #include <vtkNamedColors.h> #include <vtkSphereSource.h> #include <vtkGlyph3D.h> #include <vtkDataSetMapper.h> #include <vtkActor.h> #include <vtkProperty.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkMath.h> #include <vtkPoints.h> static vtkSmartPointer<vtkUnstructuredGrid> MakeQuadraticHexahedron(); int main (int, char *[]) { vtkSmartPointer<vtkNamedColors> namedColors = vtkSmartPointer<vtkNamedColors>::New(); vtkSmartPointer<vtkUnstructuredGrid> uGrid = MakeQuadraticHexahedron(); vtkSmartPointer<vtkTessellatorFilter> tessellate = vtkSmartPointer<vtkTessellatorFilter>::New(); tessellate->SetInputData(uGrid); tessellate->SetMaximumNumberOfSubdivisions(2); 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(.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(0.8900, 0.8100, 0.3400); // Visualize vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); 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; } vtkSmartPointer<vtkUnstructuredGrid> MakeQuadraticHexahedron() { vtkSmartPointer<vtkQuadraticHexahedron> aHexahedron = vtkSmartPointer<vtkQuadraticHexahedron>::New(); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); double *pcoords = aHexahedron->GetParametricCoords(); vtkMath::RandomSeed(5070); // for testing points->SetNumberOfPoints(aHexahedron->GetNumberOfPoints()); for (int i = 0; i < aHexahedron->GetNumberOfPoints(); ++i) { aHexahedron->GetPointIds()->SetId(i, i); points->SetPoint(i, *(pcoords + 3 * i) + vtkMath::Random(-.1,.1), *(pcoords + 3 * i + 1) + vtkMath::Random(-.1,.1), *(pcoords + 3 * i + 2) + vtkMath::Random(-.1,.1)); } // Add the points and hexahedron to an unstructured grid vtkSmartPointer<vtkUnstructuredGrid> uGrid = vtkSmartPointer<vtkUnstructuredGrid>::New(); uGrid->SetPoints(points); uGrid->InsertNextCell(aHexahedron->GetCellType(), aHexahedron->GetPointIds()); return uGrid; }
CMakeLists.txt¶
cmake_minimum_required(VERSION 2.8) PROJECT(QuadraticHexahedron) find_package(VTK REQUIRED) include(${VTK_USE_FILE}) add_executable(QuadraticHexahedron MACOSX_BUNDLE QuadraticHexahedron.cxx ) target_link_libraries(QuadraticHexahedron ${VTK_LIBRARIES})
Download and Build QuadraticHexahedron¶
Click here to download QuadraticHexahedron and its CMakeLists.txt file. Once the tarball QuadraticHexahedron.tar has been downloaded and extracted,
cd QuadraticHexahedron/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:
./QuadraticHexahedron
WINDOWS USERS PLEASE NOTE: Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.