Command function doesn't get called [SOLVED]



  • On 23/03/2015 at 09:27, xxxxxxxx wrote:

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

    ---------
    Hi,

    I'm working on an object-plugin. I have implemented the method Command, but it seems it doesn't get called. Here is my method:

    Bool MyPluginData::Command(Int32 id, const BaseContainer &msg)
    {
      if (id == HIPNULLPTR_POS_Y)
      {
          GePrint("The slider is pressed!");
      }

    return true;
    }

    Did I do something wrong here? Or did I simply forget something?
    I've looked for hours on the internet, in the SDK, but still found no answer.

    Thanks for your help and time!
    Greetings,
    Casimir Smets



  • On 23/03/2015 at 11:46, xxxxxxxx wrote:

    Mainly only buttons really trigger Command().  For other controls, you need to use Message().



  • On 23/03/2015 at 17:44, xxxxxxxx wrote:

    And actually Command() is not a method of the ObjectData class, but GeDialog. If you want to notice
    when a value was changed, override Message() and catch the MSG_DESCRIPTION_* message that
    matches your needs.

    Best
    Niklas



  • On 24/03/2015 at 06:31, xxxxxxxx wrote:

    Hi,

    Well, that did it, especially the MSG_DESCRIPTION. With my slider I needed the MSG_DESCRIPTION_CHECKUPDATE inside Message.

    You can mark this as closed!!
    Thanks for your help guys!! :)

    Greetings,
    Casimir Smets



  • On 24/03/2015 at 06:52, xxxxxxxx wrote:

    Well, it worked when I had a simple GePrint. Now with some additional methods it doesn't work anymore.
    Here is my code in Message:

    if (type == MSG_DESCRIPTION_CHECKUPDATE)
      {
          BaseObject* op = (BaseObject* )node;
          BaseDocument* doc = (BaseDocument* )data;
          EditHipNullptr(op, doc);
          GePrint("The slider is pressed! - CheckUpdate");
      }

    And the code from EditHipNullptr:

    BaseObject* CharacterCreatorData::EditHipNullptr(BaseObject* op, BaseDocument* doc)
    {
      BaseObject* hipNullPtr = doc->SearchObject("Hip_Nullptr");
      BaseContainer* bb = op->GetDataInstance();
      hipNullPtr->SetRelPos(Vector(0, bb->GetInt32(HIPNULLPTR_POS_Y), 0));
      hipNullPtr->Message(MSG_UPDATE);
     
      return hipNullPtr;
    }

    When I change the slider in Cinema 4D, the application doesn't respond anymore.
    Does somebody have an idea what could be the problem here?

    Greetings,
    Casimir Smets



  • On 24/03/2015 at 07:52, xxxxxxxx wrote:

    Hello,

    the data of MSG_DESCRIPTION_CHECKUPDATE is not a BaseDocument but of the type DescriptionCheckUpdate. In that structure you will find a pointer to the document.

    Also, you don't have any nullptr-checks in your code, so when SearchObject() fails it must crash.

    Best wishes,
    Sebastian



  • On 24/03/2015 at 08:10, xxxxxxxx wrote:

    Hi Sebastian,

    That did it! Thank you very much!
    I also changed my method for nullptr-checks.
    You can surely mark this as closed now!

    Greetings,
    Casimir Smets


Log in to reply