Tool plugin - AM dialog update



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 31/08/2006 at 21:34, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   9.102 
    Platform:   Windows  ;   Mac OSX  ; 
    Language(s) :

    ---------
    In ToolData::MouseInput(), I have this qualifier key check:

    // Left Mouse Button + CTRL to Set Operation
         else if (qualifier == QCTRL)
         {
              operation++;
              if (operation > IPTOP_ROTATE)     operation = IPTOP_SELECT;
              data.SetLong(MDATA_IPPTOOL_OPERATION,          operation);
              return DrawViews(DA_ONLY_ACTIVE_VIEW|DA_NO_THREAD|DA_NO_ANIMATION);
         }

    I can set the operation without crashing or other problems, but the Attribute Manager subdialog does not update. Now, if I update with the Tool's AM showing - yay. If it is not showing, crash-boom-bye. So, should I send a message to the subdialog or what? I tried a check such as:

    if (AMDialog && AMDialog->IsOpen()) ...

    Still crashes. Hello???

    Thanks,



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 01/09/2006 at 00:08, xxxxxxxx wrote:

    I would try one of the "global" message functions. GeSyncMessage look like a good candiate. SpecialEventAdd and EventAdd messages are processed after MouseInput returns. Try sending EVMSG_ASYNCEDITORMOVE, or EVMSG_DOCUMENTRECALCULATED, and handle them in the dialog.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 01/09/2006 at 06:40, xxxxxxxx wrote:

    I tried calling GeSyncMessage(EVMSG_ASYNCEDITORMOVE), but did not handle it in the dialog. Lemme give that a try and see if the results are better.

    Thanks,



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 01/09/2006 at 12:04, xxxxxxxx wrote:

    Okay, instead of EVMSG_ASYNCEDITORMOVE (which may cause confusion with drag operations) I am using EVMSG_TOOLCHANGED (seems appropriate). So, from MouseInput(), I do this:

         // Left Mouse Button + CTRL to Set Operation  
         else if (qualifier == QCTRL)  
         {  
              operation++;  
              if (operation > IPTOP_ROTATE)     operation = IPTOP_SELECT;  
              data.SetLong(MDATA_IPPTOOL_OPERATION,          operation);  
              GeSyncMessage(EVMSG_TOOLCHANGED);  
              return DrawViews(DA_ONLY_ACTIVE_VIEW|DA_NO_THREAD|DA_NO_ANIMATION);  
         }
    

    and in the tool subdialog, I do this:

              //*---------------------------------------------------------------------------*  
              Bool CoreMessage(LONG id, const BaseContainer& msg)  
              //*---------------------------------------------------------------------------*  
              {  
                   if (id == EVMSG_TOOLCHANGED)  
                   {  
                        LONG     operation =     tooldata->GetLong(MDATA_IPPTOOL_OPERATION);  
                        bSelect->SetToggleState((operation == IPTOP_SELECT));  
                        bTranslate->SetToggleState((operation == IPTOP_TRANSLATE));  
                        bScale->SetToggleState((operation == IPTOP_SCALE));  
                        bRotate->SetToggleState((operation == IPTOP_ROTATE));  
                   }  
                   return TRUE;  
              }
    

    That does the trick. :)


Log in to reply