How to create In/Exclude Userdata [SOLVED]



  • On 23/06/2015 at 10:33, xxxxxxxx wrote:

    I might be asking this too soon because I am so new to "adding user data".

    How can I create In/Exclude to User Data?

    My issue is that other posts demonstrate using a datatype, but I see no such datatype relating to In/Exclude.. Usually in Python I try to find an unofficial ID of some sort that I can use in my Python code but I have no idea of how to extrapolate one.

    EDIT: I have found an ID [c4d.DESC_CUSTOMGUI] = 1009290.. but now it's confused between being an in/exclude and real.. I cannot add items and I don't know if it would function..

    Related post (just demonstrates adding to User Data in general)
    https://plugincafe.maxon.net/topic/8797/11606_populate-userdata-via-python--please-help



  • On 24/06/2015 at 09:14, xxxxxxxx wrote:

    Well I have figured it out. Let me say I want to teach you how I figured it out..
    First I created User Data via the GUI, which allows me to create In/Exclude.. Then I created a Python Tag so that I could review this information from Python's eyes:

    import c4d
      
    def main() :
        myop = op.GetObject()
        desc = myop.GetDescription(c4d.DESCFLAGS_DESC_0) # method of C4DAtom
        for bc, paramid, groupid in desc:
            name = bc[c4d.DESC_NAME]    # bc = basecontainer
            if name:
                print "-------"
                print name
                print "-------"
                for index, value in bc:
                    print "Index: %i, Value: %s" % (index,str(value))
    

    My in/exclude looked like this

    -------
    Transparent Shaders
    -------
    Index: 21, Value: 1009290
    Index: 17, Value: <c4d.BaseContainer object at 0x1302458b8>
    Index: 1, Value: Transparent Shaders
    Index: 2, Value: Transparency
    Index: 10, Value: 1
    Index: 13, Value: (3, 1, 0)
    Index: 24, Value: 1
    Index: 26, Value: 1
    

    I compared the index/value pairs of the In/Exclude with the other data to extrapolate foreign value(s).. I fumbled a lot with the BaseContainer but the moneyshot was actually at Index 21.. I knew that I can print constants to see their integer form, and I somehow knew to try it with c4d.DESC_CUSTOMGUI. Then, long story short, I found the correct values to get a working In/Exclude. It could be buggy, for all I know, but it's been working flawlessly for me so far. \

    ud_transparency = c4d.GetCustomDataTypeDefault(1009290) 
    ud_transparency[c4d.DESC_NAME] = "transparency"
    ud_transparency[c4d.DESC_SHORT_NAME] = "transparency"
    ud_transparency[c4d.DESC_CUSTOMGUI] = 1009290
    ud_transparency_datatype = nullo.AddUserData(ud_transparency)
      
    ud_transparency_id = cur_ud_id
    cur_ud_id += 1
    

    In the above code, "nullo" was a null object that I wanted to add the userdata to. And so that's how you do it! I hope you enjoyed it.

    P.S. all of these c4d.DESC_* constants can be found in PythonSDK, search c4d.description


Log in to reply