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


Log in to reply