rock_widget_collection  0.1
Public Slots | Public Member Functions | List of all members
Vectorfield3D Class Reference

Widget to display vector (flux density) fields in Vizkit based on VTK. More...

#include <vectorfield3D.h>

Inherits QVTKWidget.

Public Slots

void setScalarBarTitle (QString title)
 
void setTitle (QString title)
 
void addVector (base::Position pos, base::Vector3d flux)
 
void addVector (double px, double py, double pz, double x, double y, double z)
 
void showScalarBar (bool b)
 
void showOrientationMarker (bool b)
 

Public Member Functions

 Vectorfield3D (QWidget *parent=0)
 
virtual ~Vectorfield3D ()
 

Detailed Description

Widget to display vector (flux density) fields in Vizkit based on VTK.

Definition at line 32 of file vectorfield3D.h.

Constructor & Destructor Documentation

◆ Vectorfield3D()

Vectorfield3D::Vectorfield3D ( QWidget *  parent = 0)

Definition at line 15 of file vectorfield3D.cc.

16  : QVTKWidget(parent),
17  vectorfield(vtkSmartPointer<vtkPolyData>::New()),
18  points(vtkSmartPointer<vtkPoints>::New()),
19  vectors(vtkSmartPointer<vtkFloatArray>::New()),
20  glyphMapper(vtkSmartPointer<vtkPolyDataMapper>::New()),
21  lut(vtkSmartPointer<vtkLookupTable>::New()),
22  ren(vtkSmartPointer<vtkRenderer>::New()),
23  scalarBar(vtkSmartPointer<vtkScalarBarActor>::New()),
24  marker(vtkSmartPointer<vtkOrientationMarkerWidget>::New()),
25  mag_max(0.0), mag_min(1.0)
26 {
27 
28  // Color lookup table hue range and resolution
29  lut->SetNumberOfColors(1024);
30  lut->SetHueRange(0.667, 0.0);
31  lut->SetVectorModeToMagnitude();
32  lut->Build();
33 
34  // data structure to hold vectorfield of type PolyData
35  vectorfield->SetPoints(points);
36  vectors->SetNumberOfComponents(3);
37  vectorfield->GetPointData()->SetVectors(vectors);
38 
39  // Arrow source (outputs PolyData)
40  vtkSmartPointer<vtkArrowSource> arrow = vtkSmartPointer<vtkArrowSource>::New();
41  arrow->SetTipResolution(6);
42  arrow->SetTipRadius(0.05);
43  arrow->SetTipLength(0.35);
44  arrow->SetShaftResolution(6);
45  arrow->SetShaftRadius(0.015);
46 
47  // the actual glyph to vizualize a vector
48  vtkSmartPointer<vtkGlyph3D> glyph = vtkSmartPointer<vtkGlyph3D>::New();
49  glyph->SetInput(vectorfield);
50  glyph->SetSource(arrow->GetOutput());
51  glyph->SetVectorModeToUseVector();
52  glyph->SetColorModeToColorByVector();
53  glyph->SetScaleModeToDataScalingOff();
54  glyph->OrientOn();
55  glyph->SetScaleFactor(0.2);
56 
57  // Set up camera view
58  vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New();
59  cam->SetPosition(10.0, 0, 0);
60  cam->SetFocalPoint(0.0, 0.0, 0.0);
61  //cam->SetViewUp(0.0, 0.0, 0.0);
62  //cam->SetViewAngle(18.604);
63 
64  // glyph mapper
65  glyphMapper->SetInputConnection( glyph->GetOutputPort() );
66  glyphMapper->SetLookupTable(lut);
67 
68  // Glyph actor
69  vtkSmartPointer<vtkActor> glyphActor = vtkSmartPointer<vtkActor>::New();
70  glyphActor->SetMapper( glyphMapper );
71 
72  // Scalar scale bar actor
73  scalarBar->SetLookupTable(lut);
74  scalarBar->SetTitle("Flux Magnitude");
75  scalarBar->SetNumberOfLabels(2);
76 scalarBar->SetOrientationToHorizontal();
77  // scalarBar->SetOrientationToVertical();
78  scalarBar->SetWidth(0.6);
79  scalarBar->SetHeight(0.05);
80  scalarBar->SetPosition(0.2, 0.1);
81 
82  // Renderer
83  ren->AddActor(glyphActor);
84  ren->AddActor(scalarBar);
85  ren->SetBackground( 0.8, 0.8, 0.8 );
86  ren->SetActiveCamera(cam);
87 
88  // render window
89  vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
90  renWin->AddRenderer( ren );
91  //renWin->SetSize(1024, 768);
92  SetRenderWindow(renWin);
93 
94  vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor>::New();
95  marker->SetOutlineColor(0.93, 0.57, 0.13);
96  marker->SetOrientationMarker(axes);
97  marker->SetInteractor(renWin->GetInteractor());
98  marker->SetViewport(0.0, 0.0, 0.25, 0.25);
99  marker->SetEnabled(1);
100  marker->InteractiveOff();
101 }

◆ ~Vectorfield3D()

Vectorfield3D::~Vectorfield3D ( )
virtual

Definition at line 103 of file vectorfield3D.cc.

104 {
105  //vectorfield->Delete();
106  //points->Delete();
107  //vectors->Delete();
108  //glyphMapper->Delete();
109  //lut->Delete();
110  //ren->Delete();
111  //scalarBar->Delete();
112 }

Member Function Documentation

◆ addVector [1/2]

void Vectorfield3D::addVector ( base::Position  pos,
base::Vector3d  flux 
)
slot

Add a vector to the vectorfield visualization

Parameters
posOrigin of the vector
fluxField strenght and orientation in 3D

Definition at line 132 of file vectorfield3D.cc.

132  {
133  Vectorfield3D::addVector(pos(0), pos(1), pos(2), flux(0), flux(1), flux(2));
134 }
void addVector(base::Position pos, base::Vector3d flux)

◆ addVector [2/2]

void Vectorfield3D::addVector ( double  px,
double  py,
double  pz,
double  x,
double  y,
double  z 
)
slot

Add a vector to the vectorfield visualization.

Parameters
px,py,pzThe origin of the vector
x,y,zField strength and orientation

Definition at line 114 of file vectorfield3D.cc.

115  {
116  double v[3];
117  v[0] = x;
118  v[1] = y;
119  v[2] = z;
120  double magnitude = sqrt(x*x + y*y + z*z);
121  if (magnitude < mag_min) mag_min = magnitude;
122  if (magnitude > mag_max) mag_max = magnitude;
123  int id = points->GetNumberOfPoints();
124  points->InsertPoint(id,px, py, pz);
125  points->Modified();
126  vectors->InsertTuple(id, v);
127  vectors->Modified();
128  glyphMapper->SetScalarRange(mag_min, mag_max);
129  update();
130 }

◆ setScalarBarTitle

void Vectorfield3D::setScalarBarTitle ( QString  title)
slot

Method to set the title of the scalar range legend bar.

Parameters
titleThe scalar range legend bar caption

Definition at line 148 of file vectorfield3D.cc.

148  {
149  scalarBar->SetTitle(title.toStdString().c_str());
150  update();
151 }

◆ setTitle

void Vectorfield3D::setTitle ( QString  title)
slot

Set the title of the rendering window.

Parameters
titleTitle of the rendering window

Definition at line 144 of file vectorfield3D.cc.

144  {
145  setWindowTitle(title);
146 }

◆ showOrientationMarker

void Vectorfield3D::showOrientationMarker ( bool  b)
slot

toggle visibility of orientatin marker

Definition at line 140 of file vectorfield3D.cc.

140  {
141  marker->SetEnabled(b ? 1 : 0);
142 }

◆ showScalarBar

void Vectorfield3D::showScalarBar ( bool  b)
slot

Toggle visibility of scalar range legend bar

Definition at line 136 of file vectorfield3D.cc.

136  {
137  b ? ren->AddActor(scalarBar) : ren->RemoveActor(scalarBar);
138 }

The documentation for this class was generated from the following files: