vtkScalarBarWidget以及vtkTextWidget、vtkOrientationMarkerWidget 显示颜色递变范围,文本以及actor方向

发布时间 2024-01-05 12:43:23作者: ID是菜鸟

 

vtkScalarBarWidget 用于显示颜色递变的范围

vtkTextWidget 用于显示文本

vtkOrientationMarkerWidget 使用当前actor的方向

输入测试数据scalarBarWidgetTestData.vtk

/**********************************************************************

  文件名: 8.3_AnnotationWidget.cpp
  Copyright (c) 张晓东, 罗火灵. All rights reserved.
  更多信息请访问: 
    http://www.vtkchina.org (VTK中国)
    http://blog.csdn.net/www_doling_net (东灵工作室) 

**********************************************************************/

#include <vtkSmartPointer.h>
#include <vtkActor.h>
#include <vtkLookupTable.h>
#include <vtkUnstructuredGridReader.h>
#include <vtkUnstructuredGrid.h>
#include <vtkDataSetMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkScalarBarActor.h>
#include <vtkScalarBarWidget.h>
#include <vtkTextActor.h>
#include <vtkTextWidget.h>
#include <vtkTextRepresentation.h>
#include <vtkTextProperty.h>
#include <vtkCaptionRepresentation.h>
#include <vtkCaptionWidget.h>
#include <vtkCaptionActor2D.h>
#include <vtkBalloonRepresentation.h> 
#include <vtkBalloonWidget.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkAxesActor.h>

//测试:../data/scalarBarWidgetTestData.vtk
int main(int argc, char* argv[])
{
    if ( argc < 2 )
    {
        std::cout<<argv[0]<<" "<<"scalarBarWidgetTestData.vtk(*.vtk)"<<std::endl;
        return EXIT_FAILURE;
    }
    char* fileName = argv[1];

    vtkSmartPointer< vtkUnstructuredGridReader > reader = vtkSmartPointer< vtkUnstructuredGridReader >::New();
    reader->SetFileName(fileName);
    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.0, 1.0, 1.0);

    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);

    //////////////////////////////////////////////////////////////////////////
    // vtkScalarBarWidget
    vtkSmartPointer< vtkScalarBarActor > scalarBarActor = vtkSmartPointer< vtkScalarBarActor >::New();
    scalarBarActor->SetOrientationToHorizontal();
    scalarBarActor->SetLookupTable(lut);

    vtkSmartPointer< vtkScalarBarWidget > scalarBarWidget = vtkSmartPointer< vtkScalarBarWidget >::New();
    scalarBarWidget->SetInteractor(interactor);
    scalarBarWidget->SetScalarBarActor(scalarBarActor);
    scalarBarWidget->On();

    //////////////////////////////////////////////////////////////////////////
    // vtkTextWidget
    vtkSmartPointer<vtkTextActor> textActor =
        vtkSmartPointer<vtkTextActor>::New();
    textActor->SetInput("VTK Widgets");
    textActor->GetTextProperty()->SetColor( 0.0, 1.0, 0.0 );

    vtkSmartPointer<vtkTextWidget> textWidget =
        vtkSmartPointer<vtkTextWidget>::New();

    vtkSmartPointer<vtkTextRepresentation> textRepresentation =
        vtkSmartPointer<vtkTextRepresentation>::New();
    textRepresentation->GetPositionCoordinate()->SetValue( .15, .15 );
    textRepresentation->GetPosition2Coordinate()->SetValue( .7, .2 );
    textWidget ->SetRepresentation( textRepresentation );

    textWidget->SetInteractor(interactor);
    textWidget->SetTextActor(textActor);
    textWidget->SelectableOff();
    textWidget->On();

    //////////////////////////////////////////////////////////////////////////
    // vtkOrientationMarkerWidget
    vtkSmartPointer<vtkAxesActor> iconActor = vtkSmartPointer<vtkAxesActor>::New();
    vtkSmartPointer<vtkOrientationMarkerWidget> orientationWidget  =
        vtkSmartPointer<vtkOrientationMarkerWidget>::New();
    orientationWidget ->SetOutlineColor( 0.9300, 0.5700, 0.1300 );
    orientationWidget ->SetOrientationMarker( iconActor );
    orientationWidget ->SetInteractor( interactor );
    orientationWidget ->SetViewport( 0.0, 0.0, 0.2, 0.2 );
    orientationWidget ->SetEnabled( 1 );
    orientationWidget ->InteractiveOn();


    renderWindow->Render();
    interactor->Initialize();
    interactor->Start();

    return EXIT_SUCCESS;
}