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
    • Recent
    • Tags
    • Users
    • Login

    Problem reading user data when a button is pressed

    Scheduled Pinned Locked Moved PYTHON Development
    1 Posts 0 Posters 91 Views
    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 Offline
      Helper
      last edited by

      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)
          
          
            
          
          
          
          
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post