Hougraph source

From DreamsteepWiki

Jump to: navigation, search

THIS IS A SKETCH OF AN IDEA TO BECOME A WORKING FRAMEWORK UPDATED JULY 1 2010


"""
 THIS WILL ONLY WORK WHEN USED THROUGH HOUDINI
 (add /sma/kl_py_sys/ to PATH in houdini py shell )
 ###
 created nov 24,2007
 updated june 30,2010
 
 
 MODES : BATCH , EXPOT SCRIPT, RUN LIVE VIA TCP
 
"""

import sys_data_tree
import sys_kernel

try:
  import hou
except:
  print 'WARN NO HOUDINI SUPPORT FROM CURRENT SHELL '
  raise 'sys_houdinilink::NO HOU MODULE FOUND'


##

GLOB = sys_kernel.sys_globals()
globalvars= GLOB.get()

##
HOUDINIPATH =globalvars[10]

print 'hpath@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
print  HOUDINIPATH

"""
#print dir(sub_HSOP)

C:\Program Files\Side Effects Software\Houdini 9.0.719\bin\hython.exe

#OTHER RELAVANT LINKS

C:\Program Files\Side Effects Software\Houdini 9.0.719\bin\hscript.exe

####

mplay.exe

"""





#print hou
#hou.node('/obj')

#######################################################
class HOUDINI_SOP_GRAPH(sys_data_tree.data_graph):
  #def __init__(self):
  NODES_CREATED = []

  
#######################################################
class houd_SOP_NODE(sys_data_tree.node_base):
  ##########

  #def __init__(self):

  def __init__(self, node):
        self.node = node
        self.NODES_CREATED =[]
        self.currentpath = '/obj'

  ##########

  ##########

  ##########
  def parentnode(self,pnode,cnode):
     #NODE = hou.node(self.currentpath).createNode(self.defaulttype)
     #print self.name
     print self.defaulttype
     
     #self.NODES_CREATED.append(NODE)
     
  ##########

#########
"""
example of some derived nodes and functions
"""

class edit_HSOP(houd_SOP_NODE):
  def __init__(self, node):
        self.node = node
        self.name = ''
        
  def clearscene(self):
     print 'SOFIST!'
     #NODE = hou.node(self.currentpath).createNode(self.defaulttype)
     #self.NODES_CREATED.append(NODE)
     hou.hipFile.clear()

class add_HSOP(houd_SOP_NODE):

  def __init__(self, node):
        self.node = node
        self.currentpath = '/obj'
        self.defaulttype = 'geo'
        
  def addnode(self,name):
     NODE = hou.node(self.currentpath).createNode(self.defaulttype)
     #print self.name
     #print self.defaulttype


########################################
########################################



"""
HG = HOUDINI_SOP_GRAPH('HGRAPH')
N1 = houd_SOP_NODE('TNOD')
N2 = edit_HSOP('NUENODER')
N3 = add_HSOP('fooey')

#RUN A COMMAND
N1.settype('wolf')
N2.settype('qwoulfy')


HG.add(N1)
HG.add(N2)

###
N2.clearscene()
N3.addnode('xxx')


#run a derived datanode com :
#N1.help()
HG.dumpall()


###

#HG.dumpall()
#HG.save_graph_file('C:/HOUDINI_COMMAND_GRAPH.txt')
"""


########################################
########################################


#######################################################
class HOUDINI_COP_GRAPH(sys_data_tree.data_graph):
   def __init__(self, node):
        self.node = node
        self.INPUTNODES      = []
        self.PROCESSINGNODES = []
        #self.INPUTNODES      = []

   ####
   def export_shk(self):
     pass
   ####
   def import_shk(self):
     pass
   ####
   def add_layer(self,layername,input1,input2):
      #Layer1 = Layer(crop_1_3___, ColorWheel1, "Over", 0, 0, 0);

    pass
    


##########################


"""
#QUICK INSTRUCTIONS

import sys_data_tree

#CREATE A GRAPH
graph = sys_data_tree.data_graph('NEWCHAR')

#CREATE SOME NODES
node  = sys_data_tree.node_base('INPUTS')
node2 = sys_data_tree.node_base('OUTPUTS')
node3 = sys_data_tree.node_base('TYPE')
node4 = sys_data_tree.node_base('frug')
node5 = sys_data_tree.node_base('brugh')

#SET THE TYPES
node.settype('wolf')
node2.settype('bear')
node3.settype('quadrowolf')


#ADD ONE OR MORE ATTRIBUTES TO A NODE AND SET VALUE
node.addattr('sparky',2.1)
node.addattr('kranker','tweeky')
node2.addattr('plugger','ee4.32')
#node3.addattr('sparrrky',2.1)
#node4.addattr('sparreeky',2.1)
#node5.addattr('sparrreeeky',2.1)

#LIST A NODES ATTRIBUTES
#node2.listallattrs()

#RETURN A NODES ATTRIBUTES
#print node.getattrib('kranker')


#print node2.gettype()
#print node3.getname()

#ADD NODES TO GRAPH
graph.add(node)
graph.add(node2)
graph.add(node3)
graph.add(node4)
graph.add(node5)


##USE THE GRAPH TO LINK NODES INTO A TREE
graph.link(node,node2)
graph.link(node3,node2)
graph.link(node4,node2)


SET PARENTING AS WELL AS LINKS (parented node trees can be linked, as well)
graph.parent_obj(node2,node)
graph.parent_obj(node3,node2)
graph.parent_obj(node4,node)
graph.parent_obj(node5,node)


#LIST ALL NODES
#print graph.listnodes('name')
#print node.listoutputs()

######################################
#SHOW NODE LINKS
#clear buffers
#graph.setupwalk()
#print graph.walklinked('INPUTS','name')

######################################
#graph.setupwalk()
#print graph.walk_up_linked('INPUTS','name')

######################################
#SHOW PARENTING
#clear buffers
#graph.setupwalk()
#graph.walk('INPUTS','name')

######################################
#print graph.list_parents(node3)
#print graph.list_parents_name('brugh')

#print graph.find_node('nodenamer')

################
#if graph.is_parent_of(node,node3):
#   print 'hell yeah'

#graph.dumpall()

######################################
#SAVE AN XML
graph.setupwalk()
graph.save_XML_file('C:/pus.xml','INPUTS')

######################################
#LOAD AN XML (NOT DONE YET)
newgraf =  sys_data_tree.data_graph('NGBEE')
newgraf.setupwalk()
newgraf.load_XML_file('C:/pus.xml')
newgraf.dumpall()

######################################
#graph.dumpall()
	
		
######################################
"""






"""
dir(hou)

hou.cd('/')

hou.pwd()

hou.node('/obj')


hou.setTime(100)


"""


"""

class NodeWrapper:
    def __init__(self, node):
        self.node = node
    def __getattr__(self, name):
        # First check for children nodes:
        child = self.node.node(name)
        if child is not None:
            return NodeWrapper(child)

        # Now check for parameters:
        parm = self.node.parm(name)
        if parm is not None:
            return parm

        # Do a normal attribute lookup:
        return getattr(self.node, name)

Scene = NodeWrapper(hou.node("/obj"))


If /obj/geo1 is a geo object, you can write:
CODE
>>> Scene.geo1.tx.eval()
0.0
>>> Scene.geo1.tx.set(1.0)


"""






Personal tools