Dodecahedron
Repository source: Dodecahedron
Other languages
See (Python), (PythonicAPI)
Question
If you have a question about this example, please use the VTK Discourse Forum
Code¶
Dodecahedron.cxx
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCellArray.h>
#include <vtkIdTypeArray.h>
#include <vtkLookupTable.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPoints.h>
#include <vtkPolyDataMapper.h>
#include <vtkPolyhedron.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
namespace {
vtkSmartPointer<vtkPolyhedron> MakeDodecahedron();
}
int main(int, char*[])
{
vtkNew<vtkNamedColors> colors;
auto dodecahedron = MakeDodecahedron();
// Visualize
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputData(dodecahedron->GetPolyData());
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
actor->GetProperty()->SetColor(colors->GetColor3d("PapayaWhip").GetData());
vtkNew<vtkRenderer> renderer;
vtkNew<vtkRenderWindow> renderWindow;
renderWindow->SetWindowName("Dodecahedron");
renderWindow->AddRenderer(renderer);
vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->SetBackground(colors->GetColor3d("CadetBlue").GetData());
renderer->GetActiveCamera()->Azimuth(30);
renderer->GetActiveCamera()->Elevation(30);
renderer->ResetCamera();
renderWindow->Render();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
namespace {
vtkSmartPointer<vtkPolyhedron> MakeDodecahedron()
{
vtkSmartPointer<vtkPolyhedron> aDodecahedron =
vtkSmartPointer<vtkPolyhedron>::New();
for (int i = 0; i < 20; ++i)
{
aDodecahedron->GetPointIds()->InsertNextId(i);
}
aDodecahedron->GetPoints()->InsertNextPoint(1.21412, 0, 1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(0.375185, 1.1547, 1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(-0.982247, 0.713644, 1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(-0.982247, -0.713644, 1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(0.375185, -1.1547, 1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(1.96449, 0, 0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(0.607062, 1.86835, 0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(-1.58931, 1.1547, 0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(-1.58931, -1.1547, 0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(0.607062, -1.86835, 0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(1.58931, 1.1547, -0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(-0.607062, 1.86835, -0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(-1.96449, 0, -0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(-0.607062, -1.86835, -0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(1.58931, -1.1547, -0.375185);
aDodecahedron->GetPoints()->InsertNextPoint(0.982247, 0.713644, -1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(-0.375185, 1.1547, -1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(-1.21412, 0, -1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(-0.375185, -1.1547, -1.58931);
aDodecahedron->GetPoints()->InsertNextPoint(0.982247, -0.713644, -1.58931);
vtkIdType face_offsets[13] = {0, 5, 10, 15, 20, 25, 30,
35, 40, 45, 50, 55, 60};
vtkIdType face_conns[60] = {
0, 1, 2, 3, 4, // ids
0, 5, 10, 6, 1, //
1, 6, 11, 7, 2, //
2, 7, 12, 8, 3, //
3, 8, 13, 9, 4, //
4, 9, 14, 5, 0, //
15, 10, 5, 14, 19, //
16, 11, 6, 10, 15, //
17, 12, 7, 11, 16, //
18, 13, 8, 12, 17, //
19, 14, 9, 13, 18, //
19, 18, 17, 16, 15 //
};
vtkNew<vtkCellArray> faces;
vtkNew<vtkIdTypeArray> offsets_arr;
vtkNew<vtkIdTypeArray> conns_arr;
offsets_arr->SetArray(face_offsets, 13, 1);
conns_arr->SetArray(face_conns, 60, 1);
faces->SetData(offsets_arr, conns_arr);
aDodecahedron->SetCellFaces(faces);
aDodecahedron->Initialize();
return aDodecahedron;
}
} // namespace
CMakeLists.txt¶
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(Dodecahedron)
find_package(VTK COMPONENTS
CommonColor
CommonCore
CommonDataModel
InteractionStyle
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
)
if (NOT VTK_FOUND)
message(FATAL_ERROR "Dodecahedron: Unable to find the VTK build folder.")
endif()
# Prevent a "command line is too long" failure in Windows.
set(CMAKE_NINJA_FORCE_RESPONSE_FILE "ON" CACHE BOOL "Force Ninja to use response files.")
add_executable(Dodecahedron MACOSX_BUNDLE Dodecahedron.cxx )
target_link_libraries(Dodecahedron PRIVATE ${VTK_LIBRARIES}
)
# vtk_module_autoinit is needed
vtk_module_autoinit(
TARGETS Dodecahedron
MODULES ${VTK_LIBRARIES}
)
Download and Build Dodecahedron¶
Click here to download Dodecahedron and its CMakeLists.txt file. Once the tarball Dodecahedron.tar has been downloaded and extracted,
cd Dodecahedron/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:
./Dodecahedron
WINDOWS USERS
Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.