<div dir="ltr">Hi Panos,<div><br></div><div>The GetKeySym() and GetKeyCode() methods are only valid within Key event callbacks.</div><div><br></div><div>If you need to know what key is held down, then you must also bind your callback to KeyPressEvent and KeyReleaseEvent.  Then whenever there is a KeyPress, you can store the key that was pressed in a variable, and in KeyReleaseEvent, you can clear it.</div><div><br></div><div>Modifier keys (Ctrl, Shift, etc) are stored in a bitfield where each bit represents a different key, but it's only the modifier keys that are handled this way.</div><div><br></div><div> - David</div><div><br></div><div><br></div><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 18, 2018 at 9:22 AM, ochampao <span dir="ltr"><<a href="mailto:ochampao@hotmail.com" target="_blank">ochampao@hotmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi vtkUsers,<br>
<br>
In my code I have a callback function invoked when the<br>
vtkCommand::<wbr>LeftButtonPressEvent event is emitted. Inside the callback, I<br>
would like to check if also a specific keyboard button is pressed. When I<br>
try to access the button being pressed via<br>
vtkRenderWindowInteractor::<wbr>GetKeySym(), I get the following error: <br>
<br>
"Debug Assertion Failed! Program: ....MSVCP140D.dll, File: ...\xstring: Line<br>
1181, Expression: invalid pointer".<br>
<br>
How can I correctly implement this behaviour?<br>
<br>
<br>
Here is a minimal callback method that causes the error:<br>
<br>
// ========================<br>
void MyLeftMousePressedCallback(<br>
        vtkObject* caller,<br>
        long unsigned int vtkNotUsed(eventId),<br>
        void* vtkNotUsed(clientData),<br>
        void* vtkNotUsed(callData))<br>
{<br>
        vtkRenderWindowInteractor *iren =<br>
                static_cast<<wbr>vtkRenderWindowInteractor*>(<wbr>caller);<br>
<br>
        std::string key = iren->GetKeySym();<br>
<br>
        if ((key == "C") || (key == "c"))<br>
                std::cout << "Do something if LeftMouseButton + C-key is pressed";<br>
}<br>
// ========================<br>
<br>
and this is how the callback is registered:<br>
<br>
// =========================<br>
vtkNew<vtkCallbackCommand> cbk;<br>
cbk->SetCallback(<wbr>MyLeftMousePressedCallback);<br>
renderWindowInteractor-><wbr>AddObserver(<br>
        vtkCommand::<wbr>LeftButtonPressEvent, cbk);<br>
// =========================<br>
<br>
I have also tried extending vtkInteractorStyleImage and re-implementing the<br>
virtual method OnLeftButtonDown(), but I get the same error when using<br>
this->Interactor->GetKeySym(). In both cases, if GetKeySym() is replaced<br>
with GetKeyCode(), the returned value is always '\0'. Interestingly, using<br>
GetControlKey() works.<br>
<br>
Thanks for your help,<br>
Panos.<br></blockquote></div></div></div></div>