Dear All,<br><br><br>could someone explain to me how I can extract a scalar component from a multicomponent array using vtkImageExtractComponents ?<br>I have an vtkStructuredPoints with M scalar components defined over the same grid, and I would like to apply some scaling using vtkShiftScale to only several of these components. What I am doing right now is: <br>
<br>&nbsp; double range[2];<br>&nbsp; vtkImageExtractComponents *myImgComp = vtkImageExtractComponents::New ();<br>&nbsp; myImgComp-&gt;AddInput (inputMultivariateField);<br>&nbsp; myImgComp-&gt;SetComponents (idx);<br>&nbsp; myImgComp-&gt;Update ();<br>
<br>&nbsp; myImgComp-&gt;GetOutput ()-&gt;GetScalarRange (range);<br>&nbsp; vtkDataArray *myArray = inputMultivariateField-&gt;GetPointData ()-&gt;GetScalars ();&nbsp; <br>//&nbsp;&nbsp; myArray-&gt;GetRange (range, idx);<br>&nbsp; <br>&nbsp; cout&lt;&lt;&quot;##Range for field &quot;&lt;&lt;idx&lt;&lt;&quot;: (&quot;&lt;&lt;range[0]&lt;&lt;&quot;, &quot;&lt;&lt;range[1]&lt;&lt;&quot;)&quot;&lt;&lt;endl;<br>
&nbsp; <br>&nbsp; vtkImageShiftScale* shifter = vtkImageShiftScale::New();<br>&nbsp; shifter-&gt;SetShift(-1.0*range[0]);<br>&nbsp; shifter-&gt;SetScale(255.0/(range[1]-range[0]));<br>&nbsp; shifter-&gt;SetOutputScalarTypeToUnsignedChar();<br>&nbsp; shifter-&gt;SetInput (myImgComp-&gt;GetOutput ());<br>
&nbsp; shifter-&gt;ReleaseDataFlagOff();<br>&nbsp; shifter-&gt;Update();<br><br>&nbsp; vtkDataArray *myChangedComp = shifter-&gt;GetOutput ()-&gt;GetPointData ()-&gt;GetScalars ();&nbsp; <br><br>&nbsp; int nrTuples = myChangedComp-&gt;GetNumberOfTuples ();<br>
&nbsp; int nrComp = myArray-&gt;GetNumberOfComponents ();<br>&nbsp; double tupN[nrComp], tup;<br><br>&nbsp; for (vtkIdType i = 0; i &lt; nrTuples; i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myArray-&gt;GetTuple (i, tupN);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tup = myChangedComp-&gt;GetTuple1 (i);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tupN[idx] = tup;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myArray-&gt;SetTuple (i, tupN);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp; inputMultivariateField-&gt;GetPointData ()-&gt;SetScalars (myArray);<br><br>So I&#39;m extracting one component (which vtkImageExtractComponents copies in a separate vtkImageData object), and then work on the scalars directly. Is there another simpler way of doing this?<br>
<br>Thanks!<br>Adrian<br clear="all"><br>-- <br>---------------------------------------------------<br>Adrian Albert<br>School of Engineering and Science<br>Jacobs University Bremen<br>Germany<br>Tel.: 00494212003258