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")






       
 






sábado, 27 de abril de 2019

quinta-feira, 24 de janeiro de 2019

using GCC 6.3 in Centos 7 -- HOUDINI HDK

Centos7 comes with gcc 4.8
but Houdini 17 needs gcc 6.3 at least

so you need install a update version
and left old version only for the system general uses
you will need  SCL package manager  and GCC 6.3 dev toolset

Write down in terminal :

sudo yum -y install centos-release-scl
sudo yum -y install devtoolset-6

then to compiling using hcustom and this new dev toolset
just send commands by scl
lets go compile geoisosphere from HDK samples :

scl enable devtoolset-6 "hcustom -s geoisosurface.C"

output :

Making geoisosurface.o from geoisosurface.C
Making ./geoisosurface from geoisosurface.o
g++ geoisosurface.o -lpthread -o ./geoisosurface -L /opt/hfs17.0.352/dsolib -lHoudiniUI -lHoudiniOPZ -lHoudiniOP4 -lHoudiniUSD -lHoudiniOP3 -lHoudiniOP2 -lHoudiniOP1 -lHoudiniSIM -lHoudiniGEO -lHoudiniPRM -lHoudiniUT -lhboost_system -L/usr/X11R6/lib64 -L/usr/X11R6/lib -lGL -lX11 -lXext -lXi -ldl -Wl,-rpath,/opt/hfs17.0.352/dsolib


done!





quarta-feira, 21 de novembro de 2018

IOR SIMULATOR

IOR simulator 


https://phet.colorado.edu/sims/html/bending-light/latest/bending-light_en.html



sexta-feira, 1 de junho de 2018

User Attributes from maya to Houdini using Alembic


In Maya create a new attribute inside  your object transform node and fill it up with your data   
Go inside Alembic options . add your attribute using channel box or just write down inside attribute box and prefix box . then inside Houdini will be  possible access this attribute from disk using python expression 


import _alembic_hom_extensions as abc 
import hou 
value = abc.alembicArbGeometry("/Volumes/Raid0/GREEN/HOUDINI/USERS/LUCAS/abc/INFO.abc","CAM_EXTRA_","zoom",hou.frame() /24)[0][0]
return(value)


command Usage:
alembicArbGeometry("filePath","objPath" , "userAttribute" , sample time )

actually this command return a tuple of values , we are just looking for inside values,  that's why 
we add [0[[0] at the end

terça-feira, 20 de março de 2018

Python CacheManager for houdini

Python scripts to copy files to another folder if its greater then maximus capacity .
Source this functions using  Houdini by Python Source Editor  then write down  this line in your Pre-Frame Script using python as main language

    hou.session.cacheCopyManager(hou.node('/out/geometry1'), 890409 , "/home/chrysl666/PROJECTS/TEMP")

this function needs a path to the ROP node , a maximus Size in bytes  and the destination folder


script code :



# python scripts to copy files to another folder if its greater then maximus capacity
# source this functions using  Houdini by Python Source Editor
# then put this line in your Pre-Frame Script
#
#     hou.session.cacheCopyManager(hou.node('/out/geometry1'), 890409 , "/home/chrysl666/PROJECTS/TEMP")
#
#     this function needs a path to the ROP node , a maximus Size in kbits 
#     and the destination folder


#get total size of a folder in Kbytes
def get_size(startDirPath):
    import os
   
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(startDirPath):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            total_size += os.path.getsize(fp)
    return total_size

#copy files from a folder to another one
def copyCurrentCache(dirPath , dest ):
    import os
    import shutil

    src_files = os.listdir(dirPath)

    for file_name in src_files:
        full_file_name = os.path.join(dirPath, file_name)
        if (os.path.isfile(full_file_name)):
            shutil.copy(full_file_name, dest)
           

#remove old files from a folder
def removeOldCache(dirPath):
    import os
   
    filelist = [ f for f in os.listdir(dirPath) if f.endswith(".sc") ]
    for f in filelist:
        os.remove(os.path.join(dirPath, f))

# main function for managing cache folder size
def cacheCopyManager(ropNode , maxsize , dest):
    import os
    import hou
   
    #get cacheFolderPath
    outFileParm = ropNode.evalParm("sopoutput")
    dirPath = os.path.split(outFileParm)
   
    #get cacheFolder size in Kb
    dirSize = hou.session.get_size(dirPath[0])
   
    #check if it greather then maxi size
    if dirSize >= maxsize :
        print dirSize
        #if its greather then copy to another folder and delete oldCache
        hou.session.copyCurrentCache(dirPath[0] , dest)
        hou.session.removeOldCache(dirPath[0])