@@ -84,25 +84,46 @@ def _plotInternal(self):
8484 arrow .SetOutputPointsPrecision (vtk .vtkAlgorithm .DOUBLE_PRECISION )
8585 arrow .FilledOff ()
8686
87+ polydata = self ._vtkPolyDataFilter .GetOutput ()
88+ vectors = polydata .GetPointData ().GetVectors ()
89+ vectorsRangeX = vectors .GetRange (0 )
90+ vectorsRangeY = vectors .GetRange (1 )
91+ vectorsRange = []
92+ vectorsRange .insert (0 , vectorsRangeY [0 ] if (vectorsRangeX [0 ] > vectorsRangeY [0 ]) else vectorsRangeX [0 ])
93+ vectorsRange .insert (1 , vectorsRangeY [1 ] if (vectorsRangeX [1 ] > vectorsRangeY [1 ]) else vectorsRangeX [1 ])
94+
95+ scalarArray = vtk .vtkDoubleArray ()
96+ scalarArray .SetNumberOfComponents (1 )
97+ scalarArray .SetNumberOfValues (vectors .GetNumberOfTuples ())
98+
99+ oldRange = vectorsRange [1 ] - vectorsRange [0 ]
100+ newRange = 1 - 0.0
101+
102+ for i in range (0 , vectors .GetNumberOfTuples ()):
103+ norm = vtk .vtkMath .Norm (vectors .GetTuple (i ))
104+ newValue = (((norm - vectorsRange [0 ]) * newRange ) / oldRange ) + 0.1
105+ scalarArray .SetValue (i , newValue )
106+
107+ polydata .GetPointData ().SetScalars (scalarArray )
108+
87109 glyphFilter = vtk .vtkGlyph2D ()
88- glyphFilter .SetInputConnection (self ._vtkPolyDataFilter .GetOutputPort ())
110+ # glyphFilter.SetInputConnection(self._vtkPolyDataFilter.GetOutputPort())
111+ glyphFilter .SetInputData (polydata )
89112 glyphFilter .SetInputArrayToProcess (1 , 0 , 0 , 0 , "vector" )
90113 glyphFilter .SetSourceConnection (arrow .GetOutputPort ())
91114 glyphFilter .SetVectorModeToUseVector ()
92115
93116 # Rotate arrows to match vector data:
94117 glyphFilter .OrientOn ()
118+ glyphFilter .ScalingOn ()
95119
96120 # Scale to vector magnitude:
97- glyphFilter .SetScaleModeToScaleByVector ()
121+ # NOTE: Currently we compute our own scaling factor since VTK does
122+ # it by clamping the values > max to max and values < min to min
123+ # and not remap the range.
124+ glyphFilter .SetScaleModeToScaleByScalar ()
98125 glyphFilter .SetScaleFactor (scale * 2.0 * self ._gm .scale )
99126
100- # These are some unfortunately named methods. It does *not* clamp the
101- # scale range to [min, max], but rather remaps the range
102- # [min, max] --> [0, 1].
103- glyphFilter .ClampingOn ()
104- glyphFilter .SetRange (0.01 , 1.0 )
105-
106127 mapper = vtk .vtkPolyDataMapper ()
107128
108129 glyphFilter .Update ()
0 commit comments