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