Почему vtkRenderWindowInteractor на macOS, использующих Какао, имеет такое странное поведение? - PullRequest
0 голосов
/ 21 апреля 2019

Я изучаю ВТК, читая книгу VTKTextBook.Я пытался выполнить пример Cone .

Когда я его запускаю, у меня странное поведение, которое трудно объяснить словами, но вы можете увидеть его в gif наследующая ссылка: https://imgur.com/lJigYGu

Код, который я использовал, немного отличается от кода примера, но оба они создают одну и ту же проблему.

Это код моегоФайл cone.cpp:

#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkConeSource.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>

int main(int, char* []) {
    vtkNew<vtkNamedColors> colors;

    vtkNew<vtkConeSource> cone;
    cone->SetHeight(3.0);
    cone->SetRadius(1.0);
    cone->SetResolution(10);

    vtkNew<vtkPolyDataMapper> coneMapper;
    coneMapper->SetInputConnection(cone->GetOutputPort());

    vtkNew<vtkActor> coneActor;
    coneActor->SetMapper(coneMapper);

    vtkNew<vtkRenderer> ren1;
    ren1->AddActor(coneActor);
    ren1->SetBackground(
    colors->GetColor3d("MidnightBlue").GetData());

    vtkNew<vtkRenderWindow> renWin;
    renWin->AddRenderer(ren1);
    renWin->SetSize(300, 300);

    vtkNew<vtkRenderWindowInteractor> interactor;
    interactor->SetRenderWindow(renWin);

    interactor->Start();
    for (auto i = 0; i < 360; ++i) {
        // render the image
        renWin->Render();
        // rotate the active camera by one degree
        ren1->GetActiveCamera()->Azimuth(1);
    }
    return EXIT_SUCCESS;
}

, и это мой CMakeLists.txt:

cmake_minimum_required(VERSION 3.3 FATAL_ERROR)

project(Cone)

set(VTK_USE_CARBON ON)

find_package(VTK COMPONENTS 
  vtkCommonCore
  vtkCommonDataModel
  vtkFiltersSources
  vtkInteractionStyle
  vtkRenderingCore
  vtkRenderingFreeType
  vtkRenderingOpenGL2 QUIET)
if (NOT VTK_FOUND)
  message("Skipping Cone: ${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(Cone Cone.cpp)
  target_link_libraries(Cone PRIVATE ${VTK_LIBRARIES})
else ()
  # include all components
  add_executable(Cone Cone.cxx )
  target_link_libraries(Cone PRIVATE ${VTK_LIBRARIES})
  # vtk_module_autoinit is needed
  vtk_module_autoinit(
    TARGETS Cone
    MODULES ${VTK_LIBRARIES}
  )
endif ()

Я уже спрашивал в списке рассылки vtk-users и в vtkforum , но я не получил никакого ответа.

Я пробовал с версией 8.1.2 vtk, установленной с homebrew, и с версией 8.90.0, скомпилированной из источника в ветке masterна github .

...