医站点医维基

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 420|回复: 0

[VTK] ExtractVisibleCells

[复制链接]

336

主题

411

回帖

2808

积分

管理员

积分
2808

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2024-3-8 11:41:50 | 显示全部楼层 |阅读模式
  1. #include <vtkActor.h>
  2. #include <vtkDataSetMapper.h>
  3. #include <vtkExtractSelection.h>
  4. #include <vtkHardwareSelector.h>
  5. #include <vtkInteractorStyleTrackballCamera.h>
  6. #include <vtkNamedColors.h>
  7. #include <vtkNew.h>
  8. #include <vtkObjectFactory.h>
  9. #include <vtkPolyData.h>
  10. #include <vtkPolyDataMapper.h>
  11. #include <vtkProperty.h>
  12. #include <vtkRenderWindow.h>
  13. #include <vtkRenderWindowInteractor.h>
  14. #include <vtkRenderer.h>
  15. #include <vtkRendererCollection.h>
  16. #include <vtkSelection.h>
  17. #include <vtkSphereSource.h>

  18. // Define interaction style
  19. class KeyPressInteractorStyle : public vtkInteractorStyleTrackballCamera
  20. {
  21. public:
  22.   vtkNew<vtkNamedColors> colors;
  23.   static KeyPressInteractorStyle* New();
  24.   vtkTypeMacro(KeyPressInteractorStyle, vtkInteractorStyleTrackballCamera);

  25.   virtual void OnKeyPress() override
  26.   {
  27.     // Get the keypress
  28.     std::string key = this->Interactor->GetKeySym();

  29.     // "s" for "s"elect
  30.     if (key.compare("s") == 0)
  31.     {
  32.       vtkNew<vtkHardwareSelector> selector;
  33.       selector->SetRenderer(this->Interactor->GetRenderWindow()
  34.                                 ->GetRenderers()
  35.                                 ->GetFirstRenderer());
  36.       int* temp = this->Interactor->GetRenderWindow()->GetSize();
  37.       unsigned int windowSize[4];
  38.       windowSize[0] = temp[2];
  39.       windowSize[1] = temp[3];
  40.       windowSize[2] = temp[0];
  41.       windowSize[3] = temp[1];
  42.       /*
  43.         for(unsigned int i = 0; i < 4; i++)
  44.           {
  45.           windowSize[i] = temp[i];
  46.           }
  47.         */
  48.       selector->SetArea(windowSize);
  49.       selector->SetFieldAssociation(vtkDataObject::FIELD_ASSOCIATION_CELLS);
  50.       vtkSelection* selection = selector->Select();
  51.       std::cout << "Selection has " << selection->GetNumberOfNodes()
  52.                 << " nodes." << std::endl;

  53.       vtkNew<vtkExtractSelection> extractSelection;
  54.       extractSelection->SetInputData(0, this->Data);
  55.       extractSelection->SetInputData(1, selection);
  56.       extractSelection->Update();

  57.       vtkNew<vtkDataSetMapper> mapper;
  58.       mapper->SetInputConnection(extractSelection->GetOutputPort());

  59.       vtkNew<vtkActor> actor;
  60.       actor->SetMapper(mapper);
  61.       actor->GetProperty()->SetColor(colors->GetColor3d("Red").GetData());
  62.       this->Renderer->AddActor(actor);
  63.     }

  64.     // Forward events
  65.     vtkInteractorStyleTrackballCamera::OnKeyPress();
  66.   }

  67.   vtkPolyData* Data;
  68.   vtkRenderer* Renderer;
  69. };
  70. vtkStandardNewMacro(KeyPressInteractorStyle);

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

  74.   // Create a sphere
  75.   vtkNew<vtkSphereSource> sphereSource;
  76.   sphereSource->SetCenter(0.0, 0.0, 0.0);
  77.   sphereSource->SetRadius(5.0);
  78.   sphereSource->Update();

  79.   // Create a mapper and actor
  80.   vtkNew<vtkPolyDataMapper> mapper;
  81.   mapper->SetInputConnection(sphereSource->GetOutputPort());

  82.   vtkNew<vtkActor> actor;
  83.   actor->SetMapper(mapper);
  84.   actor->GetProperty()->SetColor(colors->GetColor3d("Tomato").GetData());

  85.   // Create a renderer, render window, and interactor
  86.   vtkNew<vtkRenderer> renderer;
  87.   vtkNew<vtkRenderWindow> renderWindow;
  88.   renderWindow->SetMultiSamples(0); // Turn off anti-aliasing
  89.   renderWindow->AddRenderer(renderer);
  90.   vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
  91.   renderWindowInteractor->SetRenderWindow(renderWindow);

  92.   vtkNew<KeyPressInteractorStyle> style;
  93.   style->Renderer = renderer;
  94.   renderWindowInteractor->SetInteractorStyle(style);
  95.   style->SetCurrentRenderer(renderer);
  96.   style->Data = sphereSource->GetOutput();

  97.   // Add the actor to the scene
  98.   renderer->AddActor(actor);
  99.   renderer->SetBackground(colors->GetColor3d("Mint").GetData());

  100.   // Render and interact
  101.   renderWindow->SetWindowName("ExtractVisibleCells");
  102.   renderWindow->Render();
  103.   renderWindowInteractor->Start();

  104.   return EXIT_SUCCESS;
  105. }
复制代码


  1. cmake_minimum_required(VERSION 3.8...3.12 FATAL_ERROR)
  2. project(ExtractVisibleCells)

  3. find_package(VTK)
  4. if (NOT VTK_FOUND)
  5.   message("Skipping example: ${VTK_NOT_FOUND_MESSAGE}")
  6.   return ()
  7. endif ()

  8. set(Srcs ExtractVisibleCells.cxx)

  9. add_executable(qtimageviewer
  10.   ${Srcs})
  11. target_link_libraries(qtimageviewer
  12.   PRIVATE
  13.     ${VTK_LIBRARIES})
  14. vtk_module_autoinit(
  15.   TARGETS qtimageviewer
  16.   MODULES ${VTK_LIBRARIES})
复制代码

CMakeLists.txt

屏幕截图 2024-03-08 114125.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于我们|医维基|网站地图|Archiver|手机版|医疗之家 ( 沪ICP备2023001278号-1 )  

GMT+8, 2024-5-9 04:02 , Processed in 0.136758 second(s), 27 queries .

Designed by Medical BBS

快速回复 返回顶部 返回列表