Set AddEditNumberArrows from .XML

  • On 18/07/2017 at 06:20, xxxxxxxx wrote:

    Cinema 4D Version:   18
    Platform:    PC  ;  
    Language(s) :     Phyton ;

    Hi Guys, 
    Its been a while I have post anything.

    Okay I made a example plugin that save and load UI data with .xml file that you can download.
    but UI element which is AddEditNumberArrows. I can get the data from it.
    And load it back by using a SetSting() that is show below and it works.

                # Load  Start and End of the AddEditNumberArrows
                LoadStartData = data.get('Start')
                self.SetString(GetStart_ID, LoadStartData)
                LoadEndData = data.get('End')
                self.SetString(GetEnd_ID, LoadEndData)

    Now you will see number you save to the xml in the UI element when you load it. But it don't really set to the UI its False. Cause when I move the Arrows set to 1 or 0. Look at this example gif below.

    Now I understand that I use SetString() but basically it not a string UI element.
    Then I use a SetLong() and SetReal() and I get this error.

    I'm still lost so I y'all you can help me. 
    Plus even tho I been doing plugins for 2 years I am still a noob to plugin dev in C4D, I am still learning.

    To download the free example plugin .pyp I made, so you can look at the full code:

    Any help or tips will be appreciated,
    AP Ashton

  • On 18/07/2017 at 06:26, xxxxxxxx wrote:

    YOu use SetString instead of SetFloat/SetInt32 etc...

  • On 18/07/2017 at 06:48, xxxxxxxx wrote:

    I try that gr4ph0s, but still didn't work.
    I try SetFloat:

                LoadStartData = data.get('Start')
                self.SetFloat(GetStart_ID, LoadStartData)
                LoadEndData = data.get('End')
                self.SetFloat(GetEnd_ID, LoadEndData)


    I try SetInt32:

                LoadStartData = data.get('Start')
                self.SetInt32(GetStart_ID, LoadStartData)
                LoadEndData = data.get('End')
                self.SetInt32(GetEnd_ID, LoadEndData)



  • On 18/07/2017 at 08:44, xxxxxxxx wrote:

    import c4d
    class mainDialog(c4d.gui.GeDialog) :
        def CreateLayout(self) :
            self.AddEditNumberArrows(1001, c4d.BFH_CENTER)
            self.AddButton(1002, c4d.BFH_CENTER, name="set_value")
            return True
        def Command(self, id, msg) :
            if id == 1002:
                self.SetInt32(1001, 10)
            return True
    def main() :
        main_dlg = mainDialog()
        main_dlg.Open(dlgtype=c4d.DLG_TYPE_MODAL, defaultw=300, defaulth=150, xpos=-1, ypos=-1)
    if __name__=='__main__':

    Then it's your input since you read it as string make an explicit conversion to string with int(LoadEndData)

  • On 18/07/2017 at 13:07, xxxxxxxx wrote:

    Thanks gr4ph0s 👏
    lol my brain is slow lol I dont know why I did not think about that  
    The code look like this now:

                # Load  Start and End of the AddEditNumberArrows
                LoadStartData = data.get('Start')
                self.SetInt32(GetStart_ID, int(LoadStartData))
                LoadEndData = data.get('End')
                self.SetInt32(GetEnd_ID, int(LoadEndData))

    Thanks 🙂

Log in to reply