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