<div>On Fri, Jan 22, 2010 at 4:17 PM, David Gobbi <span dir="ltr">&lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;</span> wrote:</div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5">On Fri, Jan 22, 2010 at 2:06 PM, David Doria &lt;<a href="mailto:daviddoria%2Bvtk@gmail.com">daviddoria+vtk@gmail.com</a>&gt; wrote:<br>
&gt; On Fri, Jan 22, 2010 at 3:47 PM, David Gobbi &lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; It&#39;s failing because you are doing this:<br>
&gt;&gt;<br>
&gt;&gt;  rwi-&gt;GetKeySym() == &quot;Up&quot;<br>
&gt;&gt;<br>
&gt;&gt; Throw in a strcmp or something.<br>
&gt;&gt;<br>
&gt;&gt;  - David<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Jan 22, 2010 at 1:36 PM, David Doria &lt;<a href="mailto:daviddoria%2Bvtk@gmail.com">daviddoria+vtk@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; On Fri, Jan 22, 2010 at 3:21 PM, David Gobbi &lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I&#39;m not sure what #defines you are talking about, but why not use the<br>
&gt;&gt; &gt;&gt; interactor &quot;GetKeySym&quot; method to detect arrow keys?  They have the<br>
&gt;&gt; &gt;&gt; names &quot;Up&quot;, &quot;Down&quot;, &quot;Left&quot;, &quot;Right&quot;.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;    David<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Fri, Jan 22, 2010 at 1:18 PM, David Doria &lt;<a href="mailto:daviddoria%2Bvtk@gmail.com">daviddoria+vtk@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt; It seems that for win32, there are some #defines for arrow keys like<br>
&gt;&gt; &gt;&gt; &gt; VK_RIGHT. I can&#39;t seem to find what should be done for non win32 -<br>
&gt;&gt; &gt;&gt; &gt; any<br>
&gt;&gt; &gt;&gt; &gt; thoughts?<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Thanks,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; David<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; So typically I do this from inside my InteractorStyle subclass:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;     virtual void OnChar()<br>
&gt;&gt; &gt;     {<br>
&gt;&gt; &gt;       vtkRenderWindowInteractor *rwi = this-&gt;Interactor;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;       char ch = rwi-&gt;GetKeyCode() ;<br>
&gt;&gt; &gt;       switch (ch)<br>
&gt;&gt; &gt;       {<br>
&gt;&gt; &gt;         case &#39;s&#39;:<br>
&gt;&gt; &gt;           cout &lt;&lt; &quot;Pressed s.&quot; &lt;&lt; endl;<br>
&gt;&gt; &gt;           break;<br>
&gt;&gt; &gt;         case &#39;a&#39;:<br>
&gt;&gt; &gt;           cout &lt;&lt; &quot;Pressed a.&quot; &lt;&lt; endl;<br>
&gt;&gt; &gt;           break ;<br>
&gt;&gt; &gt;         default:<br>
&gt;&gt; &gt;           cout &lt;&lt; &quot;Pressed an unhandled key: &quot; &lt;&lt; rwi-&gt;GetKeyCode() &lt;&lt;<br>
&gt;&gt; &gt; endl;<br>
&gt;&gt; &gt;           break;<br>
&gt;&gt; &gt;       }<br>
&gt;&gt; &gt; The problem is that OnChar() doesn&#39;t fire when the arrow keys are<br>
&gt;&gt; &gt; pressed. I<br>
&gt;&gt; &gt; tried to use<br>
&gt;&gt; &gt;     virtual void OnKeyDown()<br>
&gt;&gt; &gt;     {<br>
&gt;&gt; &gt;       vtkRenderWindowInteractor *rwi = this-&gt;Interactor;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;       if(rwi-&gt;GetKeySym() == &quot;Up&quot;)<br>
&gt;&gt; &gt;       {<br>
&gt;&gt; &gt;         cout &lt;&lt; &quot;Pressed up.&quot; &lt;&lt; endl;<br>
&gt;&gt; &gt;       }<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;       // forward events<br>
&gt;&gt; &gt;       vtkInteractorStyleTrackballCamera::OnKeyDown();<br>
&gt;&gt; &gt;     }<br>
&gt;&gt; &gt; But it doesn&#39;t seem to compare to true. It also doesn&#39;t seem to flush<br>
&gt;&gt; &gt; the<br>
&gt;&gt; &gt; buffer when I would expect?<br>
&gt;&gt; &gt; Also, what is the difference between KeyPress and KeyDown? The<br>
&gt;&gt; &gt; documentation<br>
&gt;&gt; &gt; is kind of broken<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; here: <a href="http://www.vtk.org/doc/nightly/html/classvtkInteractorStyle.html#a65fcd9765c162a6021434386037ca641" target="_blank">http://www.vtk.org/doc/nightly/html/classvtkInteractorStyle.html#a65fcd9765c162a6021434386037ca641</a><br>

&gt;&gt; &gt; Thanks,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; David<br>
&gt;<br>
&gt; Yes, that was certainly a bug, but not as confusing as the following<br>
&gt; problem.<br>
&gt; With these two functions:<br>
&gt;<br>
&gt;     virtual void OnKeyPress()<br>
&gt;     {<br>
&gt;       vtkRenderWindowInteractor *rwi = this-&gt;Interactor;<br>
&gt;<br>
&gt;       std::string key = rwi-&gt;GetKeySym();<br>
&gt;       if(key.compare(&quot;Up&quot;) == 0)<br>
&gt;         {<br>
&gt;         cout &lt;&lt; &quot;Pressed up.&quot; &lt;&lt; endl;<br>
&gt;         }<br>
&gt;<br>
&gt;       // forward events<br>
&gt;       vtkInteractorStyleTrackballCamera::OnKeyPress();<br>
&gt;     }<br>
&gt;<br>
&gt;     virtual void OnChar()<br>
&gt;     {<br>
&gt;       vtkRenderWindowInteractor *rwi = this-&gt;Interactor;<br>
&gt;<br>
&gt;       char ch = rwi-&gt;GetKeyCode() ;<br>
&gt;       switch (ch)<br>
&gt;       {<br>
&gt;         case &#39;s&#39;:<br>
&gt;           cout &lt;&lt; &quot;Pressed s.&quot; &lt;&lt; endl;<br>
&gt;           break;<br>
&gt;         case &#39;a&#39;:<br>
&gt;           cout &lt;&lt; &quot;Pressed a.&quot; &lt;&lt; endl;<br>
&gt;           break ;<br>
&gt;         default:<br>
&gt;           cout &lt;&lt; &quot;Pressed an unhandled key: &quot; &lt;&lt; ch &lt;&lt; endl;<br>
&gt;           break;<br>
&gt;       }<br>
&gt;  // forward events<br>
&gt;       vtkInteractorStyleTrackballCamera::OnChar();<br>
&gt;     }<br>
&gt; The output of pressing:<br>
&gt; a, b, up, a<br>
&gt; Is:<br>
&gt; Pressed a.<br>
&gt; Pressed an unhandled key: b<br>
&gt; Pressed up.<br>
&gt; Pressed an unhandled key: Pressed a.<br>
&gt; You can see that there is an &quot;unhandled key&quot; in the mix when there was<br>
&gt; actually no unhandled key. There were only 4 keypresses, and 5 outputs.<br>
&gt; Thanks,<br>
&gt;<br>
&gt; David<br>
<br>
</div></div>Print out the keycode of the mystery key as a hexidecimal value.  My<br>
guess is that you&#39;re seeing an output from the arrow key in both the<br>
OnKeyPress and in OnChar.  The KeyCode values aren&#39;t guaranteed to be<br>
ascii.<br>
<font color="#888888"><br>
   David<br>
</font></blockquote></div><div><br></div>Yea, I just though of that in the car :)<div><br></div><div>Using a single function does just fine:</div><div><br><div><div>    virtual void OnKeyPress() </div><div>    {</div><div>
      //get the keypress</div><div>      vtkRenderWindowInteractor *rwi = this-&gt;Interactor;</div><div>      std::string key = rwi-&gt;GetKeySym();</div><div>      </div><div>      //output the key that was pressed</div>
<div>      cout &lt;&lt; &quot;Pressed &quot; &lt;&lt; key &lt;&lt; endl;</div><div>      </div><div>      //handle an arrow key</div><div>      if(key.compare(&quot;Up&quot;) == 0)</div><div>        {</div><div>        cout &lt;&lt; &quot;The up arrow was pressed.&quot; &lt;&lt; endl;</div>
<div>        }</div><div>      </div><div>      //handle a &quot;normal&quot; key</div><div>      if(key.compare(&quot;a&quot;) == 0)</div><div>        {</div><div>        cout &lt;&lt; &quot;The a key was pressed.&quot; &lt;&lt; endl;</div>
<div>        }</div><div>      </div><div>      // forward events</div><div>      vtkInteractorStyleTrackballCamera::OnKeyPress();</div><div>    }</div><div><br></div><div>So two questions remain - 1) What is the difference between OnKeyPress and OnKeyDown? 2) Why/when to use OnChar when OnKeyPress seems to be more general?</div>
<div><br></div>Thanks for the help,<br><br>David</div></div>