@@ -84,25 +84,48 @@ 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
93+ (vectorsRangeX [0 ] > vectorsRangeY [0 ]) else vectorsRangeX [0 ])
94+ vectorsRange .insert (1 , vectorsRangeY [1 ]
95+ if (vectorsRangeX [1 ] > vectorsRangeY [1 ]) else vectorsRangeX [1 ])
96+
97+ scalarArray = vtk .vtkDoubleArray ()
98+ scalarArray .SetNumberOfComponents (1 )
99+ scalarArray .SetNumberOfValues (vectors .GetNumberOfTuples ())
100+
101+ oldRange = vectorsRange [1 ] - vectorsRange [0 ]
102+ newRange = 1.0 - 0.1
103+
104+ for i in range (0 , vectors .GetNumberOfTuples ()):
105+ norm = vtk .vtkMath .Norm (vectors .GetTuple (i ))
106+ newValue = (((norm - vectorsRange [0 ]) * newRange ) / oldRange ) + 0.1
107+ scalarArray .SetValue (i , newValue )
108+
109+ polydata .GetPointData ().SetScalars (scalarArray )
110+
87111 glyphFilter = vtk .vtkGlyph2D ()
88- glyphFilter .SetInputConnection (self ._vtkPolyDataFilter .GetOutputPort ())
112+ # glyphFilter.SetInputConnection(self._vtkPolyDataFilter.GetOutputPort())
113+ glyphFilter .SetInputData (polydata )
89114 glyphFilter .SetInputArrayToProcess (1 , 0 , 0 , 0 , "vector" )
90115 glyphFilter .SetSourceConnection (arrow .GetOutputPort ())
91116 glyphFilter .SetVectorModeToUseVector ()
92117
93118 # Rotate arrows to match vector data:
94119 glyphFilter .OrientOn ()
120+ glyphFilter .ScalingOn ()
95121
96122 # Scale to vector magnitude:
97- glyphFilter .SetScaleModeToScaleByVector ()
123+ # NOTE: Currently we compute our own scaling factor since VTK does
124+ # it by clamping the values > max to max and values < min to min
125+ # and not remap the range.
126+ glyphFilter .SetScaleModeToScaleByScalar ()
98127 glyphFilter .SetScaleFactor (scale * 2.0 * self ._gm .scale )
99128
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-
106129 mapper = vtk .vtkPolyDataMapper ()
107130
108131 glyphFilter .Update ()
0 commit comments