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

    Expression Editor buttons

    SDK Help
    0
    7
    552
    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/02/2013 at 15:23, xxxxxxxx wrote:

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

      ---------
      Hi,

      I need to execute a python tag's "Execute" button with code.
      The buttons that are found in the Expression Editor pallet that opens for the tag.

      But all I could find is an r_expresssion.res file. With the button descriptions in it.
      I can't even find an .h file with the ID#'s for these button.

      How do we execute these buttons?

      -ScottA

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

        On 05/02/2013 at 16:16, xxxxxxxx wrote:

        ...\resource\modules\xtensions\res\c4d_symbols.h	  19,00 KB	23.08.2012 18:45:50
        11	  IDS_CYCLE_EXPRESSION,
        18	  IDS_FONT_BUTTON,
        96		IDS_AM_COMMAND,
        319		IDS_AM_COMMAND_LOCK,
        466		//expression editor
        468		IDD_EXPRESSION,
        469		IDC_EXPRESSION_TEXT,
        470		IDC_EXPRESSION_MESSAGE,
        471		IDC_EXPRESSION_LINE,
        472		IDC_EXPRESSION_POS,
        473		IDC_EXPRESSION_FUNKTION,
        474		IDC_EXPRESSION_LOAD,
        475		IDC_EXPRESSION_SAVE,
        476		IDC_EXPRESSION_COMPILE,
        477		IDC_EXPRESSION_X1,
        478		IDC_EXPRESSION_X2,
        479		IDC_EXPRESSION_X3,
        480		IDS_EXPRESSION_CLICKCOMPILE,
        481		IDS_EXPRESSION_NOERROR,
        

        not sure which are the right, one you'll have to find out for yourself 🙂 you might also look at
        agent ransack, quite awesome program for text serach.

        ps, its me littledevil, messed up my pw and the recoverry function is broken 🙂

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

          On 05/02/2013 at 19:20, xxxxxxxx wrote:

          I've actually been using Agent Ransak for a long time. Robert tipped me off to it a long time ago and I'd be lost without it.
          But I'm afraid it's not helping me find what I need.

          I can launch the python tag's Expression Editor.
          But then I think I need to grab that window. Because it's hosting those buttons ( I think ).

          #include "..\..\..\..\resource\modules\python\res\description	python.h"  
            
            
            BaseObject *obj = doc->GetActiveObject();  
            if(!obj) return FALSE;  
            BaseTag *ft = obj->GetFirstTag();               //The first tag should be the python tag  
            
            DescriptionCommand dc;  
            dc.id = DescID(DescLevel(TPYTHON_OPENEDITOR));  //Opens the tag's Expression Editor window  
            ft->Message(MSG_DESCRIPTION_COMMAND, &dc);      //Sends a message to execute the button
          

          I don't know how grab that Expression Editor window and then execute those buttons on it.

          -ScottA

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

            On 05/02/2013 at 21:06, xxxxxxxx wrote:

            Do a search for ID_PYTHONSCRIPT in the SDK Docs (Windows CHM).  This might be relevant to how you can execute a Python script from a C++ plugin.

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

              On 06/02/2013 at 09:29, xxxxxxxx wrote:

              MSG_SCRIPT_EXECUTE looks like it might do what I need.
              But I can't figure out how to use it based on the rather wild example they provided.

              -ScottA

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

                On 06/02/2013 at 11:12, xxxxxxxx wrote:

                Originally posted by xxxxxxxx

                MSG_SCRIPT_EXECUTE looks like it might do what I need.
                But I can't figure out how to use it based on the rather wild example they provided.

                MSG_SCRIPT only works with plain scripts, not with expressions.
                You could retrieve a Python expression's code with TPYTHON_CODE and create an ID_PYTHONSCRIPT node.
                But an expression code isn't like a script code:
                A script explicitly calls the main() function. An expression doesn't do that; CINEMA invokes it.

                To execute an expression's code you just have to make the tag's data dirty, then call a global update:

                expression->SetDirty(DIRTYFLAGS_DATA);
                EventAdd();
                
                1 Reply Last reply Reply Quote 0
                • H
                  Helper
                  last edited by

                  On 06/02/2013 at 12:58, xxxxxxxx wrote:

                  Ok. Thanks Yannick.
                  Pretty much what I thought.

                  What I'm doing is writing code into the python tag from a script in the script manager( or through a command plugin).
                  And I needed a way to make the "Execute" or "Compile"  buttons occur in my script.
                  When you add text into a python tag remotely like this. The text is not recognized until one of these buttons is pressed.

                  I'll give SetDirty() & EventAdd() a shot.
                  But what If I wanted to execute the "Compile", "Load", or "Save" buttons?
                  Is there a way to execute these buttons through code?

                  -ScottA

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