<div dir="ltr">Hi Nil,<div><br>Classes like vtkCellArray and vtkPoints use a vtkDataArray to store their data, and vtkDataArray provides a python buffer interface via the wrappers.  It is this buffer interface that the vtk numpy_interface package uses to efficiently integrate numpy with VTK.</div><div><br></div><div>At the low level, it works like this: vtkDataArray provides a python buffer interface, so a vtkDataArray can be passed as a parameter to any python method that expects a buffer object, which allows a numpy array to be constructed from vtkDataArray.</div><div><br></div><div>To get at the vtkDataArray inside of a vtkPoints object, you can use SetData()/GetData():</div><div><br></div><div>  SetData(vtkDataArray)  // sets the data array used by vtkPoints</div><div>  GetData() -> vtkDataArray // gets the data array used by vtkPoints</div><div><br></div><div>In addition to making a numpy array from a vtkDataArray, It is also possible to make a vtkDataArray use the memory allocated for a numpy array by calling vtkDataArray.SetVoidArray().  This has to be done with extreme caution, however, so numpy_interface is probably the way to go.</div><div><br></div><div> - David </div><div><br></div><div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 18, 2016 at 12:06 PM, Berk Geveci <span dir="ltr"><<a href="mailto:berk.geveci@kitware.com" target="_blank">berk.geveci@kitware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">I am assuming that there is a way of passing numpy arrays from regular Python to Cython compiled code? If there is, you can always get access to VTK pointers as numpy arrays through the numpy interface. This would look like this:<div><br></div><div>In (C) Python:</div><div><br></div><div>Get VTK object</div><div>Get various data structures (arrays, cell arrays etc.) as numpy arrays</div><div>Call Cython code</div><div><br></div><div>In Cython</div><div><br></div><div>Do some processing</div><div>Generate new arrays</div><div>Return as numpy arrays to (C) Python</div><div><br></div><div>In (C) Python</div><div><br></div><div>Stick numpy arrays back into VTK data structures such as arrays, cell arrays etc.</div><div><br></div><div>Best,</div><div>-berk</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div>On Mon, Jan 18, 2016 at 2:02 PM, Nil Goyette <span dir="ltr"><<a href="mailto:nil.goyette@imeka.ca" target="_blank">nil.goyette@imeka.ca</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div>
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Hi Cory,<br>
    <br>
    Thank you for the answer. Yes, I know that vtk is coded in C++ and
    that python-vtk is only a binding. I thought that maybe there was a
    way to avoid some of the expensive calls. For example, I have this
    loop in a cython file:<br>
    <br>
    <tt><big># streamline is a ndarray of 3d points<br>
        for i in range(nb_points):<br>
            point_3d = streamline[i]<br>
            vtk_points.InsertNextPoint</big></tt><tt>(<big>point_3d</big>)</tt><br>
    <br>
    I know that InsertNextPoint is as fast as it can be, but the call
    itself is expensive. As you said, there's probably nothing to be
    done here using cython.<br>
    <br>
    Which bring me to another question! As I said above, I have a 2D
    ndarray (list of 3d points) that I need to put in a vtkPoints
    object. I think it's a waste of time to copy the data in a loop
    because both vtk and numpy represent their data the same way and
    should be able to read the data of the other library.<br>
    <br>
    I found the "VTK - numpy integration" posts this morning
    <a href="http://www.kitware.com/blog/home/post/709" target="_blank">http://www.kitware.com/blog/home/post/709</a> and I thought that maybe
    there a way to create a vtkPoints from a numpy array without a loop.
    I couldn't find how to do it though. It seems we can only create
    vtkDataSets and put them in bbtk objects. Do you know if what I want
    to do is possible?<span><font color="#888888"><br>
    <br>
    Nil</font></span><span><br>
    <br>
    <div>Le 2016-01-16 07:59, Cory Quammen a
      écrit :<br>
    </div>
    <blockquote type="cite">
      <pre>Nil,

VTK is C++ library that provides Python language bindings, so all the
VTK parts you call in your Python code are invoking compiled C++
functions. There is no need to cythonize them.

Cory

On Fri, Jan 15, 2016 at 11:30 AM, Nil Goyette <a href="mailto:nil.goyette@imeka.ca" target="_blank"><nil.goyette@imeka.ca></a> wrote:
</pre>
      <blockquote type="cite">
        <pre>Hi all,

I tried making a part of my pytthon code faster and vtk is the only part
which I can't change anything. In fact, I can't find any information on
cythonizing vtk. Maybe because one should use C++ if he wants a fast version
:) or maybe because there's simply not much information on the subject.

Is there some specific advices to vtk? Where to find the cdef?
Or it's simply the general advices like: get a pointer to the data asap to
be in C mode, then cdef everything?

Nil
</pre>
      </blockquote>
    </blockquote>
  </span></div>

</div></div></blockquote></div></div></blockquote></div><br></div></div></div>