VTKFIG  0.20.20181114
Easy VTK based in situ visualization
template<class DATA >
void vtkfig::VectorView::RTBuildVTKPipeline0 ( )
private

be careful here: transform filter transforms vectors as well so one has to transform first without assiging the vector atrribute an assign after transform.

put this into dataset ? So we can immediately get magnitude? CreateMagnitude, CreateComponent(i) Also, we get color scaling by lut.

Definition at line 106 of file vtkfigVectorView.cxx.

107  {
108  RTCalcTransform();
109 
110 
114  auto transgeometry=vtkSmartPointer<vtkTransformFilter>::New();
115  transgeometry->SetInputConnection(data_producer->GetOutputPort());
116  transgeometry->SetTransform(transform);
117 
118 
119  auto vector = vtkSmartPointer<vtkAssignAttribute>::New();
120  vector->Assign(dataname.c_str(),vtkDataSetAttributes::VECTORS,vtkAssignAttribute::POINT_DATA);
121  vector->SetInputConnection(transgeometry->GetOutputPort());
122 
123 
124 
125  if (state.show_quiver)
126  {
127 
128  if (!probePolyData)
129  {
130  throw std::runtime_error("Please dont't forget to set quiver points/grid");
131  }
132  auto transprobe=vtkSmartPointer<vtkTransformPolyDataFilter>::New();
133  transprobe->SetInputDataObject(probePolyData);
134  transprobe->SetTransform(transform);
135 
136 
137 
138  auto probeFilter = vtkSmartPointer<vtkProbeFilter>::New();
139  probeFilter->SetComputeTolerance(true);
140  probeFilter->SetSourceConnection(vector->GetOutputPort());
141  probeFilter->SetInputConnection(transprobe->GetOutputPort());
142  probeFilter->PassPointArraysOn();
143 
144 
145  auto glyph = vtkSmartPointer<vtkGlyph3D>::New();
146  glyph->SetInputConnection(probeFilter->GetOutputPort());
147  glyph->SetColorModeToColorByVector();
148  glyph->SetScaleModeToScaleByVector();
149 
150 
151  if (state.spacedim==2)
152  {
153  arrow3ds->SetTipResolution(8);
154  arrow3ds->SetTipLength(0.35);
155  arrow3ds->SetTipRadius(0.15);
156  arrow3ds->SetShaftRadius(0.075);
157 
158  glyph->SetSourceConnection(arrow3d->GetOutputPort());
159  }
160  else
161  {
162  arrow3ds->SetTipResolution(16);
163  arrow3ds->SetTipLength(0.3);
164  arrow3ds->SetTipRadius(0.1);
165  arrow3ds->SetShaftRadius(0.025);
166  glyph->SetSourceConnection(arrow3d->GetOutputPort());
167  }
168  // map gridfunction
169  auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
170  mapper->SetInputConnection(glyph->GetOutputPort());
171  mapper->SetLookupTable(quiver_lut);
172  mapper->UseLookupTableScalarRangeOn();
173 
174 
175  // create plot quiver actor
176  vtkSmartPointer<vtkActor> quiver_actor = vtkSmartPointer<vtkActor>::New();
177  quiver_actor->SetMapper(mapper);
178 
179 
180  if (state.show_quiver_colorbar)
182 
183  // add actors to renderer
184  Figure::RTAddActor(quiver_actor);
185  }
186 
187  if (state.show_stream)
188  {
192  auto calc= vtkSmartPointer<vtkArrayCalculator>::New();
193  calc->SetInputConnection(vector->GetOutputPort());
194  calc->AddVectorArrayName(dataname.c_str());
195 
196  std::string func="";
197  func+="mag(";
198  func+=dataname;
199  func+="*1.0)";
200 
201 
202  // std::string func="";
203  // func+="mag(";
204  // func+=dataname;
205  // func+=")";
206 
207  calc->SetFunction(func.c_str());
208  calc->SetResultArrayName((dataname+"magnitude").c_str());
209 
210 
211  auto vecmag = vtkSmartPointer<vtkAssignAttribute>::New();
212  vecmag->Assign((dataname+"magnitude").c_str(),vtkDataSetAttributes::SCALARS,vtkAssignAttribute::POINT_DATA);
213  vecmag->SetInputConnection(calc->GetOutputPort());
214 
215 
216  auto transseed=vtkSmartPointer<vtkTransformPolyDataFilter>::New();
217  transseed->SetInputDataObject(seedPolyData);
218  transseed->SetTransform(transform);
219 
220 
221 
222  auto stream=vtkSmartPointer<vtkStreamTracer>::New();
223  stream->SetInputConnection(vecmag->GetOutputPort());
224  stream->SetSourceConnection(transseed->GetOutputPort());
225  stream->SetIntegrationStepUnit(vtkStreamTracer::LENGTH_UNIT);
226  stream->SetInterpolatorType(vtkStreamTracer::INTERPOLATOR_WITH_CELL_LOCATOR);
227  stream->SetMaximumPropagation(state.stream_maximum_propagation);
228  stream->SetInitialIntegrationStep(state.stream_initial_integration_step);
229  stream->SetMaximumIntegrationStep(state.stream_maximum_integration_step);
230  stream->SetIntegrationDirectionToForward();
231  stream->SetIntegratorTypeToRungeKutta4();
232  stream->SetMaximumNumberOfSteps(state.stream_maximum_number_of_steps);
233 
234 
235  // https://github.com/vejmarie/vtk-7/blob/master/Examples/GUI/Python/StreamlinesWithLineWidget.py
236  // streamer = vtk.vtkStreamTracer()
237  // streamer.SetInputData(pl3d_output)
238  // streamer.SetSourceData(seeds)
239  // streamer.SetMaximumPropagation(100)
240  // streamer.SetInitialIntegrationStep(.2)
241  // streamer.SetIntegrationDirectionToForward()
242  // streamer.SetComputeVorticity(1)
243  // streamer.SetIntegrator(rk4)
244  // rf = vtk.vtkRibbonFilter()
245  // rf.SetInputConnection(streamer.GetOutputPort())
246  // rf.SetWidth(0.1)
247  // rf.SetWidthFactor(5)
248  // streamMapper = vtk.vtkPolyDataMapper()
249  // streamMapper.SetInputConnection(rf.GetOutputPort())
250  // streamMapper.SetScalarRange(pl3d_output.GetScalarRange())
251  // streamline = vtk.vtkActor()
252  // streamline.SetMapper(streamMapper)
253 
254 
255  if (state.spacedim==2)
256  {
257  //stream->SetSurfaceStreamlines(1);
258  // works only with point locator
259  stream->SetComputeVorticity(false);
260  }
261  else
262  {
263  stream->SetComputeVorticity(true);
264  }
265 
266 
267 
268 
269  auto ribbon=vtkSmartPointer<vtkRibbonFilter>::New();
270  ribbon->SetInputConnection(stream->GetOutputPort());
271  ribbon->SetWidth(state.stream_ribbonwidth);
272  //ribbon->SetVaryWidth(1);
273 
274  auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
275  mapper->SetInputConnection(ribbon->GetOutputPort());
276  mapper->ScalarVisibilityOn();
277  mapper->SetLookupTable(stream_lut);
278  mapper->UseLookupTableScalarRangeOn();
279 
280  // create plot quiver actor
281  vtkSmartPointer<vtkActor> stream_actor = vtkSmartPointer<vtkActor>::New();
282  stream_actor->SetMapper(mapper);
283 
284 
285 
286  // add actors to renderer
287  Figure::RTAddActor(stream_actor);
288  if (state.show_stream_colorbar)
290 
291  }
292 
293  }
vtkSmartPointer< vtkLookupTable > quiver_lut
Definition: vtkfigFigure.h:268
std::string dataname
Name of data item in data set.
Definition: vtkfigFigure.h:256
void RTAddActor2D(vtkSmartPointer< vtkActor2D > prop)
Add vtk Actor to renderer showing figure.
vtkSmartPointer< vtkLookupTable > stream_lut
Definition: vtkfigFigure.h:271
vtkSmartPointer< vtkPolyData > probePolyData
vtkSmartPointer< vtkPolyData > seedPolyData
vtkSmartPointer< vtkTrivialProducer > data_producer
Data producer for grid dataset.
Definition: vtkfigFigure.h:247
vtkSmartPointer< vtkTransform > transform
Definition: vtkfigFigure.h:200
void RTCalcTransform()
Calculate transformation to unit cube This shall be applied to all data.
struct vtkfig::Figure::@0 state
figure state
vtkSmartPointer< vtkTransformPolyDataFilter > arrow3d
Definition: vtkfigFigure.h:214
void RTAddActor(vtkSmartPointer< vtkActor > prop)
Add vtk Actor to renderer showing figure.
vtkSmartPointer< vtkScalarBarActor > BuildColorBar(vtkSmartPointer< vtkPolyDataMapper > mapper, int irank=0)
Definition: vtkfigTools.cxx:88
vtkSmartPointer< vtkArrowSource > arrow3ds
Definition: vtkfigFigure.h:216

+ Here is the call graph for this function: