Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    detect key release

    SDK Help
    0
    3
    1.1k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      On 05/07/2018 at 21:59, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R19 
      Platform:   Windows  ;   Mac OSX  ; 
      Language(s) :     C++  ;   PYTHON  ;

      ---------
      Hello,

      In continuation to the shortcut-key topic and the sticky-key bug, I was looking for a way to detect a key release.
      Let's say I have a SceneHook, in its KeyboardInput I can detect a key being pressed.
      This method is being called when the user presses a key, or when the key is kept pressed down.
      Is there any way to detect the key being released?

      Note, we're in a SceneHook, performing a while loop to check for the release of the key is thus not an option. Moving all the logic into a ToolData is not an option either.

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        On 09/07/2018 at 02:26, xxxxxxxx wrote:

        Hi C4DS, thanks for writing us and sorry for coming back late.

        With regard to your question, being looking into ToolData out of discussion as you stated above, a plausible, but non-official, way to be informed about the key release could be represented by the next sub-optimal worrkaround.

        The idea is to store the key press state in a member variable of your SceneHookData plugin and at the SceneHookData::Execute() call time compare the stored value with the current one to detect a change in the state.

        Could it be worthy to give it a try? Maybe there could be some lag between the key release and the Execute() method execution but maybe it's something you could live with.

        Best, Riccardo

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          On 09/07/2018 at 03:08, xxxxxxxx wrote:

          Cannot get the Execute to work in the SceneHook.
          I mean, Execute isn't performed when I press a key, it only is called when I click the mouse button, which then leads to "Cinema 4D has triggered a breakpoint".

          I am capturing the pressed key in KeyboardInput and check in Execute as follows

          Bool WOTSceneHook::KeyboardInput(BaseSceneHook* node, BaseDocument* doc, BaseDraw* bd, EditorWindow* win, const BaseContainer& msg)  
          {
              Int32 key = msg.GetData(BFM_INPUT_CHANNEL).GetInt32();  
            mKeyPressed = key;  
            GePrint(String::IntToString(mKeyPressed));  
            
            return SUPER::KeyboardInput(node, doc, bd, win, msg);  
          }  
            
          EXECUTIONRESULT WOTSceneHook::Execute(BaseSceneHook *node, BaseDocument *doc, BaseThread *bt, Int32 priority, EXECUTIONFLAGS flags)  
          {  
            if (mKeyPressed)  
            {  
                BaseContainer bc;  
                if (GetInputState(BFM_INPUT_KEYBOARD, mKeyPressed, bc))  
                {  
                    GePrint("mKeyPressed");  
                }  
            }  
            return  EXECUTIONRESULT_OK;  
          }  
            
          
          

          From the moment I pressed a key (with cursor in the viewport), I always get a "Cinema 4D has triggered a breakpoint" whenever the mouse leaves the viewport.

          I must be missing something.

          1 Reply Last reply Reply Quote 0
          • First post
            Last post