Thanks David.  You a were correct again.  I thought I would post my solution for posterity&#39;s sake.<br><br>  float * pts = (float * )Tubes-&gt;GetOutput()-&gt;GetPoints()-&gt;GetVoidPointer(0);<br>     - in this case I needed to cast the void pointer to the underlying data type which was float <br>
<br>  int * CA = Tubes-&gt;GetOutput()-&gt;GetStrips()-&gt;GetPointer();<br>   - better coding would probably use vtkIdType * instead of int *<br><br>Thanks<br><br>Matt<br><br>And, then pts[0], pts[1], pts[n-1] and the same for CA<br>
<br><div class="gmail_quote">On Mon, Jan 18, 2010 at 5:41 PM, David Gobbi <span dir="ltr">&lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Matt,<br>
<br>
I think you&#39;re looking for the GetPointer() method.  Every<br>
vtkDataArray has one.  It can return a pointer to the start of the<br>
array.<br>
<font color="#888888"><br>
   David<br>
</font><div><div></div><div class="h5"><br>
<br>
On Mon, Jan 18, 2010 at 3:45 PM, Matt &lt;<a href="mailto:pspmatt@gmail.com">pspmatt@gmail.com</a>&gt; wrote:<br>
&gt; Ok! So, I have managed to use my underlying C arrays without much overhead.<br>
&gt; Here, is the code:<br>
&gt;<br>
&gt;   float *vtkPts = (float * ) argv[0];<br>
&gt;   int *vtkCells = (int * ) argv[1];<br>
&gt;   int PtsArraySize = * (int *)  argv[2];<br>
&gt;   int CellArraySize = * (int *)  argv[3];<br>
&gt;   int nCells = * (int *) argv[4];<br>
&gt;<br>
&gt;   // Here comes the vtk stuff<br>
&gt;<br>
&gt;     vtkSmartPointer &lt;vtkFloatArray&gt; pts_fltarr =<br>
&gt; vtkSmartPointer&lt;vtkFloatArray&gt;::New();<br>
&gt;     pts_fltarr-&gt;SetNumberOfComponents(3); // X,Y,Z<br>
&gt;     pts_fltarr-&gt;SetArray(vtkPts, PtsArraySize, 1);<br>
&gt;<br>
&gt;     vtkSmartPointer &lt;vtkPoints&gt; Points = vtkSmartPointer&lt;vtkPoints&gt;::New();<br>
&gt;     Points-&gt;SetData(pts_fltarr);<br>
&gt;<br>
&gt;<br>
&gt;     vtkSmartPointer &lt;vtkIdTypeArray&gt; Conn =<br>
&gt; vtkSmartPointer&lt;vtkIdTypeArray&gt;::New();<br>
&gt;     Conn-&gt;SetArray(vtkCells, CellArraySize,1);<br>
&gt;<br>
&gt;     vtkSmartPointer &lt;vtkCellArray&gt; Polys =<br>
&gt; vtkSmartPointer&lt;vtkCellArray&gt;::New();<br>
&gt;     Polys-&gt;SetCells(nCells,Conn);<br>
&gt;<br>
&gt;     vtkSmartPointer &lt;vtkPolyData&gt; Tracts = vtkSmartPointer<br>
&gt; &lt;vtkPolyData&gt;::New();<br>
&gt;<br>
&gt;     Tracts-&gt;SetPoints(Points);<br>
&gt;     Tracts-&gt;SetLines(Polys);<br>
&gt;     Tracts-&gt;Update();<br>
&gt;<br>
&gt;     vtkSmartPointer &lt;vtkTubeFilter&gt; Tubes =<br>
&gt; vtkSmartPointer&lt;vtkTubeFilter&gt;::New();<br>
&gt;     Tubes-&gt;SetInput(Tracts);<br>
&gt;     Tubes-&gt;SetRadius(.2);<br>
&gt;     Tubes-&gt;SetNumberOfSides(6);<br>
&gt;     Tubes-&gt;Update();<br>
&gt;<br>
&gt; ------------------------------<br>
&gt;<br>
&gt; Now, I want to pass back two new arrays to IDL that contains the point data<br>
&gt; and the triangle strip (connectivity).<br>
&gt; Again, if I could just access the arrays directly life would be much<br>
&gt; simpler.  However, it appears going in reverse might be harder than what I<br>
&gt; have already setup.<br>
&gt;<br>
&gt; This will give me the size needed for the arrays:<br>
&gt;<br>
&gt;     // pts<br>
&gt;     int NumPoints = Tubes-&gt;GetOutput()-&gt;GetNumberOfPoints();<br>
&gt;<br>
&gt;     // cells/strips/num of elemens in array<br>
&gt;     int NumConn = Tubes-&gt;GetOutput()-&gt;GetStrips()-&gt;GetSize();<br>
&gt;<br>
&gt; The plan would be to allocate an array of ints (vtkIdType) to hold the<br>
&gt; strips and an array of floats to hold the point data.  Both, 1D.<br>
&gt;<br>
&gt; Strips (connectivity):<br>
&gt; -------------------------------<br>
&gt;<br>
&gt; Tubes-&gt;GetOutput()-&gt;GetStrips()-&gt;GetData() // Will give me a vtkIdTypeArray<br>
&gt; - but I really want is an array of vtkIdType.<br>
&gt;   -- At this point, I&#39;d like to use a getArray function like the setArray<br>
&gt; function - but, it doesn&#39;t exist.<br>
&gt;   -- So, do I need to loop through the whole vtkIdTypeArray and copy it into<br>
&gt; an array of vtkIdType??<br>
&gt;  -- or can I avoid this with some trick that I can&#39;t figure out?<br>
&gt;<br>
&gt; Points:<br>
&gt; ----------<br>
&gt; Tubes-&gt;GetOutput()-&gt;GetPoints() // will give me a vtkPoints object with all<br>
&gt; of my points<br>
&gt;<br>
&gt; -- Again, at this point, I&#39;d like to be able to extract the float array in<br>
&gt; the same way I set it, i.e setdata()<br>
&gt; -- I don&#39;t see a good option to do this.<br>
&gt; -- Do, I need to go point-by-point filling a new float array?<br>
&gt;<br>
&gt;<br>
&gt; Let me know if you can think of a way I can accomplish this?  I can write my<br>
&gt; own code to it.  But, wonder if there is a way to do this and my lack of<br>
&gt; experience with vtk is not allowing me to see it.<br>
&gt;<br>
&gt; Thanks again,<br>
&gt;<br>
&gt; Matt<br>
</div></div></blockquote></div><br>