Shorter code for hiding UserData

On 30/05/2014 at 08:08, xxxxxxxx wrote:

I have a lot of userdata controls that needs show/hide when pressing buttons.
This is a sample of the code I am using and was wondering if there is maybe a shorter way of coding for this????? 😠

#--Hide_Cone_Types--
           if descId[1].id == 14:
           
              if Bolt_Fac[c4d.ID_USERDATA,20] == 0:
                  container[c4d.DESC_HIDE] = True
                  Bolt_Fac.SetUserDataContainer(descId, container)
                  
           #--Hide_Cone_Height--
           if descId[1].id == 16:
           
              if Bolt_Fac[c4d.ID_USERDATA,20] == 0:
                  container[c4d.DESC_HIDE] = True
                  Bolt_Fac.SetUserDataContainer(descId, container)
                  
           #--Hide_Cone_Radius--
           if descId[1].id == 18:
           
              if Bolt_Fac[c4d.ID_USERDATA,20] == 0:
                  container[c4d.DESC_HIDE] = True
                  Bolt_Fac.SetUserDataContainer(descId, container)
                  
           #--Hide_Cone_Point_Height--
           if descId[1].id == 25:
           
              if Bolt_Fac[c4d.ID_USERDATA,20] == 0:
                  container[c4d.DESC_HIDE] = True
                  Bolt_Fac.SetUserDataContainer(descId, container)
                  
           #--Hide_Indented_Height--
           if descId[1].id == 21:
           
              if Bolt_Fac[c4d.ID_USERDATA,20] == 0:
                  container[c4d.DESC_HIDE] = True
                  Bolt_Fac.SetUserDataContainer(descId, container)
                  
           #---Hide_Dome_Height---
           if descId[1].id == 23:
           
              if Bolt_Fac[c4d.ID_USERDATA,20] == 0:
                  container[c4d.DESC_HIDE] = True
                  Bolt_Fac.SetUserDataContainer(descId, container)

On 30/05/2014 at 08:52, xxxxxxxx wrote:

Maybe like this.

hide_items = [
    14, # Hide_Cone_Types
    16, # Hide_Cone_Height
    # ...
]
  
if Bolt_Fac[c4d.ID_USERDATA, 20] == 0:
    for item in hide_items:
        if descId[1].id == item:
            container[c4d.DESC_HIDE] = True

Or maybe you better use

hide_items = [
    14, # Hide_Cone_Types
    16, # Hide_Cone_Height
    # ...
]
  
for item in hide_items:
    if descId[1].id == item:
        container[c4d.DESC_HIDE] = (Bolt_Fac[c4d.ID_USERDATA, 20] == 0)

so that the elements will be shown again when UD #20 is not zero.

On 30/05/2014 at 09:01, xxxxxxxx wrote:

Hi NiklasR. Like I said this is just a sample of the code. There is a code to unhide them thats why I want to put it in a shorter code. 
Sorry I'm still learning python and would like a sample code pls  😊 
That's how I'm learning python

On 30/05/2014 at 09:04, xxxxxxxx wrote:

Thanks NiklasR. Ignore my previous post you rock _<_img src="http://www.c4dcafe.com/ipb/public/style_emoticons/default/thisrocks.gif" border="0" alt=":thisrocks:" title=":thisrocks:" /_>_

On 30/05/2014 at 09:37, xxxxxxxx wrote:

You're welcome. Sorry I changed my original post for that much. 🙂

This one's better (in terms of speed)

hide_items = frozenset([
    14, # Hide_Cone_Types
    16, # Hide_Cone_Height
    # ...
])
  
if descId[1].id in hide_items:
    container[c4d.DESC_HIDE] = (Bolt_Fac[c4d.ID_USERDATA, 20] == 0)

-Niklas