Problem reading user data when a button is pressed



  • On 15/07/2014 at 10:35, xxxxxxxx wrote:

    Hi,
     
    Having problems with a script I'm writing. I've stripped it right down to the relevant bits. Basically what I'm doing is to do with swapping lots of different materials on objects and rendering various passes automatically. I'm storing the settings for the various passes in some nulls which can get saved with the scene (this is better for my particular job than using the render settings presets).
     
    Anyway, the trouble with this script is that when you hit the button, it only reads the data from the null that was selected when the script was executed (check the console), and I want it to get the data from the currently selected null object whenever the button is pressed.
     
    Also, if it is executed without anything selected, it fails. 
     
    It seems to read the data from the scene only when the script is run, and not when the button is pressed.
     
    Any ideas?

    Thanks to anyone who can help. I'm pretty new to python...

     
        
        
        import c4d
        import os
        from c4d import gui
        
        BUTTON1=1002
        GROUP_ID1=1000
        
        ###################### READ USER DATA ####################################
                    
        def read_user_data() :
            
            doc = c4d.documents.GetActiveDocument()
            selectedPass  = doc.GetActiveObject()
            selUserData = selectedPass.GetUserDataContainer()
            
            flags = {
                'mul' : 0,
                'RGB' : 0,
                'spe' : 0,
                'dif' : 0,
                'ref' : 0
            }
        
            print "*"*10
            print selUserData
            for descId, container in selUserData:
                index = descId[1].id
                print index
                print "*"*5
                for key, val in container:
                    for txt, i in c4d.__dict__.iteritems() :
                        if key == i and txt == "DESC_SHORT_NAME":
                            if val == "Multi": 
                                flags['mul'] = op[c4d.ID_USERDATA, index]
                                print txt,"=",val, ", flag = ", flags['mul']
                            elif val == "RGBA":
                                flags['RGB'] = op[c4d.ID_USERDATA, index]
                                print txt,"=",val, ", flag = ", flags['RGB']
                            elif val == "specular":
                                flags['spe'] = op[c4d.ID_USERDATA, index]
                                print txt,"=",val, ", flag = ", flags['spe']
                            elif val == "Diffuse":
                                flags['dif'] = op[c4d.ID_USERDATA, index]
                                print txt,"=",val, ", flag = ", flags['dif']
                            elif val == "Reflection":
                                flags['ref'] = op[c4d.ID_USERDATA, index]
                                print txt,"=",val, ", flag = ", flags['ref']
                        else:
                            pass      
            c4d.EventAdd()
            return flags
        
        ############################## SETUP DIALOG  #############################
                    
        class MaterialSwapDlg(gui.GeDialog) :
        
            def CreateLayout(self) :
                #create the layout
                self.GroupBegin(GROUP_ID1, c4d.BFH_LEFT, 1, 1)
                self.AddButton(BUTTON1, c4d.BFH_LEFT, name="test")
                self.GroupEnd()
                return True
            
            def InitValues(self) :
                return True
            
            def Command(self, id, msg) :
                #handle user input
                if id==BUTTON1:
                    print "*"*10
                    user_flags = read_user_data()
                    print "user flags = ", user_flags
                return True      
            
        
        ##################################### MAIN ###############################
        
        if __name__=='__main__':
             
            dlg = MaterialSwapDlg()
            dlg.Open(c4d.DLG_TYPE_ASYNC, defaultw=50, defaulth=50)
        
        
          
        
        
        
        
    

Log in to reply