上一个代码学习了QVTKOpenGLNativeWidget 的基本操作。这次学习 https://blog.youkuaiyun.com/shenziheng1/article/details/54952845 这里的内容。
代码如下。
#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);
/********************************************************************************************/
//标注类测试
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(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();
/ vtkOrientationMarkerWidget
vtkSmartPointer<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();
/ vtkBalloonWidget
vtkSmartPointer<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;
}
遗憾的是我没有他说的文件,data.vtk, 出来的图像没有那么好。
从网上找了一个立方体的vtk文件。
# vtk DataFile Version 3.0
Right rectangular prisms grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 8 double
0 0 0
50 0 0
0 50 0
50 50 0
0 0 50
50 0 50
0 50 50
50 50 50
CELLS 1 9
8 0 1 2 3 4 5 6 7
CELL_TYPES 1
11
CELL_DATA 1
SCALARS density double 1
LOOKUP_TABLE table1
1
SCALARS resistivity double 1
LOOKUP_TABLE table2
2
SCALARS temperature double 1
LOOKUP_TABLE table3
3
SCALARS susceptibility double 1
LOOKUP_TABLE table4
4
SCALARS permittivity double 1
LOOKUP_TABLE table4
4

图像颜色,不懂的太多,只能后续再说。
对于三维坐标轴的显示以及颜色示例条的显示比较有用,后续可以利用了。
742





