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

    How to save / load presets the C4D way

    SDK Help
    0
    6
    496
    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 28/06/2013 at 15:24, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R13-R14 
      Platform:      
      Language(s) :

      ---------
      Hi, if you add a C-Motion to your project, you will find two buttons under the Basic tab:
      Load preset.. and Save preset..
      I would like to implement these in my custom tag, if possible at all.
      Having searched high and low, googled and bing-ed and read the docs and searched this and other forums, it seems that reading from file and saving to file is not much discussed.

      I CAN use an ordinary filesave dialog or the like. But I am much more interested in a function similar to the one mentioned in the C-Motion.
      And code examples would be very much welcome!

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

        On 28/06/2013 at 17:07, xxxxxxxx wrote:

        You can load/save descriptions and other settings using the World Plugin Container.  Check SetWorldPluginData() and GetWorldPluginData() in the API docs.  For specific presets, just put the settings in a container with a name and maybe an element noting that it is a preset and save that container (BaseContainer) as above.

        Bool MyPlugin::Init(GeListNode* node)  
        {  
          BaseContainer*    bc =    static_cast<BaseTag*>(node)->GetDataInstance();  
          // Get stored settings  
          BaseContainer*    pbc =    GetWorldPluginData(ID_MYPLUGIN);  
          if (!pbc)                return TRUE;  
          bc->SetLong(MYPLUGIN_MODE,    pbc->GetLong(MYPLUGIN_MODE, MYPLUGIN_MODE_CIRCLE));  
          bc->SetVector(MYPLUGIN_COLOR,    pbc->GetVector(MYPLUGIN_COLOR, Vector(1.0,1.0,0.0)));  
          bc->SetLong(MYPLUGIN_RADIUS,    pbc->GetLong(MYPLUGIN_RADIUS, 20L));  
          bc->SetLong(MYPLUGIN_RECT_W,    pbc->GetLong(MYPLUGIN_RECT_W, 20L));  
          bc->SetLong(MYPLUGIN_RECT_H,    pbc->GetLong(MYPLUGIN_RECT_H, 20L));  
          
          return TRUE;  
        }  
        void MyPlugin::Free(GeListNode* node)  
        {  
          BaseContainer*    bc =    static_cast<BaseTag*>(node)->GetDataInstance();  
          // Store settings  
          BaseContainer    pbc;  
          pbc.SetLong(MYPLUGIN_MODE,        bc->GetLong(MYPLUGIN_MODE));  
          pbc.SetVector(MYPLUGIN_COLOR,   bc->GetVector(MYPLUGIN_COLOR));  
          pbc.SetLong(MYPLUGIN_RADIUS,    bc->GetLong(MYPLUGIN_RADIUS));  
          pbc.SetLong(MYPLUGIN_RECT_W,    bc->GetLong(MYPLUGIN_RECT_W));  
          pbc.SetLong(MYPLUGIN_RECT_H,    bc->GetLong(MYPLUGIN_RECT_H));  
          SetWorldPluginData(ID_MYPLUGIN, pbc);  
        }
        
        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          On 28/06/2013 at 23:46, xxxxxxxx wrote:

          Thanks a lot for this, absolutely essential for me when writing plugins.
          Although, it is not actually what I am asking for, though.

          What I want, is for the user to being able to load and store the current settings as a preset using the dialog that C-Motion uses:

          I do not know at all how to invoke and use such a dialog. If at all possible.
          And by the way, the data I want to store is complicated, it is not as easy as a couple of description values.

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

            On 29/06/2013 at 00:08, xxxxxxxx wrote:

            It is just a custom GeDialog. There is nothing like a preset dialog in c4d, you will have to build
            your own. In c4d_file you can find FileSelect() which will open the OS specific file selection
            dialog.

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

              On 29/06/2013 at 00:23, xxxxxxxx wrote:

              Aha! I understand. So I'll have to make a GeDialog then, and use it form inside my tag plugin?!?

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

                On 29/06/2013 at 00:29, xxxxxxxx wrote:

                You can have a button to save a named preset.  Again, you want to open a GeDialog with a text entry element (and Ok/Cancel).

                You can have a button to load a saved preset.  You can get the world plugin data, get the BaseContainers that each represent the presets. Open a GeDialog and use that list to fill a listview or a combo or whatever for the user to select a preset.

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