• VTK 交互部件_标注类Widget的应用


    1.标注类Widget

    在可视化程序中,经常会对某个对象做一些标注说明,比如,在医学图像诊断中,常常会手动标注出被诊断为肿瘤的区域或者其他病变区域,并用文字进行标注。
    VTK中,与标注相关的Widget如下表所示:
    • vtkTextWidget:在渲染场景中生成一串标识文本,可以随意调整该文本在渲染场景中的位置,缩放其大小等。
    • vtkScalarBarWidget:根据输入的数据在渲染场景中生成一个标量条,通过设置颜色查找表,可以用标量条上的颜色来指示输入的数据。渲染场景中的标量条可以随意移动、改变大小、设置不同的方向等。
    • vtkCaptionWidget:用一个带线框及箭头的文本信息来标注某一对象。
    • vtkOrientationMarkerWidget:渲染场景中所渲染数据的方向指示标志。在医学图像领域有广泛的应用,比如,通过CT/MR等扫描的数据,当将其导入可视化应用程序时需要标识其上、下、左、右、前、后等方位。
    • vtkBalloonWidget:当鼠标停留在渲染场景中的某个Actor一段时间后,会弹出提示信息。所提示的信息,除了可以用文本表示,也可以用图像表示。

    2.标注类Widget应用程序

      1 #include <vtkAutoInit.h>
      2 VTK_MODULE_INIT(vtkRenderingOpenGL)
      3 VTK_MODULE_INIT(vtkInteractionStyle)
      4 VTK_MODULE_INIT(vtkRenderingFreeType)
      5  
      6 #include <vtkSmartPointer.h>
      7 #include <vtkUnstructuredGridReader.h>
      8 #include <vtkUnstructuredGrid.h>
      9 #include <vtkLookupTable.h>
     10 #include <vtkDataSetMapper.h>
     11 #include <vtkActor.h>
     12 #include <vtkRenderer.h>
     13 #include <vtkRenderWindow.h>
     14 #include <vtkRenderWindowInteractor.h>
     15  
     16 #include <vtkScalarBarActor.h>
     17 #include <vtkScalarBarWidget.h>
     18 #include <vtkTextActor.h>
     19 #include <vtkTextWidget.h>
     20 #include <vtkTextProperty.h>
     21 #include <vtkTextRepresentation.h>
     22 #include <vtkAxesActor.h>
     23 #include <vtkOrientationMarkerWidget.h>
     24 #include <vtkCaptionWidget.h>
     25 #include <vtkCaptionActor2D.h>///
     26 #include <vtkCaptionRepresentation.h>
     27 #include <vtkBalloonWidget.h>
     28 #include <vtkBalloonRepresentation.h>
     29  
     30 int main()
     31 {
     32     vtkSmartPointer< vtkUnstructuredGridReader > reader = vtkSmartPointer< vtkUnstructuredGridReader >::New();
     33     reader->SetFileName("data.vtk");
     34     reader->Update();
     35  
     36     vtkSmartPointer< vtkLookupTable > lut = vtkSmartPointer< vtkLookupTable >::New();
     37     lut->Build();
     38  
     39     vtkSmartPointer< vtkDataSetMapper > mapper = vtkSmartPointer< vtkDataSetMapper >::New();
     40     mapper->SetInputData(reader->GetOutput());
     41     mapper->SetScalarRange(reader->GetOutput()->GetScalarRange());
     42     mapper->SetLookupTable(lut);
     43  
     44     vtkSmartPointer< vtkActor > actor = vtkSmartPointer< vtkActor >::New();
     45     actor->SetMapper(mapper);
     46  
     47     vtkSmartPointer< vtkRenderer > renderer = vtkSmartPointer< vtkRenderer >::New();
     48     renderer->AddActor(actor);
     49     renderer->SetBackground(1, 1, 1);
     50  
     51     vtkSmartPointer< vtkRenderWindow > renderWindow = vtkSmartPointer< vtkRenderWindow >::New();
     52     renderWindow->AddRenderer(renderer);
     53     renderWindow->Render();
     54     renderWindow->SetWindowName("AnnotationWidget");
     55     renderWindow->SetSize(400, 400);
     56  
     57     vtkSmartPointer< vtkRenderWindowInteractor > interactor = 
     58         vtkSmartPointer< vtkRenderWindowInteractor >::New();
     59     interactor->SetRenderWindow(renderWindow);
     60 /********************************************************************************************/
     61     //标注类测试
     62      vtkScalarBarWidget
     63     vtkSmartPointer< vtkScalarBarActor > scalarBarActor = vtkSmartPointer< vtkScalarBarActor >::New();
     64     scalarBarActor->SetOrientationToHorizontal();
     65     scalarBarActor->SetLookupTable(lut);
     66  
     67     vtkSmartPointer< vtkScalarBarWidget > scalarBarWidget = vtkSmartPointer< vtkScalarBarWidget >::New();
     68     scalarBarWidget->SetInteractor(interactor);
     69     scalarBarWidget->SetScalarBarActor(scalarBarActor);
     70     scalarBarWidget->On();
     71  
     72     vtkTextWidget
     73     vtkSmartPointer<vtkTextActor> textActor = vtkSmartPointer<vtkTextActor>::New();
     74     textActor->SetInput("VTK Widgets");
     75     textActor->GetTextProperty()->SetColor(1, 0, 0);
     76  
     77     vtkSmartPointer<vtkTextWidget> textWidget = vtkSmartPointer<vtkTextWidget>::New();
     78     textWidget->SetInteractor(interactor);
     79     textWidget->SetTextActor(textActor);
     80  
     81     vtkSmartPointer<vtkTextRepresentation>  textRepresentation =
     82         vtkSmartPointer<vtkTextRepresentation>::New();
     83     textRepresentation->GetPositionCoordinate()->SetValue(0.15, 0.15);
     84     textRepresentation->GetPosition2Coordinate()->SetValue(0.7, 0.2);
     85  
     86     textWidget->SetRepresentation(textRepresentation);
     87     textWidget->SelectableOff();
     88     textWidget->On();
     89  
     90     / vtkOrientationMarkerWidget
     91     vtkSmartPointer<vtkAxesActor> iconActor = vtkSmartPointer<vtkAxesActor>::New();
     92     vtkSmartPointer<vtkOrientationMarkerWidget> orientationWidget =
     93         vtkSmartPointer<vtkOrientationMarkerWidget>::New();
     94     orientationWidget->SetOutlineColor(0.9300, 0.5700, 0.1300);
     95     orientationWidget->SetInteractor(interactor);
     96     orientationWidget->SetOrientationMarker(iconActor);
     97     orientationWidget->SetViewport(0.0, 0.0, 0.2, 0.2);
     98     orientationWidget->SetEnabled(1);
     99     orientationWidget->InteractiveOn();
    100  
    101      vtkCaptionWidget
    102     //vtkSmartPointer<vtkCaptionWidget> captionWidget = 
    103     //    vtkSmartPointer<vtkCaptionWidget>::New();
    104     //captionWidget->SetInteractor(interactor);
    105  
    106     //vtkSmartPointer<vtkCaptionRepresentation> captionRepresentation =
    107     //    vtkSmartPointer<vtkCaptionRepresentation>::New();
    108     //captionRepresentation->GetCaptionActor2D()->SetCaption("Caption Widget");
    109     //captionRepresentation->GetCaptionActor2D()->GetTextActor()->GetTextProperty()->SetFontSize(20);
    110     //
    111     //double pos[3] = { .5, 0, 0 };
    112     //captionRepresentation->SetAnchorPosition(pos);
    113     //captionWidget->SetRepresentation(captionRepresentation);
    114     //captionWidget->On();
    115  
    116     / vtkBalloonWidget
    117     vtkSmartPointer<vtkBalloonWidget> balloonWidget =
    118         vtkSmartPointer<vtkBalloonWidget>::New();
    119     balloonWidget->SetInteractor(interactor);
    120  
    121     vtkSmartPointer<vtkBalloonRepresentation> balloonRep =
    122         vtkSmartPointer<vtkBalloonRepresentation>::New();
    123     balloonRep->SetBalloonLayoutToImageRight();
    124  
    125     balloonWidget->SetRepresentation(balloonRep);
    126     balloonWidget->AddBalloon(actor, "This is a widget example", NULL);
    127     balloonWidget->On();
    128  
    129     renderWindow->Render();
    130     interactor->Initialize();
    131     interactor->Start();
    132     return 0;
    133 }
    输出结果如下:
    使用标注类Widget需要注意的是,除了指定的Widget表达实体之外,某些Widget还需要与其他Actor协同使用;如上例中的vtkScalarBarWidget要与vtkScalarBarActor协同工作;vtkTextWidget要与vtkTextActor协同工作。
  • 相关阅读:
    VIM 编辑器命令
    Ubuntu LAMP 便捷配置
    Linux基础命令
    Sql sever 定时任务设置
    C#自动发送邮件
    序列化与反序列化
    字符串.特殊引用类型
    抽象方法、接口
    函数的返回值
    线程
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14244529.html
Copyright © 2020-2023  润新知