Unique Object Identifier



  • Hi, I searched around for an answer on this but I haven't found anything solid on how to identify an object based on a unique ID of any kind in python. Isn't there something uniquely consistent with each object we can refer to? I need something I can write out to a file and read back later to reference a specific object.

    Thank you



  • Hi @Motion4D,

    thank you for reaching out to us. The answer to your question is C4DAtom.FindUniqueID. The topic has been discussed just yesterday here and also a couple of times in the past; you might find this thread informative. I also attached a small example, please feel free to come back with any remaining questions.

    Happy holidays,
    Ferdinand

    import c4d
    
    def main():
        """Entry point.
        """
        if op is None:
            raise RuntimeError("Please select an object")
        
        # Get the unique ID attached by MAxon to each node. See linked threads
        # for details.
        uuid = op.FindUniqueID(c4d.MAXON_CREATOR_ID)
        print ("node:", op)
        print ("uuid:", uuid)
        print ("raw uuid:", bytes(uuid))
        
    if __name__=='__main__':
        main()
    
    node: <c4d.BaseObject object called Cube/Cube with ID 5159 at 2488003778176>
    uuid: <memory at 0x000002434A4CD198>
    raw uuid: b',\xf0]w\xccG\x14\x0c\xfd\x8c\xfd.\xb8U\x00\x00'
    >>> 
    


  • Hi @Motion4D,

    thank you for reaching out to us. The answer to your question is C4DAtom.FindUniqueID. The topic has been discussed just yesterday here and also a couple of times in the past; you might find this thread informative. I also attached a small example, please feel free to come back with any remaining questions.

    Happy holidays,
    Ferdinand

    import c4d
    
    def main():
        """Entry point.
        """
        if op is None:
            raise RuntimeError("Please select an object")
        
        # Get the unique ID attached by MAxon to each node. See linked threads
        # for details.
        uuid = op.FindUniqueID(c4d.MAXON_CREATOR_ID)
        print ("node:", op)
        print ("uuid:", uuid)
        print ("raw uuid:", bytes(uuid))
        
    if __name__=='__main__':
        main()
    
    node: <c4d.BaseObject object called Cube/Cube with ID 5159 at 2488003778176>
    uuid: <memory at 0x000002434A4CD198>
    raw uuid: b',\xf0]w\xccG\x14\x0c\xfd\x8c\xfd.\xb8U\x00\x00'
    >>> 
    


  • @zipit Hi Ferdinand, yes this is exactly what I was looking for. Sorry, I must have missed the other post. Thanks so much for clarifying with the example code:)



  • @zipit Hi Ferdinand, it seems I spoke too soon. At first, it seems that the ID stays consistent. But I noticed when you go into the plugin manager and reload a plugin all the IDs change again:(
    It's possible this won't be an issue for users who aren't reloading plugins but there also may be other things that change the ID of all objects.
    Is this a bug perhaps or is there really no guarantee that an ID can stay consistent with an object?

    Thanks!

    Adam



  • Hi @Motion4D,

    indeed, Cinema does reestablish the scene graph when you hit Reload Python Plugins. However, this is more of an odd outlier, for more details, have a look at this thread I did link to in my first posting, which clarifies a bit the guarantees with which MAXON_CREATOR_ID comes. There has also been a recent thread where we did talk about the shortcomings of unique IDs in regard to caches.

    Cheers,
    Ferdinand



  • @zipit thanks for clarifying. Hopefully, there will be something more predictable for IDs in the future.



  • Hi @Motion4D,

    I am not quite sure if there will be anything in the pipeline soon, because the limitations of IDs and markers are more of principal nature due to Cinema's heavily procedural architecture; i.e., not really something that can be "fixed". If you have any particular feature in mind, I would ask you to make a separate post with a dedicated feature request.

    We however already did identify the whole "identifying and object"-thing a few weeks ago as something that is probably not explained well enough at the moment and added it to our to-do-list. There are no guarantees on when this will come though ;)

    Cheers,
    Ferdinand


Log in to reply