DoCommand() not working



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

    On 16/06/2012 at 13:38, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   12 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    I'm having problems with the DoCommand() method in my tool plugin.
    All I want to do is use the SendModelingCommand to delete the selected polygon in my tool.

    I select the polygon in my MouseInput() method.
    Then I call to the DoCommand() to execute it and delete the polygon. But it doesn't do anything.

    The MouseInput code :

        BaseContainer state;  
      while (GetInputState(BFM_INPUT_MOUSE, BFM_INPUT_MOUSELEFT, state)) //While the LMB is down   
      {  
        if (state.GetLong(BFM_INPUT_VALUE) == 0) break; //If the state value is 0. The LMB is no longer down..so don't enter the loop   
        
        LONG x = state.GetLong(BFM_INPUT_X); //Get the cursor's X screen coordinates  
        LONG y = state.GetLong(BFM_INPUT_Y); //Get the cursor's Y screen coordinates  
      
        GeShowMouse(MOUSE_POINT_HAND);       //Change the cursor's apperance when the mouse button is down  
        
        //Check if there is a valid poly id, otherwise deselect all polygons  
        if(polygonid>-1)   
        {  
            bs->Select(polygonid);           //Select the polygon that's currently highlighted  
      
            ModelingCommandData mdat;  
            BaseContainer bc;  
            mdat.bc = &bc;  
            DoCommand(mdat);                //Call to the DoCommand and execute it  
        }  
        else bs->DeselectAll();  
      }
    

    The DoCommand code :

    Bool PolygonTool::DoCommand(ModelingCommandData &mdat)  
    {  
      BaseObject *op = mdat.doc->GetActiveObject();  
      PolygonObject *objPoly=(PolygonObject* )op;  
      
      mdat.mode = MODELINGCOMMANDMODE_POLYGONSELECTION; //Use this for dealing with polygon selections  
      mdat.flags = MODELINGCOMMANDFLAGS_CREATEUNDO;  
      GePrint("Am I working?");                                                        //This prints fine  
      if (!SendModelingCommand(MCOMMAND_DELETE, mdat)) return FALSE;  
      GePrint("Am I still working?");                                                 //<-----------Does not print!!  
      
      EventAdd();//Update all the changes   
      
      return TRUE;  
    }
    

    Notice that after the SendModelingCommand() code. Something bad happens and the last print does not work. I don't know if that has anything to do with the problem or not.

    What am I doing wrong?

    -ScottA



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

    On 17/06/2012 at 08:51, xxxxxxxx wrote:

    You've not set the mdat.doc and mdat.op (at least not with what you have shown for the code).



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

    On 17/06/2012 at 11:48, xxxxxxxx wrote:

    Thanks Robert.
    That got it working.

    -ScottA


Log in to reply