[vtkusers] Pass data in reader without copying?
Elvis Stansvik
elvis.stansvik at orexplore.com
Sun Jul 3 15:06:05 EDT 2016
2016-07-03 20:19 GMT+02:00 David Gobbi <david.gobbi at gmail.com>:
> On Sun, Jul 3, 2016 at 11:59 AM, Elvis Stansvik <
> elvis.stansvik at orexplore.com> wrote:
>
>> 2016-07-03 19:57 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:
>>
>>> If I'm writing my own custom volume reader, and I have the read data in
>>> memory (say as a float*). If I know the data is in the right format/layout,
>>> can I somehow pass ownership of that data to the output of the algorithm
>>> without incurring a copy?
>>>
>>> I've been looking at some of the simpler readers that come with VTK, but
>>> all of them seems to copy the read data to the output (?).
>>>
>>
>> Looking at vtkImageData, what I would like (I think) is some way of
>> setting the pointer that is returned by vtkImageData::GetScalarPointer.
>>
>
> Here is a cut & paste of code from vtkImageImport. Read the the
> documentation for vtkAbstractArray::SetVoidArray() carefully.
>
Ah, thanks a lot. I should have found that.
Elvis
>
> vtkImageData *data = vtkImageData::SafeDownCast(output);
> data->SetExtent(0,0,0,0,0,0);
> data->AllocateScalars(outInfo);
> vtkIdType size = this->NumberOfScalarComponents;
> size *= this->DataExtent[1] - this->DataExtent[0] + 1;
> size *= this->DataExtent[3] - this->DataExtent[2] + 1;
> size *= this->DataExtent[5] - this->DataExtent[4] + 1;
> data->SetExtent(this->DataExtent);
> data->GetPointData()->GetScalars()->SetVoidArray(inputPtr, size, 1);
> data->GetPointData()->GetScalars()->SetName(this->ScalarArrayName);
>
> - David
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160703/d51b24c4/attachment.html>
More information about the vtkusers
mailing list