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.
114 auto transgeometry=vtkSmartPointer<vtkTransformFilter>::New();
115 transgeometry->SetInputConnection(
data_producer->GetOutputPort());
119 auto vector = vtkSmartPointer<vtkAssignAttribute>::New();
120 vector->Assign(
dataname.c_str(),vtkDataSetAttributes::VECTORS,vtkAssignAttribute::POINT_DATA);
121 vector->SetInputConnection(transgeometry->GetOutputPort());
125 if (
state.show_quiver)
130 throw std::runtime_error(
"Please dont't forget to set quiver points/grid");
132 auto transprobe=vtkSmartPointer<vtkTransformPolyDataFilter>::New();
138 auto probeFilter = vtkSmartPointer<vtkProbeFilter>::New();
139 probeFilter->SetComputeTolerance(
true);
140 probeFilter->SetSourceConnection(vector->GetOutputPort());
141 probeFilter->SetInputConnection(transprobe->GetOutputPort());
142 probeFilter->PassPointArraysOn();
145 auto glyph = vtkSmartPointer<vtkGlyph3D>::New();
146 glyph->SetInputConnection(probeFilter->GetOutputPort());
147 glyph->SetColorModeToColorByVector();
148 glyph->SetScaleModeToScaleByVector();
151 if (
state.spacedim==2)
158 glyph->SetSourceConnection(
arrow3d->GetOutputPort());
166 glyph->SetSourceConnection(
arrow3d->GetOutputPort());
169 auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
170 mapper->SetInputConnection(glyph->GetOutputPort());
172 mapper->UseLookupTableScalarRangeOn();
176 vtkSmartPointer<vtkActor> quiver_actor = vtkSmartPointer<vtkActor>::New();
177 quiver_actor->SetMapper(mapper);
180 if (
state.show_quiver_colorbar)
187 if (
state.show_stream)
192 auto calc= vtkSmartPointer<vtkArrayCalculator>::New();
193 calc->SetInputConnection(vector->GetOutputPort());
194 calc->AddVectorArrayName(
dataname.c_str());
207 calc->SetFunction(func.c_str());
208 calc->SetResultArrayName((
dataname+
"magnitude").c_str());
211 auto vecmag = vtkSmartPointer<vtkAssignAttribute>::New();
212 vecmag->Assign((
dataname+
"magnitude").c_str(),vtkDataSetAttributes::SCALARS,vtkAssignAttribute::POINT_DATA);
213 vecmag->SetInputConnection(calc->GetOutputPort());
216 auto transseed=vtkSmartPointer<vtkTransformPolyDataFilter>::New();
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);
255 if (
state.spacedim==2)
259 stream->SetComputeVorticity(
false);
263 stream->SetComputeVorticity(
true);
269 auto ribbon=vtkSmartPointer<vtkRibbonFilter>::New();
270 ribbon->SetInputConnection(stream->GetOutputPort());
271 ribbon->SetWidth(
state.stream_ribbonwidth);
274 auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
275 mapper->SetInputConnection(ribbon->GetOutputPort());
276 mapper->ScalarVisibilityOn();
278 mapper->UseLookupTableScalarRangeOn();
281 vtkSmartPointer<vtkActor> stream_actor = vtkSmartPointer<vtkActor>::New();
282 stream_actor->SetMapper(mapper);
288 if (
state.show_stream_colorbar)
vtkSmartPointer< vtkPolyData > probePolyData
vtkSmartPointer< vtkPolyData > seedPolyData
vtkSmartPointer< vtkScalarBarActor > BuildColorBar(vtkSmartPointer< vtkPolyDataMapper > mapper, int irank=0)