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

    Extending Python - Global Constants

    SDK Help
    0
    11
    1.1k
    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 01/08/2016 at 02:16, xxxxxxxx wrote:

      Hi,

      Yes InitConstant() is the function to use. InitStringConstant() can be used to add string constants too.
      The "_PyObject *op" parameter for InitConstant() is the module to add the constant to.
      Here's some code:

      if (pylib.InitModule("c4d.extendpyapi", moduleFunctions, "Extend Python API Module Example"))
      {
      	...
        
      	// Retrieves c4d.extendpyapi module
      	_PyObject* extendpyapi = pylib.GetModule("c4d.extendpyapi");
      	if (extendpyapi == nullptr)
      		return;
        
      	// Initializes CUSTOMCONST and CUSTOMSTRINGCONST constants
      	pylib.InitConstant(extendpyapi, "CUSTOMCONST", 4875);
      	pylib.InitStringConstant(extendpyapi, "CUSTOMSTRINGCONST", "String Constant");
      }
      
      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        On 01/08/2016 at 06:42, xxxxxxxx wrote:

        Howdy,

        AHA! That makes sense. Thank you. 😉

        Adios,
        Cactus Dan

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

          On 01/08/2016 at 07:08, xxxxxxxx wrote:

          Howdy,

          Hmmmm, the InitConstant() is returning false.

          Here's my code:

          // Initializes c4d.cdpy module
          if(pylib.InitModule("c4d.cdpy", moduleFunctions, "Extend Python API"))
          {
          	GePrint("\'c4d.cdpy\' module successfully initialized");
          	
          	// Retrieves c4d.cdpy module
          	_PyObject* cdpy = pylib.GetModule("c4d.cdpy");
          	if(cdpy)
          	{
          		GePrint("Python module cdpy successfully retrieved");
          		
          		// Initializes CUSTOMCONST constant
          		if(!pylib.InitConstant(cdpy, "CUSTOMCONST", 4875)) GePrint("Failed to init constant");
          	}
          }
          

          Whats wrong?

          Adios,
          Cactus Dan

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

            On 02/08/2016 at 14:56, xxxxxxxx wrote:

            Howdy,

            OK, so I got rid of all of my edits to the code you posted and went back to your copied and pasted code. Then added a couple of print statements:

            // Initializes c4d.extendpyapi module
            if (pylib.InitModule("c4d.extendpyapi", moduleFunctions, "Extend Python API"))
            {	
            	GePrint("\'c4d.extendpyapi\' module successfully initialized");
            	
            	// Retrieves c4d.extendpyapi module
            	_PyObject* extendpyapi = pylib.GetModule("c4d.extendpyapi");
            	if (extendpyapi == nullptr) return;
            	
            	GePrint("Successfully retrieved extendpyapi module");
            	
            	// Initializes CUSTOMCONST and CUSTOMSTRINGCONST constants
            	if(!pylib.InitConstant(extendpyapi, "CUSTOMCONST", 4875))
            		GePrint("Failed to init constant");
            	if(!pylib.InitStringConstant(extendpyapi, "CUSTOMSTRINGCONST", "String Constant"))
            		GePrint("Failed to init string constant");
            }
            

            ... and the console prints "Failed to init constant" but does not print "Failed to init string constant". Is it a bug in the api? I tried this in both R13 and R17 with the same result.

            Adios,
            Cactus Dan

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

              On 02/08/2016 at 15:48, xxxxxxxx wrote:

              Howdy,

              AHA! I've discovered that it is actually NOT failing to initialize the constant, but simply returning false.

              When I use the constant in a script:

              extendpyapi.PassParameters("a string of characters", extendpyapi.CUSTOMCONST, 10.25)
              

              ... it actually works and prints the value 4875 to the console.

              Was I just being pannicky? 😊

              Adios,
              Cactus Dan

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

                On 03/08/2016 at 02:19, xxxxxxxx wrote:

                Hi,

                Yes there's an issue in the implementation of PythonLibrary::InitConstant().
                The function returns false even if the constant was successfully initialized.

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

                  On 03/08/2016 at 09:56, xxxxxxxx wrote:

                  Hi,

                  I've been following these threads with interest and I've got most of it working in R13.
                  So far I can successfully:
                  -Initialize the c4d.extendpyapi module.
                  -Call the extendpyapi_HelloPython() function that was posted on the other thread
                  -Add new Python constants

                  But I'm having trouble with the extendpyapi_PassParameters() function that was in the other thread.
                  I have added that function to the main.cpp file. And I'm guessing that I need to somehow point to it from inside of the InitExtendPython() method? But I have not been able to figure it out.
                  And then how do I call it from the script manager?

                  Thanks,
                  -ScottA

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

                    On 03/08/2016 at 10:12, xxxxxxxx wrote:

                    Howdy,

                    First increase the size of the array:

                    g_extendpyapi_functions->Resize(4);
                    

                    ...then add those other 2 functions to the module:

                    moduleFunctions[0].Init("HelloPython", (PyFn)extendpyapi_HelloPython, PYFN_FLAGS_NOARGS, "HelloPython() - Extend Python API");
                    moduleFunctions[1].Init("PassBaseList", (PyFn)extendpyapi_PassBaseList, PYFN_FLAGS_KEYWORDS, "PassBaseList() - Extend Python API");
                    moduleFunctions[2].Init("PassParameters", (PyFn)extendpyapi_PassParameters, PYFN_FLAGS_KEYWORDS, "PassParameters() - Extend Python API");
                    moduleFunctions[3].Init(String(), NULL, PYFN_FLAGS_0, String()); // Last dummy element!
                    

                    Can you say, "DOH!" 😂

                    I also had trouble figuring out how to call it from the script manager because I didn't realize that everything needed the "extendpyapi." prefix. DOH!

                    Adios,
                    Cactus Dan

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

                      On 03/08/2016 at 11:09, xxxxxxxx wrote:

                      **DOH!
                      ** Thanks Dan.

                      Everything is working **** now.

                      -ScottA

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

                        On 03/08/2016 at 11:19, xxxxxxxx wrote:

                        Howdy,

                        You're welcome. 😉

                        Adios,
                        Cactus Dan

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