sexta-feira, 6 de setembro de 2019

Archive tool

ARCHIVE WIP !!WIP



Code :
       




import os
import hou



#Get HIP
hipdir = hou.expandString("$HIP")
#Get frame range 
totalFrameRange = 50000

# check if it is in Project Path
def isInProjectPath(projPath , filePath ):
    absProject = os.path.abspath(projPath)
    absFilePath = os.path.abspath(filePath)    
    return os.path.commonprefix([absProject,absFilePath])==absProject



# run my custom prefligth
def chrysl666_PF():
    
    #empty list
    compressList = []
    messages = ""
    
    # list all parm and paths
    for parm , path in hou.fileReferences():
        
        #expand path to absolute paths in all frames
        for i in range(totalFrameRange):
            try:
                filePath = parm.evalAsStringAtFrame(i)
            
                
                #check if file  is inside Main Project
                if not isInProjectPath(hipdir, filePath):
                    messages += (  "---->filePath = "+filePath + " is not in $HIP\n" )
                    
                    break
                
                #check if exists in disk
                if(os.path.exists(filePath) == True ):
                    # if True add into the list
                    compressList.append(filePath)
            except:
                pass
                
    # remove duplicate paths from list
    compressList = list(dict.fromkeys(compressList))
    # sort
    compressList.sort()
    
    #not used 
    #for each in  compressList:
    #    print each + "\n"
    
    if(messages>1):
        hou.ui.displayMessage( messages , title ="NOT IN THE PROJECT PATH")
    return  compressList
    

    
    # ARCHIVE FUNC
def archive(list):
    from zipfile import ZipFile
    import os
    
        # gets scene file
    scene = hou.expandString("$HIPFILE")
    sceneName = hou.expandString("$HIPNAME")
    
    # gets HIP Projct folder
    hipdir = hou.expandString("$HIP")
    
    zipNameAndPath = os.path.join(hipdir,sceneName)+".zip"
    
    # opens zip to write
    
    finalZip = ZipFile(zipNameAndPath,"w")
    
    
    # write dependence files
    finalZip.write(scene)
    for each in list:
        finalZip.write(each)
    
    # closes zip    
    finalZip.close()
    hou.ui.displayMessage(zipNameAndPath , title = "DONE")

    
archive(chrysl666_PF())






       
 






domingo, 1 de setembro de 2019

Animated Network Background Image

I created a little script to update Network Background images
using houdini`s timeline callback , just create a new shelf tool and copy and paste my code
this tool works as toggle mode . click to activate , click again to deactivate

Code :
       




import hou 
chrysl666BG_padding = 0 

#CREATE BG
def updateBG(event_type,frame):
    #create initial vars 
    imagePath=""
    strFrame = str(frame)

    
    #get editor and BGimage infos
    editorHolder = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor)
    BGLIST = editorHolder.backgroundImages()
    
    #if BG image is not created  -- do create
    if(len(BGLIST) < 1 ):
        #start holders
        imageHolder = hou.NetworkImage()
        imagePath = hou.ui.selectFile(start_directory="HIP" , title = "SELECT FRAMES ")
        # check padzeros
        pathParse = imagePath.rsplit(".",2)        
        if( len(pathParse[1]) > 2 ):
            global chrysl666BG_padding
            chrysl666BG_padding  = int(pathParse[1][2])
            strFrame = str(frame).zfill(chrysl666BG_padding) # apply padding
        # build path string 
        newPath = pathParse[0]+"."+strFrame+"."+pathParse[2]
        # apply Background Image 
        imageHolder.setPath(newPath)
        imageHolder.setRect(hou.BoundingRect(0, 0, 5, 5))
        editorHolder.setBackgroundImages([imageHolder])
    else: # BG image is already created 
        #starts holders
        imageHolder = BGLIST[0]
        imagePath = imageHolder.path()
        #chack padzeros
        pathParse = imagePath.rsplit(".",2)
        #padding  = len(pathParse[1])
        global chrysl666BG_padding
        strFrame = str(frame).zfill(chrysl666BG_padding) # apply padding
        # build path string 
        newPath = pathParse[0]+"."+strFrame+"."+pathParse[2]
        # apply Background Image 
        imageHolder.setPath(newPath)
        editorHolder.setBackgroundImages([imageHolder])
        

#check for playbar events when tool is clicked 
events =  hou.playbar.eventCallbacks() 
if(len(events) <1):
    #if not events, create it
    updateBG(0,hou.intFrame())
    hou.ui.displayMessage("BG IMAGE CREATED")
    hou.playbar.addEventCallback(updateBG)
else:
    # events exist  delete it
    hou.playbar.clearEventCallbacks()   
    hou.ui.displayMessage("BG IMAGE EVENT DELETED")