vtk
Привет, мир
Поиск…
Привет, мир
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkSmartPointer.h>
#include <vtkTextActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
int main(int /*argc*/, char ** /*argv*/)
{
auto textActor = vtkSmartPointer<vtkTextActor>::New();
textActor->SetInput("Hello World");
auto renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(textActor);
renderer->ResetCamera();
auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetInteractor(interactor);
interactor->Start();
return 0;
}
Сломать:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);
Конструкция VTK использует шаблон проектирования фабричного метода для создания новых экземпляров производных классов vtkObject с использованием метода <ClassName>::New()
. Это позволяет выбрать конкретную реализацию платформы во время выполнения, чтобы удовлетворить требуемый интерфейс.
Чтобы этот механизм работал, фабричные классы должны «регистрироваться» самостоятельно, чтобы их можно было выбрать инфраструктурой vtk. Подробности по этой теме доступны здесь .
VTK_MODULE_INIT
- это макрос, используемый для автоматического инициализации необходимых модулей / библиотек ( vtkRenderingOpenGL2
) ( vtkRenderingOpenGL2
, vtkRenderingFreeType
, vtkInteractionStyle
в этом примере). Невозможность инициализации модулей приведет к <ClassName>::New()
для возврата NULL
и, следовательно, ошибок времени выполнения.
#include <vtkSmartPointer.h>
#include <vtkTextActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
Роль vtkSmartPointer
аналогична роли std::unique_ptr
в том, что она управляет счетчиком ссылок, который управляет временем жизни vtkObject
производного класса vtkObject
.
vtkTextActor
- это простой класс, который можно использовать для отображения строк на экране.
vtkRenderer
- это класс, ответственный за управление содержимым сцены. В частности, он управляет сбором
- 2D-актеры, полученные из
vtkActor2D
- 3D-актеры, полученные из
vtkProp3D
- Объемы:
vtkVolume
- Камера:
vtkCamera
- Свет:
vtkLight
vtkRenderWindow
- это класс, который обеспечивает платформенный независимый интерфейс для
- управление коллекцией рендеринга.
- обрабатывая ввод пользователя и перенаправляя его на
vtkRenderWindowInteractor
для дальнейшей обработки
vtkRenderWindowInteractor
- это класс, отвечающий за сопоставление событий ввода (мыши / клавиатуры / времени) пользователя с соответствующим действием. Внутри он использует vtkInteractorStyle
для обеспечения различных vtkInteractorStyle
отображения.
auto textActor = vtkSmartPointer<vtkTextActor>::New();
textActor->SetInput("Hello World");
Создайте текстовый актер и установите строку для отображения
auto renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(textActor);
renderer->ResetCamera();
- Создание рендеринга
- Добавьте к нему текстового актера
- Сбрасывает положение камеры, чтобы убедиться, что актер отображается на экране.
auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetInteractor(interactor);
Создайте окно для рендеринга, добавьте рендер к нему и установите интерактор. Заводская функция автоматически выбирает подходящую реализацию на основе доступных / зарегистрированных заводских классов
interactor->Start();
Это блокирующий вызов, который возвращается только тогда, когда пользователь запрашивает quit (ключ q ) или закрывает окно. Запускает цикл сообщений и отправляет сообщения.
Запуск этого должен создать окно, которое выглядит так:
Заметки
Этот список DLL, который использовался этим exe:
VTKCommonCore-7.0.DLL
VTKInteractionStyle-7.0.DLL
VTKRenderingCore-7.0.DLL
VTKRenderingFreeType-7.0.DLL
VTKRenderingOpenGL2-7.0.DLL