Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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

    Tool doesn't execute until view is selected

    SDK Help
    0
    7
    774
    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

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

      On 08/07/2011 at 11:36, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   12 
      Platform:   Windows  ;   
      Language(s) :   C.O.F.F.E.E  ;

      ---------
      Hey guys.

      I'm having a problem with the SetPoint tool in a Coffee script(not a plugin).
      I have to click in the main scene view for it to execute.
      Here's the code:

      var obj = doc->GetActiveObject();  
      CallCommand(200000065); // Activate the Set Point Value tool  
      tool()#MDATA_SETVALUE_SETX=1;  
      tool()#TEMP_MDATA_SETVALUE_VAL_X = 300;  
      CallButton(tool(),ID_MODELING_SETVALUE_TOOL);  
      obj->Message(MSG_UPDATE);  
      DrawViews(DRAWFLAGS_ONLY_ACTIVE_VIEW|DRAWFLAGS_NO_THREAD|DRAWFLAGS_NO_REDUCTION|DRAWFLAGS_STATICBREAK);  
      EventAdd();
      

      I've added the usual things to force C4D to update(Message, DrawViews, EventAdd) but they aren't working.
      Is there some other way I can tell C4D to update and execute the tool when my script is executed?

      -ScottA

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

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

        On 08/07/2011 at 12:30, xxxxxxxx wrote:

        Never mind.
        I found a different way to execute it that works better:

        var obj = doc->GetActiveObject();  
        CallCommand(200000065); // Activate the Set Point Value tool  
        tool()#MDATA_SETVALUE_SETX=1;  
        tool()#TEMP_MDATA_SETVALUE_VAL_X = 300;  
        CallButton(tool(), MDATA_APPLY);  
        obj->Message(MSG_UPDATE);  
          
        EventAdd();
        

        -ScottA

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

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

          On 09/07/2011 at 05:12, xxxxxxxx wrote:

          For modeling actions it's best to call the SendModelingCommand().

          here an example:

            
          var obj = doc->GetActiveObject();  
            
          var bc = new(BaseContainer);  
          bc->SetData(TEMP_MDATA_SETVALUE_VAL_X, 300.0);  
          bc->SetData(MDATA_SETVALUE_SETX, MDATA_SETVALUE_SET_SET);  
            
          SendModelingCommand(ID_MODELING_SETVALUE_TOOL, doc, obj, bc, MODIFY_POINTSELECTION);  
          

          PS. I just noticed it's missing in the COFFEE R12 docs. Please refer to the COFFEE R9.5 docs in this case. I will update the COFFEE docs as soon as possible.

          cheers,
          Matthias

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

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

            On 09/07/2011 at 08:08, xxxxxxxx wrote:

            Thanks Matthias.

            Yes. I thought it was very strange that they were removed from the R12 Coffee docs. I asked around but never got a good answer why.
            I guess it never made it to your desk. I'll contact you directly here in the future about such issues.

            I did try using the SMC first like in your example. But it always sends the selected point to 0.
            For some reason it's not observing the line: bc->SetData(TEMP_MDATA_SETVALUE_VAL_X, 300.0);
            That's why I went with a different method.
            I'd rather use the SMC. But I can't make it work properly.

            -ScottA

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

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

              On 09/07/2011 at 15:10, xxxxxxxx wrote:

              Indeed it's not setting the the correct value. I have to check why not.

              cheers,
              Matthias

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

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

                On 27/09/2012 at 06:48, xxxxxxxx wrote:

                Hi i am hat the new her and just stumbled upon this because i got the same problem the TEMP_MDATA_SETVALUE_VAL_X doesn't work. So is there any News on why that is, and how it could be made to work???

                Cheers
                Wuensch

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

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

                  On 27/09/2012 at 07:54, xxxxxxxx wrote:

                  Originally posted by xxxxxxxx

                  Hi i am hat the new her and just stumbled upon this because i got the same problem the TEMP_MDATA_SETVALUE_VAL_X doesn't work. So is there any News on why that is, and how it could be made to work???

                  I just found that assigning the ID MDATA_SETVALUE_VAL (vector) in the tool container instead of TEMP_MDATA_SETVALUE_VAL_X works as expected:

                  var obj = doc->GetActiveObject();
                    
                  var bc = new(BaseContainer);
                  bc->SetData(MDATA_SETVALUE_SETX, MDATA_SETVALUE_SET_SET);
                  bc->SetData(MDATA_SETVALUE_VAL, vector(300.0,0.0,0.0));
                    
                  SendModelingCommand(ID_MODELING_SETVALUE_TOOL, doc, obj, bc, MODIFY_POINTSELECTION);
                  

                  And to set the X, Y and Z values:

                  var obj = doc->GetActiveObject();
                    
                  var bc = new(BaseContainer);
                  bc->SetData(MDATA_SETVALUE_SETX, MDATA_SETVALUE_SET_SET);
                  bc->SetData(MDATA_SETVALUE_SETY, MDATA_SETVALUE_SET_SET);
                  bc->SetData(MDATA_SETVALUE_SETZ, MDATA_SETVALUE_SET_SET);
                  bc->SetData(MDATA_SETVALUE_VAL, vector(300.0,300.0,300.0));
                    
                  SendModelingCommand(ID_MODELING_SETVALUE_TOOL, doc, obj, bc, MODIFY_POINTSELECTION);
                  

                  EDIT: As their name imply, TEMP_MDATA_SETVALUE_VAL_X, TEMP_MDATA_SETVALUE_VAL_Y and TEMP_MDATA_SETVALUE_VAL_Z are just temporary and seems to be only used by the UI of the tool, not by its modelling command (that accesses MDATA_SETVALUE_VAL instead). If you try to assign MDATA_SETVALUE_VAL to the tool, it gives you an invalid description ID error.

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