VTK修炼之道76:交互部件_标注类Widget的应用
生活随笔
收集整理的這篇文章主要介紹了
VTK修炼之道76:交互部件_标注类Widget的应用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.標注類Widget
在可視化程序中,經(jīng)常會對某個對象做一些標注說明,比如,在醫(yī)學圖像診斷中,常常會手動標注出被診斷為腫瘤的區(qū)域或者其他病變區(qū)域,并用文字進行標注。 VTK中,與標注相關的Widget如下表所示:- vtkTextWidget:在渲染場景中生成一串標識文本,可以隨意調整該文本在渲染場景中的位置,縮放其大小等。
- vtkScalarBarWidget:根據(jù)輸入的數(shù)據(jù)在渲染場景中生成一個標量條,通過設置顏色查找表,可以用標量條上的顏色來指示輸入的數(shù)據(jù)。渲染場景中的標量條可以隨意移動、改變大小、設置不同的方向等。
- vtkCaptionWidget:用一個帶線框及箭頭的文本信息來標注某一對象。
- vtkOrientationMarkerWidget:渲染場景中所渲染數(shù)據(jù)的方向指示標志。在醫(yī)學圖像領域有廣泛的應用,比如,通過CT/MR等掃描的數(shù)據(jù),當將其導入可視化應用程序時需要標識其上、下、左、右、前、后等方位。
- vtkBalloonWidget:當鼠標停留在渲染場景中的某個Actor一段時間后,會彈出提示信息。所提示的信息,除了可以用文本表示,也可以用圖像表示。
2.標注類Widget應用程序
#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL) VTK_MODULE_INIT(vtkInteractionStyle) VTK_MODULE_INIT(vtkRenderingFreeType)#include <vtkSmartPointer.h> #include <vtkUnstructuredGridReader.h> #include <vtkUnstructuredGrid.h> #include <vtkLookupTable.h> #include <vtkDataSetMapper.h> #include <vtkActor.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h>#include <vtkScalarBarActor.h> #include <vtkScalarBarWidget.h> #include <vtkTextActor.h> #include <vtkTextWidget.h> #include <vtkTextProperty.h> #include <vtkTextRepresentation.h> #include <vtkAxesActor.h> #include <vtkOrientationMarkerWidget.h> #include <vtkCaptionWidget.h> #include <vtkCaptionActor2D.h>/// #include <vtkCaptionRepresentation.h> #include <vtkBalloonWidget.h> #include <vtkBalloonRepresentation.h>int main() {vtkSmartPointer< vtkUnstructuredGridReader > reader = vtkSmartPointer< vtkUnstructuredGridReader >::New();reader->SetFileName("data.vtk");reader->Update();vtkSmartPointer< vtkLookupTable > lut = vtkSmartPointer< vtkLookupTable >::New();lut->Build();vtkSmartPointer< vtkDataSetMapper > mapper = vtkSmartPointer< vtkDataSetMapper >::New();mapper->SetInputData(reader->GetOutput());mapper->SetScalarRange(reader->GetOutput()->GetScalarRange());mapper->SetLookupTable(lut);vtkSmartPointer< vtkActor > actor = vtkSmartPointer< vtkActor >::New();actor->SetMapper(mapper);vtkSmartPointer< vtkRenderer > renderer = vtkSmartPointer< vtkRenderer >::New();renderer->AddActor(actor);renderer->SetBackground(1, 1, 1);vtkSmartPointer< vtkRenderWindow > renderWindow = vtkSmartPointer< vtkRenderWindow >::New();renderWindow->AddRenderer(renderer);renderWindow->Render();renderWindow->SetWindowName("AnnotationWidget");renderWindow->SetSize(400, 400);vtkSmartPointer< vtkRenderWindowInteractor > interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New();interactor->SetRenderWindow(renderWindow); /********************************************************************************************///標注類測試vtkScalarBarWidgetvtkSmartPointer< vtkScalarBarActor > scalarBarActor = vtkSmartPointer< vtkScalarBarActor >::New();scalarBarActor->SetOrientationToHorizontal();scalarBarActor->SetLookupTable(lut);vtkSmartPointer< vtkScalarBarWidget > scalarBarWidget = vtkSmartPointer< vtkScalarBarWidget >::New();scalarBarWidget->SetInteractor(interactor);scalarBarWidget->SetScalarBarActor(scalarBarActor);scalarBarWidget->On();vtkTextWidgetvtkSmartPointer<vtkTextActor> textActor = vtkSmartPointer<vtkTextActor>::New();textActor->SetInput("VTK Widgets");textActor->GetTextProperty()->SetColor(1, 0, 0);vtkSmartPointer<vtkTextWidget> textWidget = vtkSmartPointer<vtkTextWidget>::New();textWidget->SetInteractor(interactor);textWidget->SetTextActor(textActor);vtkSmartPointer<vtkTextRepresentation> textRepresentation =vtkSmartPointer<vtkTextRepresentation>::New();textRepresentation->GetPositionCoordinate()->SetValue(0.15, 0.15);textRepresentation->GetPosition2Coordinate()->SetValue(0.7, 0.2);textWidget->SetRepresentation(textRepresentation);textWidget->SelectableOff();textWidget->On();/ vtkOrientationMarkerWidgetvtkSmartPointer<vtkAxesActor> iconActor = vtkSmartPointer<vtkAxesActor>::New();vtkSmartPointer<vtkOrientationMarkerWidget> orientationWidget =vtkSmartPointer<vtkOrientationMarkerWidget>::New();orientationWidget->SetOutlineColor(0.9300, 0.5700, 0.1300);orientationWidget->SetInteractor(interactor);orientationWidget->SetOrientationMarker(iconActor);orientationWidget->SetViewport(0.0, 0.0, 0.2, 0.2);orientationWidget->SetEnabled(1);orientationWidget->InteractiveOn();vtkCaptionWidget//vtkSmartPointer<vtkCaptionWidget> captionWidget = // vtkSmartPointer<vtkCaptionWidget>::New();//captionWidget->SetInteractor(interactor);//vtkSmartPointer<vtkCaptionRepresentation> captionRepresentation =// vtkSmartPointer<vtkCaptionRepresentation>::New();//captionRepresentation->GetCaptionActor2D()->SetCaption("Caption Widget");//captionRepresentation->GetCaptionActor2D()->GetTextActor()->GetTextProperty()->SetFontSize(20);////double pos[3] = { .5, 0, 0 };//captionRepresentation->SetAnchorPosition(pos);//captionWidget->SetRepresentation(captionRepresentation);//captionWidget->On();/ vtkBalloonWidgetvtkSmartPointer<vtkBalloonWidget> balloonWidget =vtkSmartPointer<vtkBalloonWidget>::New();balloonWidget->SetInteractor(interactor);vtkSmartPointer<vtkBalloonRepresentation> balloonRep =vtkSmartPointer<vtkBalloonRepresentation>::New();balloonRep->SetBalloonLayoutToImageRight();balloonWidget->SetRepresentation(balloonRep);balloonWidget->AddBalloon(actor, "This is a widget example", NULL);balloonWidget->On();renderWindow->Render();interactor->Initialize();interactor->Start();return 0; }輸出結果如下:使用標注類Widget需要注意的是,除了指定的Widget表達實體之外,某些Widget還需要與其他Actor協(xié)同使用;如上例中的vtkScalarBarWidget要與vtkScalarBarActor協(xié)同工作;vtkTextWidget要與vtkTextActor協(xié)同工作。
3.參看資料
1.《C++ primer》2.《The VTK User’s Guide – 11thEdition》
3. ?張曉東, 羅火靈. VTK圖形圖像開發(fā)進階[M]. 機械工業(yè)出版社, 2015.
總結
以上是生活随笔為你收集整理的VTK修炼之道76:交互部件_标注类Widget的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【飞鸽传书】往往会说其应当具备可维护性
- 下一篇: 用API OleLoadPicture通