3 #include <vtkLookupTable.h> 4 #include <vtkArrowSource.h> 5 #include <vtkGlyph3D.h> 6 #include <vtkPolyDataReader.h> 7 #include <vtkRenderWindow.h> 10 #include <vtkRenderWindowInteractor.h> 11 #include <vtkInteractorStyleTrackballCamera.h> 12 #include <vtkPointData.h> 13 #include <vtkAxesActor.h> 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)
29 lut->SetNumberOfColors(1024);
30 lut->SetHueRange(0.667, 0.0);
31 lut->SetVectorModeToMagnitude();
35 vectorfield->SetPoints(points);
36 vectors->SetNumberOfComponents(3);
37 vectorfield->GetPointData()->SetVectors(vectors);
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);
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();
55 glyph->SetScaleFactor(0.2);
58 vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New();
59 cam->SetPosition(10.0, 0, 0);
60 cam->SetFocalPoint(0.0, 0.0, 0.0);
65 glyphMapper->SetInputConnection( glyph->GetOutputPort() );
66 glyphMapper->SetLookupTable(lut);
69 vtkSmartPointer<vtkActor> glyphActor = vtkSmartPointer<vtkActor>::New();
70 glyphActor->SetMapper( glyphMapper );
73 scalarBar->SetLookupTable(lut);
74 scalarBar->SetTitle(
"Flux Magnitude");
75 scalarBar->SetNumberOfLabels(2);
76 scalarBar->SetOrientationToHorizontal();
78 scalarBar->SetWidth(0.6);
79 scalarBar->SetHeight(0.05);
80 scalarBar->SetPosition(0.2, 0.1);
83 ren->AddActor(glyphActor);
84 ren->AddActor(scalarBar);
85 ren->SetBackground( 0.8, 0.8, 0.8 );
86 ren->SetActiveCamera(cam);
89 vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
90 renWin->AddRenderer( ren );
92 SetRenderWindow(renWin);
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();
115 double x,
double y,
double 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);
126 vectors->InsertTuple(
id, v);
128 glyphMapper->SetScalarRange(mag_min, mag_max);
137 b ? ren->AddActor(scalarBar) : ren->RemoveActor(scalarBar);
141 marker->SetEnabled(b ? 1 : 0);
145 setWindowTitle(title);
149 scalarBar->SetTitle(title.toStdString().c_str());
Vectorfield3D(QWidget *parent=0)
void setTitle(QString title)
void showOrientationMarker(bool b)
void addVector(base::Position pos, base::Vector3d flux)
void setScalarBarTitle(QString title)
void showScalarBar(bool b)