Thanks so much! That was really helpful.  <br>I am able to access my C array directly for vtkPoints.  That is awesome.  You explanation and advice really helped my understanding.<br><br>I am now trying to figure out this vtkCellArray which I understand takes a vtkIdTypeArray which contains vtkIdType.<br>
Again, I would like to be able to access my c array directly (if possible). Or, use the least overhead possible.<br>My c array is of type int and takes the form:  N, p1, p2, p3, N, p2,  p3, p4, p5, N, .... The number of points per cell varies.<br>
I guess I can&#39;t access this c array directly because it is not the right type.  Seems a shame.  The data seems to be represented exactly as the vtkCellArray is organized or at least in my limited understanding it does.<br>
<br>So, what&#39;s the best plan of action?  Fill an array of vtkIdType with the contents of my int c array. And, then pass that into a vtkIdTypeArray, which I then pass onto the vtkCellArray.<br><br>Any advice, code snippets would be much appreciated.  I am a bit stuck.<br>
<br>Matt<br><br><br><br><div class="gmail_quote">On Fri, Jan 15, 2010 at 11:03 AM, 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;">
The vtkPoints() class has a SetData() method as you have already seen,<br>
and the vtkCellArray class has a method called SetCells(int ncells,<br>
vtkIdTypeArray *cells) that takes a vtkDataArray that contains the<br>
connectivity array.<br>
<br>
For vtkPoints::SetData(), the vtkDataArray must be either a<br>
vtkFloatArray or a vtkDoubleArray.  For vtkCellArray::SetCells(), only<br>
a vtkIdTypeArray containing &quot;vtkIdType&quot; values is allowed... vtkIdType<br>
is a typedef for either &quot;int&quot; or &quot;long long&quot; depending on whether<br>
VTK_USE_64BIT_IDS was set by cmake.<br>
<br>
You can efficiently set up a vtkDataArray by using the SetTuple()<br>
method, since it is an inline method.  In fact, so is the<br>
vtkPoints::SetPoint() method.<br>
<br>
If you have a huge data set and don&#39;t want to copy your data, you can<br>
have VTK use your C arrays directly.  The VTK arrays have a method<br>
called &quot;SetArray()&quot; that can be used like this:<br>
<br>
vtkFloatArray *array = vtkFloatArray::New();<br>
array-&gt;SetNumberOfComponents(3);<br>
array-&gt;SetArray(c_array, number_of_points*3, 1);<br>
<br>
The &quot;1&quot; on the end tells VTK not call &quot;delete []&quot; or &quot;free()&quot; on<br>
c_array when the vtkDataArray is freed.  You don&#39;t have to call<br>
SetNumberOfTuples() because VTK will automatically set the size of the<br>
array from the size of the c_array you give it.<br>
<br>
Note that VTK always uses vtkIdType for its cells, you can&#39;t choose<br>
whether to use 32-bit or 64-bit ids at run time.<br>
<br>
   David<br>
<div><div></div><div class="h5"><br>
<br>
On Fri, Jan 15, 2010 at 9:21 AM, Matt &lt;<a href="mailto:pspmatt@gmail.com">pspmatt@gmail.com</a>&gt; wrote:<br>
&gt; Hello,<br>
&gt;<br>
&gt; I have recently started using VTK.  First, let me say thanks! It is amazing.<br>
&gt; I am working on an application in ITTVIS IDL that will communicate with a<br>
&gt; DLL (C++) that contains VTK code.<br>
&gt; I have the DLL and the communication working fine and am able to pass data<br>
&gt; between the programs.<br>
&gt; I want to make a bunch of polygons and pass them through the generate tube<br>
&gt; filter before passing it back to IDL.<br>
&gt;<br>
&gt; I am passing two arrays from IDL:<br>
&gt;<br>
&gt; 1) Array of points in floats. 1D.    Form:    X0 Y0 Z0 X1 Y1 Z1 X2 Y2 Z2<br>
&gt;<br>
&gt; 2) Array of connectivity in int. 1D    Form:        N P0 P1 P2 N P1 P3 N P2<br>
&gt; P3<br>
&gt;<br>
&gt;<br>
&gt; ** I think the data is in the form that it is represented in memory in VTK.<br>
&gt; (As in pg. 126 4th edition, OO approach to 3D graphics)<br>
&gt;<br>
&gt; The usual approach would be to create a vtkPolyData array (for the<br>
&gt; polygons), vtkPoints, and a vtkCellArray for connectivity).<br>
&gt; And, then to fill them using vtkPoints-&gt;InsertPoint,<br>
&gt; vtkCellArray-&gt;InsertNextCell, and then vtkPolyData-&gt;setPoints.<br>
&gt;<br>
&gt; However, I need this to be very effcient as I may be calling these routines<br>
&gt; repeatedly.  Given, that the data is almost in the form that VTK expects.<br>
&gt; I want to be able to stuff the data in whole vs point by point, cell by<br>
&gt; cell.<br>
&gt;<br>
&gt; I can&#39;t seem to find a good explanation on how I would go about doing this.<br>
&gt;<br>
&gt; There seems to be a -&gt;setData method in vtkPoints class but it takes a<br>
&gt; vtkDataArray and I currently just have a plain old array of floats.<br>
&gt; I think the same goes for setCells in the vtkCellArray class.<br>
&gt;<br>
&gt; Could someone give me a quick example of the few lines of code it would take<br>
&gt; to impelement this.  Or,, point me to a resource that shows an example of<br>
&gt; this<br>
&gt;<br>
&gt; Thanks<br>
&gt;<br>
&gt; Matt<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the VTK FAQ at:<br>
&gt; <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
&gt;<br>
&gt;<br>
</blockquote></div><br>