<div style="white-space:pre-wrap">Hi Ken,<br><br>    Thank you for your answer. So it seems to me that I should not call grid.Modified() if I only change the scalars? In my script there is almost no pipeline, I.e. I have:<br><br>Grid --> Mapper --> Actor<br><br>No filters, no updating, no nothing. <br><br>I will try your loop example tomorrow from my work computer. Also, how can I know if the rendering engine is using the GPU? I have a fairly powerful machine at work, able to run commercial 3D visualization software (on a geological scale) with multi-million cells with no problem...<br><br>Thank you again!<br><br>Andrea.<br></div><br><div class="gmail_quote"><div dir="ltr">On Tue, 29 Nov 2016 at 16:37, Ken Martin <<a href="mailto:ken.martin@kitware.com">ken.martin@kitware.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">The timing are all taken after the first rendering. I have a little GUI with a VTK render window and a single button. Every time I press the button new data is randomly generated and I time the rendering only process, i.e.:</div><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">VTK with OpenGL2 can render 500 million cells/second on a laptop GPU. If you are seeing performance significantly off from that and think you are using a GPU then something is wrong. To do timings do not rely on GetLastRenderTimeInSeconds but rather time a render loop like ala</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">startTimer</div><div class="gmail_msg">for (i = 0; i < 500; i++)</div><div class="gmail_msg">{</div><div class="gmail_msg"> renWin->Render();</div><div class="gmail_msg">}</div><div class="gmail_msg">endTimer</div><div class="gmail_msg">print elapsedTime/500;</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"> <br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_msg">grid.GetCellData().SetScalars(data)</div><div class="gmail_msg">grid.Modified()<br class="gmail_msg"></div></div><div class="gmail_msg">renwin.Render() </div></div></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">The render above is a first render, in that it is the first render after you modified your data. The entire</div><div class="gmail_msg">pipeline has to be run then. You are probably timing how has the pipeline can be modified and recalaculated when you change your data.</div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"> </div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">And I have a little rendering listener setup like this:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_msg">        renderer.AddObserver(vtk.vtkCommand.EndEvent, self.OnEndEvent)</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">    def OnEndEvent(self, caller, dummy1=None, dummy2=None, dummy3=None):</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">        timeInSeconds = caller.GetLastRenderTimeInSeconds()</div><div class="gmail_msg">        fps = 1.0/timeInSeconds</div><div class="gmail_msg">        print timeInSeconds, fps</div></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">However, I realized that the simulator outputs the grid with a lot of redundant information - i.e., duplicated points. So I did the following:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_msg">        clean = vtk.vtkExtractUnstructuredGrid()</div><div class="gmail_msg">        clean.SetInputData(grid.GetOutput())</div><div class="gmail_msg">        clean.MergingOn()</div><div class="gmail_msg">        clean.CellClippingOn()</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">        clean.SetCellMinimum(0)</div><div class="gmail_msg">        clean.SetCellMaximum(nx*ny*nz)</div><div class="gmail_msg">        clean.Update()</div></div><div class="gmail_msg"> </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">the "clean" grid contains far far far less points than the original one (as the coincident points have been merged), and the rendering is much faster - about 0.24 seconds or 4.2 fps. Now, if there was a way to tell the rendering engine to ignore the points (i.e., don't render the points, I only care about the cells...) that would be even better :-) .</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Thank you again for all your hints.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Andrea.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"> </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"> </div><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div></div></div><div class="gmail_extra gmail_msg"><div class="gmail_msg"><div class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-h5 gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Tue, Nov 29, 2016 at 3:39 AM, Andrea Gavana <span dir="ltr" class="gmail_msg"><<a href="mailto:andrea.gavana@gmail.com" class="gmail_msg" target="_blank">andrea.gavana@gmail.com</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg">Dear All,<div class="gmail_msg"><br class="gmail_msg"><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On 28 November 2016 at 16:12, Andrea Gavana <span dir="ltr" class="gmail_msg"><<a href="mailto:andrea.gavana@gmail.com" class="gmail_msg" target="_blank">andrea.gavana@gmail.com</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg">Hi David,<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">    thank you for your answer. I will put some more comments inline too. Any insight or suggestion is more than welcome.</div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg"><span class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-m_-5170571770281318777m_4329449808429185615gmail- gmail_msg">On 28 November 2016 at 15:40, David E DeMarle wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg">Responses inline. Mostly though, make sure you are using the "OpenGL2" rendering backend, which is the default for 7.0 and 7.1.<br class="gmail_msg"></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div></span><div class="gmail_msg">I am using VTK 7.0 through the Python bindings (the official ones from the Kitware website here:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><a href="http://www.vtk.org/download/" class="gmail_msg" target="_blank">http://www.vtk.org/download/</a><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">So I was assuming that the rendering backend was already OpenGL2... is there any way to check if this is really the case?</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Also, I have tried to load my dataset in ParaView, and ParaView seems to be doing some kind of black magic on my vtkUnstructuredGrid as I get these kind of messages when I load the vtk file:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">
<p style="margin:0px" class="gmail_msg"><span style="font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg">Warning: In C:\bbd\df0abce0\source-paraview\VTK\Rendering\VolumeOpenGL2\vtkOpenGLProjectedTetrahedraMapper.cxx, line 251</span></p>
<p style="margin:0px" class="gmail_msg"><span style="font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg">vtkOpenGLProjectedTetrahedraMapper (000000000D3CAA60): Missing FBO support. The algorithm may produce visual artifacts.</span></p>
<p style="margin:0px;font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg"><br class="gmail_msg"></p><p style="margin:0px;font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg"><br class="gmail_msg"></p><p style="margin:0px;font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg"><br class="gmail_msg"></p><p style="margin:0px;font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small" class="gmail_msg">Which, I believe, is telling me that ParaView is not doing what I am doing but maybe using some kind of volume-based rendering - when I rotate the grid the (almost cube-shaped) cells becomes subdivided in small triangles, when I stop interacting with them they go back to their normal appearance. It would be nice to know what ParaView is doing though, and also what "FBO support" means :-). I also noticed that ParaView is slightly faster in changing the displayed property - maybe 2 or 3 times faster than my bare-bone script.</span></p><p style="margin:0px;font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small" class="gmail_msg"><br class="gmail_msg"></span></p></div></div></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Just to add some more information: it is true that ParaView is faster in the re-rendering when I switch to another property, but it also shows heavy visual artifacts (i.e., cells with multiple colors in them?!? - see attached screenshot). So, if I understood it correctly, ParaView uses some kind of volume rendering of my vtkUnstructuredGrid (although I didn't ask it to... should it not use the default vtkDataSetMapper?).</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Based on my original pipeline:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">vtkUnstructuredGrid --> vtkThreshold --> vtkDataSetMapper --> vtkActor<br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I have tried everything I know to speed up the re-rendering of the grid, I actually operate directly on the output of vtkThreshold (that is still a vtkUnstructuredGrid), so I simply throw away the original grid. With and without ImmediateModeRendering, with and without backface culling. My best improvements so far took the rendering time from 1.04 seconds to 0.94 seconds... so not much of an improvement :-) .</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I am of course open to any suggestions anyone may have on the rendering part - assuming that my geometry is fixed (it is not, but I'll worry about that later...), basically only on the process:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">vtkUnstructuredGrid.SetScalars(my_data)</div><div class="gmail_msg">vtkUnstructuredGrid.Modified()<br class="gmail_msg"></div><div class="gmail_msg">vtkRenderWindow.Render()</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">And of course - if there are other visualization strategies I may use, please shout :-)</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Thank you.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Andrea.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"> </div><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"><p style="margin:0px;font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small" class="gmail_msg"></span></p><p style="margin:0px;font-family:courier;font-size:8.25pt;color:rgb(0,0,0)" class="gmail_msg"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small" class="gmail_msg"> </span><br class="gmail_msg"></p></div><div class="gmail_msg"><div class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-m_-5170571770281318777m_4329449808429185615gmail-h5 gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><span class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-m_-5170571770281318777m_4329449808429185615gmail-m_910782574786711220gmail- gmail_msg">On Mon, Nov 28, 2016 at 7:35 AM, Andrea Gavana <span dir="ltr" class="gmail_msg"><<a href="mailto:andrea.gavana@gmail.com" class="gmail_msg" target="_blank">andrea.gavana@gmail.com</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">Dear All,</font><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">     I am working with some stuff coming out of CFD simulations, and in the current work the simulator produces a 3D grid (unstructured grid made of hexahedrons). The full grid is about 4 million cells, but due to other settings in the simulator the number of "active" cells in the simulation ends up being "only" 270,000. In order to visualize all this, I create a vtkUnstructuredGrid to hold the full grid, use a vtkThreshold to remove the "inactive" cells and then use a vtkDataSetMapper to visualize the resulting active grid:</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">vtkUnstructuredGrid --> vtkThreshold --> vtkDataSetMapper --> vtkActor<br class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">However, the rendering speed for the 270,000 cells grid is quite low - it takes about one second to display a new property by using SetScalars on the output of vtkThreshold. So I thought of using a vtkDataSetSurfaceFilter on the output of vtkThreshold to try and speed up the rendering. So, the current visualization strategy I have implemented is the following:</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">vtkUnstructuredGrid --> vtkThreshold --> vtkDataSetSurfaceFilter --> vtkPolyDataMapper --> vtkActor</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">This is still as slow as my first approach, and I also have a couple of questions - which stems from my ignorance in VTK things:</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></span><div class="gmail_msg">DataSetMapper internally does vtkDataSetSurfaceFilter->vtkPolyDataMapper when given something other than PolyData, so not surprising that it isn't faster.<br class="gmail_msg"> <br class="gmail_msg"></div><span class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-m_-5170571770281318777m_4329449808429185615gmail-m_910782574786711220gmail- gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">1. When I load (from the simulator outputs) a new property (cell-based) and I assign its values to the original vtkUnstructuredGrid (by using SetScalars on it), do all the filters (vtkThreshold and vtkDataSetSurfaceFilter) need to be re-run? If yes, why? I am not changing the active/inactive cells nor the geometry of the grid, only assigning different scalars. And, if yes, is there any way to tell the pipeline: "look, I've only changed the scalars, there's no need to re-run all the thresholds and surface filters *again*"?</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></span><div class="gmail_msg">Yes they do, since the Executive classes' Modified time tracking is not fine grained enough to know the difference, and few if any of the filters would know how to update just the changed portions.<br class="gmail_msg"> <br class="gmail_msg"></div><span class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-m_-5170571770281318777m_4329449808429185615gmail-m_910782574786711220gmail- gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">2. Is there any other pipeline style or visualization technique in VTK or any settings whatsoever that could bring down the rendering time (memory is not that much of a concern)? Basically, what I have a the moment - in terms of timing - is as follows:</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></span><div class="gmail_msg">Yes, use OpenGL"2". Modern OpenGL programming techniques make it up to hundreds of times faster than the Legacy fixed function "OpenGL" backend.<br class="gmail_msg"> <br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-m_-5170571770281318777m_4329449808429185615gmail-m_910782574786711220gmail- gmail_msg"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"></font></div><div class="gmail_msg"><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">Reading data from simulator: 0.042 seconds</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">Create VTK array with data : 0.002 seconds</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">Call to SetScalars         : 0.000 seconds</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">Create Lookup Table        : 0.001 seconds</font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">Render on screen           : about 1 second</font></div><div class="gmail_msg"><br class="gmail_msg"></div></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">Thank you in advance for any suggestion, my apologies for the long message.</font></div><span class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-m_-5170571770281318777m_4329449808429185615gmail-m_910782574786711220gmail-m_-1709261349134371923HOEnZb gmail_msg"><font color="#888888" class="gmail_msg"><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg"><br class="gmail_msg"></font></div><div class="gmail_msg"><font face="monospace, monospace" class="gmail_msg">Andrea.</font></div></font></span></div>
<br class="gmail_msg"></span>_______________________________________________<br class="gmail_msg">
Powered by <a href="http://www.kitware.com" rel="noreferrer" class="gmail_msg" target="_blank">www.kitware.com</a><br class="gmail_msg">
<br class="gmail_msg">
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" class="gmail_msg" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br class="gmail_msg">
<br class="gmail_msg">
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" class="gmail_msg" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br class="gmail_msg">
<br class="gmail_msg">
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" class="gmail_msg" target="_blank">http://markmail.org/search/?q=vtkusers</a><br class="gmail_msg">
<br class="gmail_msg">
Follow this link to subscribe/unsubscribe:<br class="gmail_msg">
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" class="gmail_msg" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br class="gmail_msg">
<br class="gmail_msg"></blockquote></div><br class="gmail_msg"></div></div>
</blockquote></div></div></div><br class="gmail_msg"></div></div>
</blockquote></div><br class="gmail_msg"></div></div></div>
<br class="gmail_msg">_______________________________________________<br class="gmail_msg">
Powered by <a href="http://www.kitware.com" rel="noreferrer" class="gmail_msg" target="_blank">www.kitware.com</a><br class="gmail_msg">
<br class="gmail_msg">
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" class="gmail_msg" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br class="gmail_msg">
<br class="gmail_msg">
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" class="gmail_msg" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br class="gmail_msg">
<br class="gmail_msg">
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" class="gmail_msg" target="_blank">http://markmail.org/search/?q=vtkusers</a><br class="gmail_msg">
<br class="gmail_msg">
Follow this link to subscribe/unsubscribe:<br class="gmail_msg">
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" class="gmail_msg" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br class="gmail_msg">
<br class="gmail_msg"></blockquote></div><br class="gmail_msg"><br clear="all" class="gmail_msg"><span class="m_-6083094297592396510m_2131272924764224788HOEnZb gmail_msg"><font color="#888888" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div></font></span></div></div><span class="m_-6083094297592396510m_2131272924764224788HOEnZb gmail_msg"><font color="#888888" class="gmail_msg"><span class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-HOEnZb gmail_msg"><font color="#888888" class="gmail_msg">-- <br class="gmail_msg"><div class="m_-6083094297592396510m_2131272924764224788m_-6323519616493389093gmail-m_-5170571770281318777gmail_signature gmail_msg">Ken Martin PhD<div class="gmail_msg">Chairman & CFO<br class="gmail_msg">Kitware Inc.<br class="gmail_msg">28 Corporate Drive<br class="gmail_msg">Clifton Park NY 12065<br class="gmail_msg"><a href="tel:518%20371%203971" value="+15183713971" class="gmail_msg" target="_blank">518 371 3971</a><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><span style="font-size:10pt;font-family:tahoma,sans-serif" class="gmail_msg">This communication,
including all attachments, contains confidential and legally privileged
information, and it is intended only for the use of the addressee.  Access to this email by anyone else is
unauthorized. If you are not the intended recipient, any disclosure, copying,
distribution or any action taken in reliance on it is prohibited and may be
unlawful. If you received this communication in error please notify us
immediately and destroy the original message. 
Thank you.</span></div></div></div>
</font></span></font></span></div>
</blockquote></div><br class="gmail_msg"></div></div>
</blockquote></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><br class="gmail_msg"><br clear="all" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div>-- <br class="gmail_msg"><div class="m_-6083094297592396510m_2131272924764224788gmail_signature gmail_msg" data-smartmail="gmail_signature">Ken Martin PhD<div class="gmail_msg">Chairman & CFO<br class="gmail_msg">Kitware Inc.<br class="gmail_msg">28 Corporate Drive<br class="gmail_msg">Clifton Park NY 12065<br class="gmail_msg"><a href="tel:518%20371%203971" value="+15183713971" class="gmail_msg" target="_blank">518 371 3971</a><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><span style="font-size:10pt;font-family:Tahoma,sans-serif" class="gmail_msg">This communication,
including all attachments, contains confidential and legally privileged
information, and it is intended only for the use of the addressee.  Access to this email by anyone else is
unauthorized. If you are not the intended recipient, any disclosure, copying,
distribution or any action taken in reliance on it is prohibited and may be
unlawful. If you received this communication in error please notify us
immediately and destroy the original message. 
Thank you.</span></div></div></div>
</div></div></blockquote></div>