Python replace Textures Help / advice



  • On 06/06/2013 at 03:15, xxxxxxxx wrote:

    Ola,

    i'm facing a challenge and crunching trough it.  im a python starter but i like it.

    What im trying to do is to replace all the textures paths in my scene (Materials setup : color channel -> multishader with 10 videoclips in it) in all Materials in the scenefile.

    Here is the catch.
    im replacing the low mp4 with an image sequence with it respectful folder. the thing that changes is basepath\imageseq_name\imageseq_name_00000.jpg where for every file there is another name (namex_00000.jpg in folder namex) which replaces basepath\allstuf\namex.mp4

    Hope you understand what im trying to achieve.
    For now i managed to do all the above except getin trough to multishader to replace the respective paths, otherwise im creating all new materials for every mp4 which gets replaced in multishader (located in color chan).

    Here is my working script, please do not bithc me out im still learnin and its very fun, hope i can manage to do some more complex things in the future.
    ---------------------

    import c4d
    from c4d import gui, bitmaps, documents, storage
    import os
    from os.path import basename, splitext
    import re

    print "------------ Starting"
    #c4d.StopAllThreads()

    def main() :
        myMaterials       = doc.GetAllTextures()
        myTexture = c4d.BITMAPSHADER_FILENAME
        fileExtensionWrong   = ".mp4"
        fileExtension   = "_00000.jpg"
        path1 = r'E:\global new\assests frames' #set ur paths
        path2 = r'E:\global new\assets' #set ur paths
        # insert the path to the directory of interest
        newPath = path1 + fileExtension
        #print newPath   
        #print myTexture

    #print(myMaterials)
        for (i,item) in myMaterials:
            print "old item: "+item
            newitem=item.replace ( '.mp4' , '_00000.jpg' )
            newitem2=newitem.replace ( path2,'')
            #newitem3=newitem.replace ( '.mp4','' )
            newName=newitem2.replace ("\",'')
            folderName=newName.replace('_00000.jpg','')
            print "New name is: " + newName
            print "------------------"
            #print newitem2
            print "--- replacing ---"
            newTexturePath = path1 + '\' + folderName + '\' + newName
            print "New texture path is: " + newTexturePath
            myTexture = newTexturePath
            print "code start"
            # Setup and add
            fps=30
            #minFrame=0
            #maxFrame=650 
            doc.SetFps(fps)
            #doc.SetMinTime(c4d.BaseTime(minFrame,fps))
            #doc.SetMaxTime(c4d.BaseTime(maxFrame,fps))
            #doc.SetTime(c4d.BaseTime(maxFrame,fps))
            
            # Materials:[c4d.BITMAPSHADER_TIMING_TO]
            #if not mat: return True
            oldTime=c4d.BITMAPSHADER_TIMING_TO
            print oldTime
            newTime= (oldTime - 1)
            mat = c4d.BaseMaterial(c4d.Mmaterial)
            shader = c4d.BaseShader(c4d.Xbitmap)
            shader[c4d.BITMAPSHADER_FILENAME] = newTexturePath
            shader[c4d.BITMAPSHADER_TIMING_TO]= newTime
            mat[c4d.MATERIAL_COLOR_SHADER] = shader
            print newTime
            mat.InsertShader(shader)
            print "check"
            print shader
            print mat
            mat.Message(c4d.MSG_UPDATE)
            mat.Update
            c4d.EventAdd()
            doc.InsertMaterial(mat)
            #return (mat, shader)

    # print path
        #dirLister=os.listdir(path)
        #for fname in dirLister:
        #    print fname
        #    print myMaterials
        #print myTexture

    # update the Cinema 4D UI
        #c4d.EventAdd()

    # tell that the processing was finished
        print " ------------ Finished processing.-----------------"                
        # gui.MessageDialog("Finished processing.")

    if __name__=='__main__':

    main()
        
        
    print "------------ Done."

    Thanks for any help!

    Des


Log in to reply