Closed mattions closed 12 years ago
Adding an idea from Gael here:
Bug #21: figure out which call in VTK has changed signature, and what is the new signature. For this inspect the call stack using pdb to see where 'vtk_method' comes from when the error is raised, then look at the online VTK reference and see what is the more recent signature of this VTK method, finally implement both options in abstract_picker, with a try/except.
I can't replicate this bug either. What's your VTK version?
I have VTK 5.6.1
Which is yours?
I'm trying to get a bit more a clear view into this and I think I've got a lead:
This is the current stack trace:
mtime: 814019.Print the args passed to the picker:
((105, 134, 0), <libvtkRenderingPython.vtkOpenGLRenderer vtkobject at 0x769da20>)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/mattions/.virtualenvs/mayavi_git/src/mayavi/mayavi/core/mouse_pick_dispatcher.pyc in on_button_release(self, vtk_picker, event)
166 x, y = vtk_picker.GetEventPosition()
167 for picker in self._active_pickers.values():
--> 168 picker.pick((x, y, 0), self.scene.scene.renderer)
169 self._mouse_no_mvt = 0
170
/home/mattions/.virtualenvs/mayavi_git/src/mayavi/tvtk/tvtk_classes.zip/tvtk_classes/abstract_picker.pyc in pick(self, *args)
151 """
152 my_args = [deref_vtk(x) for x in args]
--> 153 ret = self._wrap_call(self._vtk_obj.Pick, *my_args)
154 return ret
155
/home/mattions/.virtualenvs/mayavi_git/src/mayavi/tvtk/tvtk_base.py in _wrap_call(self, vtk_method, *args)
523 print("mtime: %s.Print the args passed to the picker:" %mtime)
524 print(args)
--> 525 ret = vtk_method(*args)
526 self._in_set -= 1
527 if self._wrapped_mtime(vtk_obj) > mtime:
TypeError: function takes exactly 4 arguments (2 given)
which means there is something going on in the zipped class. I've extracted and I found on the doc:
def pick(self, *args):
"""
V.pick(float, float, float, Renderer) -> int
V.pick((float, float, float), Renderer) -> int
return this Pick selectionPt selectionPt selectionPt ren
Perform pick operation with selection point provided. Normally the
first two values for the selection point are x-y pixel coordinate, and
the third value is =0. Return non-zero if something was successfully
picked.
"""
my_args = [deref_vtk(x) for x in args]
ret = self._wrap_call(self._vtk_obj.Pick, *my_args)
return ret
So the method should exists, however the selection for the methods is somehow wrong. The first one is used and therefore I get the error.
Any idea about this?
If I pass the single coordinates instead of the tuple, I get this working
from
picker.pick((x, y, 0), self.scene.scene.renderer)
to
picker.pick(x, y, 0, self.scene.scene.renderer)
Should I open a pull request to have it in this format?
On Wed, Feb 08, 2012 at 03:36:33AM -0800, Michele Mattioni wrote:
Should I open a pull request to have it in this format?
Yes, with a try/except trying the current solution, and if it fails with the exception that is currently been raised, trying the other.
Thanks
I've update the pull request #23 with the try except clause https://github.com/mattions/mayavi/commit/4ffeaabeb9a9b827eed7bd856bc1c1eb59ac07c6
It should merge without trouble. Works here.
taken car in pull #23
I've just upgraded to Mayavi 4.0.0 and I've discovered that the picker type=cell doesn't work. to be precise is the line:
For example, try to use it with the redball example:
I'm getting this error:
It worked before with 3.6.0