<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Dear Dave,<br><br>Thanks for your feedback.  I have managed to get the desired results by using:<br><br>polyData-&gt;GetPointData()-&gt;SetScalars(...)<br><br>twice - first for the tube radius array, then for the "array" of RGB triples.  A stand-alone C++ code is given below.<br><br>However, if I exchange the order of the two SetScalars commands (RGB array first, then radius scalars), then the RGB colors are not mapped.  This seems to be due to changing which of the two scalar arrays are "active" in polyData.<br><br>In trying to follow your advice, I gave the RGB array a name (see below, cols-&gt;SetName("cRGB")), and then try to use:<br><br>mapper-&gt;SelectColorArray("cRGB");<br><br>This doesn't appear to work. It seems I am not using these commands correctly.<br><br>Could you please advise how to explicitly use SelectColorArray in the present context to
 force the correct behaviour, irrespective of the order of SetScalars commands (which I might not always be able to choose due to code flow reasons).<br><br>Many thanks, MT<br><br><br>C++ code:<br>----------------------------------------<br><br>// VTK: Spiral with vtkTubeFilter<br>// Linearly varying tube radius and independent RGB colors with an unsignedCharArray<br><br>#include &lt;math.h&gt;<br>#include &lt;vtkPolyData.h&gt;<br>#include &lt;vtkPoints.h&gt;<br>#include &lt;vtkCellArray.h&gt;<br>#include &lt;vtkDoubleArray.h&gt;<br>#include &lt;vtkPolyData.h&gt;<br>#include &lt;vtkPointData.h&gt;<br><br>#include &lt;vtkCell.h&gt;<br>#include &lt;vtkCellData.h&gt;<br>#include &lt;vtkDataSet.h&gt;<br>#include &lt;vtkDataSetAttributes.h&gt;<br>#include &lt;vtkProperty.h&gt;<br>#include &lt;vtkSmartPointer.h&gt;<br>#include &lt;vtkTubeFilter.h&gt;<br><br>#include &lt;vtkDataSetMapper.h&gt;<br>#include &lt;vtkPolyDataMapper.h&gt;<br>#include
 &lt;vtkActor.h&gt;<br>#include &lt;vtkRenderer.h&gt;<br>#include &lt;vtkRenderWindow.h&gt;<br>#include &lt;vtkRenderWindowInteractor.h&gt;<br>#include &lt;vtkInteractorStyleTrackballCamera.h&gt;<br><br>#define PI 3.14159265<br><br>int main()<br>{<br>        // Spiral tube<br>        double vx, vy, vz;<br>        unsigned int nV=64;                // No. of vertices<br>        unsigned int ncyc=2;        // No. of spiral cycles<br>        double Rt1=0.1, Rt2=0.5;                                // Start/end tube radii<br>        double Rs=2;                                // Spiral radius<br>        double h=3;                                // Height<br>        unsigned int Ntv=8;                // No. of surface elements for each tube vertex<br><br>        unsigned int i;<br><br>        vtkSmartPointer&lt;vtkPoints&gt; points = vtkSmartPointer&lt;vtkPoints&gt;::New();<br>        for(i=0; i&lt;nV; i++) {<br>                // Spiral coordinates<br>                vx = Rs*cos(2*PI*ncyc*i/(nV-1));<br>                vy = Rs*sin(2*PI*ncyc*i/(nV-1));<br>                vz = h*i/nV;<br><br>                points-&gt;InsertPoint(i,vx,vy,vz);<br>        }<br><br>        vtkSmartPointer&lt;vtkCellArray&gt; lines =
 vtkSmartPointer&lt;vtkCellArray&gt;::New();<br>        lines-&gt;InsertNextCell(nV);<br>        for (i=0; i&lt;nV; i++) lines-&gt;InsertCellPoint(i);<br><br>        vtkSmartPointer&lt;vtkPolyData&gt; polyData = vtkSmartPointer&lt;vtkPolyData&gt;::New();<br>        polyData-&gt;SetPoints(points);<br>        polyData-&gt;SetLines(lines);<br>        polyData-&gt;BuildLinks();<br><br>        // Varying tube radius - linearly between start/end values<br>        vtkSmartPointer&lt;vtkDoubleArray&gt; tuberad = vtkSmartPointer&lt;vtkDoubleArray&gt;::New();<br>        tuberad-&gt;SetNumberOfTuples(nV);<br>        for (i=0 ;i&lt;nV ; i++) tuberad-&gt;SetTuple1(i,Rt1+(Rt2-Rt1)*i/(nV-1));<br>        polyData-&gt;GetPointData()-&gt;SetScalars(tuberad);        <br><br>        // RBG array<br>        // Varying from blue to red<br>        vtkSmartPointer&lt;vtkUnsignedCharArray&gt; cols = vtkSmartPointer&lt;vtkUnsignedCharArray&gt;::New();<br>        cols-&gt;SetName("cRGB");<br>        cols-&gt;SetNumberOfComponents(3);<br>        cols-&gt;SetNumberOfTuples(nV);<br>        for (i=0; i&lt;nV ; i++)
 {<br>                cols-&gt;InsertTuple3(i, int(255*i/(nV-1)) , 0 , int(255*(nV-1-i)/(nV-1)) );<br>        }<br>        // and add to polyData<br>        polyData-&gt;GetPointData()-&gt;SetScalars(cols);<br>        vtkSmartPointer&lt;vtkTubeFilter&gt; tube = vtkSmartPointer&lt;vtkTubeFilter&gt;::New();<br>        tube-&gt;SetNumberOfSides(Ntv);<br>        tube-&gt;SetInput(polyData);<br>        tube-&gt;SetVaryRadiusToVaryRadiusOff();<br><br>        // Set tube radius scaling parameters to achieve "physical" radii<br>        vtkFloatingPointType tuberad_range[2];<br>        tuberad-&gt;GetRange(tuberad_range);<br>        tube-&gt;SetVaryRadiusToVaryRadiusByScalar();<br>        tube-&gt;SetRadius(tuberad_range[0]);<br>        tube-&gt;SetRadiusFactor(tuberad_range[1]/tuberad_range[0]);<br><br>        vtkSmartPointer&lt;vtkPolyDataMapper&gt; mapper = vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<br>        mapper-&gt;SetInput(tube-&gt;GetOutput());<br>        mapper-&gt;ScalarVisibilityOn();<br>        mapper-&gt;SelectColorArray("cRGB");  <br>        // This last line doesn't seem to
 help if the order of the two SetScalars() commands is reversed <br><br>        vtkSmartPointer&lt;vtkActor&gt; actor = vtkSmartPointer&lt;vtkActor&gt;::New();<br>        actor-&gt;SetMapper(mapper);<br><br>        vtkRenderer *renderer = vtkRenderer::New();<br>        renderer-&gt;AddActor(actor);<br><br>        vtkRenderWindow *renWin = vtkRenderWindow::New();<br>        vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();<br><br>        iren-&gt;SetRenderWindow(renWin);<br>        renWin-&gt;AddRenderer(renderer);<br>        renWin-&gt;SetSize(500,500);<br>        renWin-&gt;Render();<br><br>        vtkInteractorStyleTrackballCamera *style =<br>                vtkInteractorStyleTrackballCamera::New();<br>        iren-&gt;SetInteractorStyle(style);<br><br>        iren-&gt;Start();<br><br>        renderer-&gt;Delete();<br>        renWin-&gt;Delete();<br>        iren-&gt;Delete();<br>        style-&gt;Delete();<br><br>        return 0;<br>}<br><br><br></td></tr></table><br>__________________________________________________<br>Do You Yahoo!?<br>Sie sind Spam leid? Yahoo! Mail
 verfügt über einen herausragenden Schutz gegen Massenmails. <br>http://mail.yahoo.com