Solved Get CustomGUI Data in python

Hello plugincafe!
I have recently created a customgui using the example customgui plugin. The only major thing that I changed, appart from drawing, is that I save a single float value.
I now need to implement this custom gui into a python plugin but I can't seem to find out how to retrieve my saved data from the gui element.

Do I need to completely switch to a c++ plugin to do this, or is there a way in python.

Kind Regards,
Florian

Hi if your data type is already a know python type you shouldn't have any issue and could use the BaseCustomGui.GetData / BaseCustomGui.SetData.

So if we take the C++ example of the String Custom GUI.
You can use it in Python like bellow:

import c4d

ID_CUSTOM_GUI = 1001
ID_BUTTON_DO = 1002

class myCustomGuiDlg(c4d.gui.GeDialog):
    
    def CreateLayout(self):
        
        self._customGui = self.AddCustomGui(ID_CUSTOM_GUI, 1034655, 'my value', c4d.BFH_SCALEFIT, 50, 10)
        self.AddButton(ID_BUTTON_DO,c4d.BFH_SCALEFIT,name = 'Get Data')
        return True
    
    def InitValues(self):
        self._customGui.SetData("Some custom text")
        return True
    
    
    def Command(self, id, msg):
        if id == ID_BUTTON_DO:
            print self._customGui.GetData()
            
        return True
    

if __name__=='__main__':
    dlg = myCustomGuiDlg()
    dlg.Open(c4d.DLG_TYPE_ASYNC)

Cheers,
Maxime.

Hello Maxime,
thanks for you answer!
I actually have my custom gui not in a GeDialog but inside a res file of an ObjectData. How would I be able to access the customgui from there?

Best Regards,
Florian

In an ObjectData plugin, you don't access GUIs. You access parameters. So what is the parameter type that is using your custom GUI? Can you show your *.res file?

Hello Sebastian,
basically I have something like this

[...]
MY_CUSTOMGUI CUSTOMGUIPARAM { }
[...]

that is what I use.

Sorry, but this is not how it works. A NodeData's res file looks like this:

STRING ID_RESULT_TEXT  { CUSTOMGUI MULTISTRING; ANIM OFF; }

The first symbol is the data type (STRING), the second the parameter ID, The custom GUI can be found after the CUSTOMGUI keyword.

So in your case, MY_CUSTOMGUI is NOT a custom GUI. It is a custom data type. Is that correct?

oh... yeah that is true.

I edited the customdata_customgui example to fit my needs. (mainly only the drawing).
So I guess I would have to change my customdata to a REAL customgui?

Please make sure you understand the difference between a data type and a GUI. A data type stores data of some type. A GUI displays that data and allows interaction with that data in the UI. But it does not persistently store the data.

So if you want to have a parameter in your object that stores a float value, just use a REAL parameter. You can display that parameter in the UI using a custom GUI element. See for example customgui_string.cpp.

best wishes,
Sebastian

Hello Sebastian,
I now understand what the difference is, thank you very much!
With the customdata_customgui example file I actually made both a GUI and a custom DataType. So I only needed to change my resource file and modifiy my data code a bit!

Best Regards,
Florian