日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VTK修炼之道76:交互部件_标注类Widget的应用

發布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VTK修炼之道76:交互部件_标注类Widget的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.標注類Widget

在可視化程序中,經常會對某個對象做一些標注說明,比如,在醫學圖像診斷中,常常會手動標注出被診斷為腫瘤的區域或者其他病變區域,并用文字進行標注。 VTK中,與標注相關的Widget如下表所示:
  • vtkTextWidget:在渲染場景中生成一串標識文本,可以隨意調整該文本在渲染場景中的位置,縮放其大小等。
  • vtkScalarBarWidget:根據輸入的數據在渲染場景中生成一個標量條,通過設置顏色查找表,可以用標量條上的顏色來指示輸入的數據。渲染場景中的標量條可以隨意移動、改變大小、設置不同的方向等。
  • vtkCaptionWidget:用一個帶線框及箭頭的文本信息來標注某一對象。
  • vtkOrientationMarkerWidget:渲染場景中所渲染數據的方向指示標志。在醫學圖像領域有廣泛的應用,比如,通過CT/MR等掃描的數據,當將其導入可視化應用程序時需要標識其上、下、左、右、前、后等方位。
  • 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協同使用;如上例中的vtkScalarBarWidget要與vtkScalarBarActor協同工作;vtkTextWidget要與vtkTextActor協同工作。

3.參看資料

1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3. ?張曉東, 羅火靈. VTK圖形圖像開發進階[M]. 機械工業出版社, 2015.

總結

以上是生活随笔為你收集整理的VTK修炼之道76:交互部件_标注类Widget的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。