[Paraview] Manipulating Big Data through Python Shell

Pat Marion pat.marion at kitware.com
Mon Sep 10 14:11:09 EDT 2012


Hi,

I just found this thread, sorry I didn't join earlier!  Thanks for
uploading those movies, the second one really helps demonstrate the lag
issue.

Well, I'm almost certain the issue is that ParaViewSocketPlugin doesn't
work very well for this type of high frequency rendering.  I've been
working on a similar remote control app, but instead of using a Wiimote to
send camera manipulations, it uses KiwiViewer on iOS/Android (I'll get a
movie uploaded and send you the url.)  I also started with
ParaViewSocketPlugin, but had to drop it in favor of a different design.
So lets say the Wiimote program is sending 100 updates a second, but
ParaView renders at a slower rate, lets say 30 fps for example.  While
ParaViewSocketPlugin is handling the very first message from the Wiimote,
it receives 3 more.  The problem is that it then processes the next
message, instead of merging all 3 of those messages to a single camera
manipulation.  The longer you interact, ParaViewSocketPlugin falls further
and further behind.  Normally, we don't worry about any of these details
when using a mouse, because Qt talks with X11 and merges pending mouse
events.

Here's a quick hack that might work: in your python code, instead of
calling Render(), or doing any work that requires a non trivial amount of
time, just store the updated camera parameters and return as soon as
possible.  Next, modify the Qt code in ParaViewSocketPlugin to create a
QTimer that fires at 30 hz.  Connect the QTimer to a slot callback that
execs a python code to take the current camera parameters and Render().
Hopefully, the result is that the messages arriving on the socket in
ParaViewSocketPlugin empty instantly, and ParaView renders at 30 hz using
the latest camera parameters.

Alternative designs could remove the QTimer and integrate better with the
Qt event loop, so that the Wiimote sends events just like a mouse does.  An
advantage of something like ParaViewSocketPlugin is that you have more
flexibility because you can exec arbitrary python code.

Pat



On Thu, Sep 6, 2012 at 5:38 PM, Bueter, Travis J. (S&T-Student) <
tjbxv7 at mail.mst.edu> wrote:

>  Today I uploaded two videos to Youtube, showing the basics of what is
> happening. They can be found via the following links:****
>
> **1.       **http://www.youtube.com/watch?v=68yeT8t0TUc&feature=youtu.be**
> **
>
> **2.       **http://www.youtube.com/watch?v=Linns_iSBro&feature=youtu.be**
> **
>
> ** **
>
> The init.py file used now uses “renView.InteractiveRender()” instead of
> just “Render()”, as suggested by Utkarsh. (Thank you again for that
> suggestion by the way!)****
>
> ** **
>
> The first video is the mouse-based manipulation of 20MB of earthquake
> data. As shown, LOD is not active and my computer has no problem panning,
> rotating, etc. in near real-time.****
>
> ** **
>
> Now in the second video you see how ParaView acts when using the Wii
> Nunchuk. The first part, without LOD active, you can see the extreme delay
> after I let go. After turning on LOD, the rendering speed does improve
> quite a bit but it is still not nearly as instantaneous as the mouse is
> without LOD. Also the data doesn’t fully re-render after releasing the
> joystick; a mouse click is still required. I think I can remedy that just
> by sending “Render()” when the joystick is released. ****
>
> ** **
>
> So my current goal is to get the Wii Nunchuk application running the
> ParaView rendering at least at 90% of the capacity of what the mouse can,
> only using LOD if it is required when using the mouse also. I’m clueless as
> what else I can do with sending commands to the Python Shell to speed
> things up.  Are there any ideas of how to reach this goal from where I am
> now? Whether it be improving the current process of sending Python commands
> or using a completely different process of manipulating the rendering from
> an external application.****
>
> ** **
>
> Also here is some more insight as to what the Wii application is actually
> doing in terms of interacting with ParaView. Just in case it could be
> useful information:****
>
> ** **
>
> **1.       **The application is written in C++. During initialization, it
> connects to the server socket and loads the init.py file through the
> following commands:****
>
> ** **
>
> svr.sin_family = AF_INET;****
>
> svr.sin_port = htons(9000);****
>
> inet_aton(“127.0.0.1”, &svr.sin_addr);****
>
> s = socket(AF_INET, SOCK_STREAM, 0);****
>
> connect(s, (const sockaddr*)&svr, sizeof(sockaddr_in));****
>
> write(s, “execfile(‘init.py’)”, sizeof(“execfile(‘init.py’)”));****
>
> ** **
>
> **2.       **From there, every time the joystick is moved outside of its
> “deadzone” the following lines are ran:****
>
> ** **
>
> stringstream ss;****
>
> ss.str(std::string());****
>
> ss << “command(“ << x_value << “,” << y_value << “);”;****
>
> const std::string temp = ss.str();****
>
> const char* cstr = temp.c_str();****
>
> write(s, cstr, strlen(cstr));****
>
> ** **
>
> **3.       **I’m pretty sure that it is not the C++ side of my Wii
> application slowing things down. Using ‘printf()’s, all the ‘write()’s
> happen and finish without any noticeable delay.****
>
> ** **
>
> I’m still open to any suggestions out there! All help is very appreciated
> J****
>
> ** **
>
> Thanks,****
>
> ** **
>
> *Travis J. Bueter*
>
> ----------------------------------------------------------------------****
>
> *Missouri University of Science and Technology - Junior*
>
> B.S. Computer Engineering/Computer Science****
>
> tjbxv7 at mail.mst.edu****
>
> (573)-238-5843****
>
> ** **
>
> IT RSS****
>
> Treasurer – MS&T Robotics Competition Team****
>
> ----------------------------------------------------------------------****
>
> ** **
>
> ** **
>
> _______________________________________________
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20120910/7ad9085b/attachment-0001.htm>


More information about the ParaView mailing list