metadata [SOLVED]



  • On 11/06/2015 at 13:06, xxxxxxxx wrote:

    Hello,

    I believe the metadata is with .c4d scene file. Is there any documents I can look up to access the metadata? As for now, what I did is to write out a xml file as a temporary solution.

    If there is accessible metadata it would be so much helpful. Thank you! 🙂

    Amy



  • On 12/06/2015 at 06:50, xxxxxxxx wrote:

    Hello and welcome,

    I guess with metadata you mean the project infos like author, copyright and file version? You can access that information from the BaseDocument using GetDocumentData():

      
    data =  doc.GetDocumentData(c4d.DOCUMENTSETTINGS_DOCUMENT)  
      
    print(data[c4d.DOCUMENT_INFO_AUTHOR])  
    print(data[c4d.DOCUMENT_INFO_PRGCREATOR_NAME])  
    

    See also this thread: "Extracting Metadata".

    best wishes,
    Sebastian



  • On 12/06/2015 at 09:20, xxxxxxxx wrote:

    Thank you for your information, I will try it out. Thanks!!



  • On 12/06/2015 at 10:16, xxxxxxxx wrote:

    I would like to set/get new settings to/from the document using BaseContainer, but I am not sure how to combine both DocumentData and BaseContainer. Below is the code I was trying to add the data from BaseContainer to DocumentData, and of course it's not working..😠 Sebastian would you mind take a look? Thanks!

    bc = c4d.BaseContainer()
    bc.__setitem__(0, value0)
    bc.__setitem__(1, value1)
    setData = doc.SetDocumentData(c4d.DOCUMENTSETTINGS_DOCUMENT, bc)

    TypeError: an integer is required

    I assume it should be a new type for bc?
    Once the data has been stored to the document, I can also get the value from it.
    Thank you!



  • On 12/06/2015 at 16:05, xxxxxxxx wrote:

    Hi @Amy, something like this should work:

      
    toggle_bc = c4d.BaseContainer()   
    toggle_bc[TOGGLE_ID] = True   
    doc[PLUGIN_ID] = toggle_bc   
    

    From this post.

    Not sure what the error in your code is.



  • On 15/06/2015 at 10:21, xxxxxxxx wrote:

    Thank you Donovan, I could set and get the customized setting now :)

    Just in case anyone have the similar need, below is the code:

    store data to document

    bc = c4d. BaseContainer()
    bc[id] = value
    doc.SetDocumentData(c4d.DOCUMENTSETTINGS_DOCUMENT, bc)

    access data from the document

    mdata = doc.GetDocumentData(c4d.DOCUMENTSETTINGS_DOCUMENT)
    dataValue = mdata[id]



  • On 15/06/2015 at 10:44, xxxxxxxx wrote:

    Hi Amy,

    That actually looks a little dangerous - you're storing a mostly empty container in the DOCUMENTSETTINGS_DOCUMENT slot - if anyone else is trying to store data there you'll overwrite it. It would be safer to do something like:

      
    #Create a container to store your custom data   
    plugin_bc = c4d.BaseContainer()   
    plugin_bc[item_id] = value   
      
    #Get the Document Settings BaseContainer   
    doc_bc = doc.GetDocumentData(c4d.DOCUMENTSETTINGS_DOCUMENT)   
    doc_bc[PLUGIN_ID] = plugin_bc #Store plugin container inside of document container   
      
    #Save the updated Document BC   
    doc.SetDocumentData(c4d.DOCUMENTSETTINGS_DOCUMENT, doc_bc)   
      
    #Access data from the document   
    dataValue = doc.GetDocumentData(c4d.DOCUMENTSETTINGS_DOCUMENT)[PLUGIN_ID][ITEM_ID] #It would probably be safer to check to ensure the container is returned and your subcontainer exists before using it.   
    

    You can get a unique plugin id here: http://www.plugincafe.com/forum/developer.asp



  • On 15/06/2015 at 10:47, xxxxxxxx wrote:

    Oh, good to know! Thank you very much, Donovan 🙂


Log in to reply