[Paraview] How to generate/access Points array from vtkImageData Inbox

Gang Song songgang97 at gmail.com
Thu Oct 25 16:00:48 EDT 2012


Hi David,

fromvtkarray works like a charm. Terrific! Thank you.

Is there any extra online documentation / examples for these paraview
python libraries? I could only find limited examples on Paraview wiki
pages. I hope I can learn from more examples.


Thanks

Gang

On Thu, Oct 25, 2012 at 3:40 PM, David E DeMarle
<dave.demarle at kitware.com> wrote:
> Try this modern version of that:
>
> from paraview.numeric import fromvtkarray
> array = fromvtkarray(
>   self.GetInput().GetPoints().GetData()
> )
> print array
>
> David E DeMarle
> Kitware, Inc.
> R&D Engineer
> 21 Corporate Drive
> Clifton Park, NY 12065-8662
> Phone: 518-881-4909
>
>
> On Thu, Oct 25, 2012 at 2:56 PM, Gang Song <songgang97 at gmail.com> wrote:
>> Thanks for explanation. I will write the numpy expression for this.
>> One related question is how to convert the vtkPoints to a numpy array.
>> From wiki, I saw it asks to use vtkDataArrayToVTKArray, but I coulnd't
>> find an example for this. The following code doesn't work:
>>
>> points = vtk.vtkPoints();
>> # ....
>> points_array = vtkDataArrayToVTKArray(points.GetData())
>>
>> Seems I am missing some arguments here.
>>
>>
>> Thanks
>>
>> Gang
>>
>>
>> On Thu, Oct 25, 2012 at 2:50 PM, David E DeMarle
>> <dave.demarle at kitware.com> wrote:
>>> You should come up with numpy expression that derives each point's location.
>>>
>>> vtkImageData's point locations are implicitly determined by the image data's
>>> origin, extent, and spacing.
>>>
>>> David E DeMarle
>>> Kitware, Inc.
>>> R&D Engineer
>>> 21 Corporate Drive
>>> Clifton Park, NY 12065-8662
>>> Phone: 518-881-4909
>>>
>>>
>>> On Thu, Oct 25, 2012 at 2:37 PM, Gang Song <songgang97 at gmail.com> wrote:
>>>> Hi,
>>>>
>>>> I am writing a Python programmable filter in Paraview. The input
>>>> source is a type of vtkImageData. I want to get the coordinates of all
>>>> the points and use them to generate an output of type
>>>> vtkStructuredGrid. Currently I am using a for loop:
>>>>
>>>> pdi = self.GetInput()
>>>> pdo = self.GetOutput()
>>>>
>>>> numPts = pdi.GetNumberOfPoints()
>>>> points = vtk.vtkPoints()
>>>> points.Allocate(numPts, numPts)
>>>>
>>>> for i in xrange(numPts):
>>>>         point = pdi.GetPoint(i)
>>>>         # ...
>>>>         # other manipulations on point
>>>>         # ...
>>>>         points.InsertNextPoint(point)
>>>>
>>>> # ...
>>>> pdo.SetDimensions(pdi.GetDimensions())
>>>> pdo.SetPoints(points)
>>>>
>>>>
>>>> My problem is that for loop became very slow for large image volumes.
>>>> So I am replacing it with numpy. But I couldn't find a way to get
>>>> points array directly from vtkImageData, something like:
>>>>
>>>> points = pdi.Points
>>>> points = points * 0.5
>>>> newPoints.SetData(numpyTovtkDataArray(points))
>>>>
>>>>
>>>> It seems that there is no internal points array stored in
>>>> vtkImageData. Is there a easy way to do this?
>>>>
>>>>
>>>> Thanks
>>>>
>>>> Gang
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.paraview.org/mailman/listinfo/paraview


More information about the ParaView mailing list