Python —— 简述

Houdini Python | 笔记合集 - 知乎

Houdini内置三大语言:

  • 表达式,主要用于节点参数控制,可实现跨模块控制;
  • vex,速度最快(比表达式和Python快一个数量级),非常适合密集型计算环境,应首选;
  • python,注意用于编写脚本,控制pdg,实现houdini以外的功能;可做表达式和vex(材质除外)大部分事情,但最慢;此语言可用于自定义窗口、导出数据、加密、抓取网络数据,任务发布,深度学习等;
    Houdini中调用Python的方式
  • Python节点;
  • Python Shell;
  • Python Source Editor,自定义函数模块,需保存hip文件;
  • 节点的Operator Type Properties/Scripts;
  • 工具架工具Scripts;

节点编辑

cpp 复制代码
//创建节点
node.createNode('subnet', subnet_name)
node.createInputNode(0, 'box')
node.createOutputNode('box')
cpp 复制代码
//节点状态
node.hide(False)
node.setHighlightFlag(False)
node.setTemplateFlag(False)
node.setSelectableTemplateFlag(False)
node.setSelected(False)
node.setUnloadFlag(False)

node.setHardLocked(True)
node.setSoftLocked(False)

node.setDisplayFlag(True)
node.setRenderFlag(True)

node.layoutChildren() //自动排列节点位置,相当于L

node.bypass(True)

hou.node('/obj/python').cook(True) //强制重新计算
cpp 复制代码
//节点位置
node.position()
node.setPosition(vector2) //(pos.x()+1, pos.y()+1)、hou.Vector2(pos.x()+1, pos.y()+1)
node.move((2,3))
node.moveToGoodPosition()
cpp 复制代码
//获取节点信息
hou.pwd() //获取当前节点
hou.node('.') //获取当前节点

node.path() //获取节点的绝对路径

node.name()
node.setName(newname)
cpp 复制代码
//选择节点
hou.selectedNodes() //返回所选节点的列表
node.setSelected(True) //设置为选择节点
node.setCurrent(True) //设置当前节点为最后选择的节点
cpp 复制代码
//父子节点
node.parent() //父级节点
node.children() //子节点列表
node.allSubChildren() //递归返回所有子节点
node.allNodes() //递归返回所有子节点,包括本身
node.allItems() //返回所有子项
node.numItems() //子项数

//上游节点
node.inputAncestors() 
cpp 复制代码
//连接节点
node.inputs()
node.input(inputindex)
node.outputs()
node.setFirstinput(otherNode)
node.setInput(0, otherNode)
cpp 复制代码
//节点类型
hou.nodeType() //HOM Funtion
node.type() //Class Function
node.type().instances()
node.type().name()
node.type().category()
node.changeNodeType(newtype)

//节点类型的类别
hou.nodeTypeCategories() //返回类别字典
hou.sopNodeTypeCategory() //返回sop类别
cpp 复制代码
//用户数据
node.setUserData(name, value)
node.userDataDict()
node.Data(name)
node.destroyUserData(name)
node.clearUserDataDict()
cpp 复制代码
//注释评论
node.setComment(comment) //设置评论
node.setGenericFlag(hou.nodeFlag.DisplayComment, True) //显示评论
cpp 复制代码
//复制节点
hou.copyNodesTo(nodes, dest)
node.copyTo(dest)

节点参数编辑

cpp 复制代码
//获取参数
hou.parm(path)
hou.parmTuple(path)
node.parm(parm_path)
node.parmTuple(parm_path)
node.parms()
node.parmTuples()
cpp 复制代码
//计算参数
hou.ch(path) //等价于hou.evalParm(path)
hou.evalParm(path)
hou.evalParmTuple(path)
node.evalParm(parm_path)
node.evalParmTuple(parm_path)
node.parm(parm_path).eval()
cpp 复制代码
//设置参数
node.setParms(parm_dict)
node.parm(parm_path).set(value)
cpp 复制代码
node.parm(parm_path).rawValue()
node.parm(parm_path).keyframes()
node.parm(parm_path).commponentIndex()
node.parm(parm_path).lock(True)
node.parm(parm_path).pressButton() //调用callback脚本
cpp 复制代码
//ramp参数
ramp_value = node.parm('ramp').eval()
ramp_value.lookup(position)

//添加ramp参数
node = hou.node('/obj/box_object1/null1')
ramp_temp = hou.RampParmTemplate("name","label",hou.rampParmType.Color,default_value=2)
ramp_parm = node.addSpareParmTuple(ramp_temp)
ramp_value = hou.Ramp( (hou.rampBasis.Linear, hou.rampBasis.Linear), (0, 1), ((0.0, 1.0, 0.0), (0.0, 0.0, 0.5)) )
ramp_parm[0].set(ramp_value)

几何体对象Geometry

hou.SopNode class,表示surface节点;

hou.Geometry class,几何体对象包含定义几何体形状的点或面;

cpp 复制代码
//创建线
geo = hou.pwd().geometry()

point1 = geo.createPoint()
point1.setPosition(hou.Vector3(1,2,3))
point2 = geo.createPoint()
point2.setPosition(hou.Vector3(0,1,2))

poly = geo.createPolygon(False)
poly.addVertex(point1)
poly.addVertex(point2)
cpp 复制代码
//geo
geo.points() //返回所有点
geo.prims() //返回所有面
geo.pointAttribs() //返回所有点属性
geo.primAttribs() //返回所有点属性
geo.vertexAttribs() //返回所有点属性

geo.addAttrib(type, name, default_value, transform_as_normal=False, create_local_variable=True)

point.setAttribValue(name_or_attrib, attrib_value)
prim.setAttribValue(name_or_attrib, attrib_value)
vertex.setAttribValue(name_or_attrib, attrib_value)
geo.setGlobalAttribValue(name_or_attrib, attrib_value)
cpp 复制代码
//point
point.number()
point.position()
point.prims()
point.vertices()
cpp 复制代码
//prim
prim.number()
prim.points()
prim.vertices()

组编辑

cpp 复制代码
//返回对应的所有组
geo.pointGroups()
geo.primGroups()
geo.edgeGroups()
geo.vectexGroups()

//创建对应的组
geo.createPointGroup(name, is_ordered=False)
geo.createPrimGroup(name, is_ordered=False)
geo.createEdgeGroup(name, is_ordered=False)
geo.createVertexGroup(name, is_ordered=False)

//查找对应的组
geo.findPointGroup(name)
geo.findPrimGroup(name)
geo.findEdgeGroup(name)
geo.findVertexGroup(name)

UI窗口

cpp 复制代码
//显示提示框
hou.ui.displayMessage(text)
hou.ui.displayConfirmation(text)
hou.ui.displayNodeHelp(node.type())
hou.ui.displayFileDependencyDialog()
cpp 复制代码
//输入弹窗
hou.ui.readInput("Insert text") //单行
hou.ui.readMultiInput(message = "Enter parms:",
input_labels = ["height","lRadius","uRadius","frequency"],
initial_contents = ["20","10","0","3"]) //多行
cpp 复制代码
//文件选择弹窗
hou.ui.selectFile()

函数

cpp 复制代码
//自定义函数
def fun(kwargs):
    return kwargs
cpp 复制代码
node.asCode() //打印重建此节点所需的代码
str() //转化为字符类型
exec(str) //将字符做为代码运行
locals().get("var") //是否已存在指定的局部变量
cpp 复制代码
//展开字符串内的局部变量或表达式,已废弃使用hou.text.expandString 
hou.expandString(str)
//在给定帧展开字符串内的局部变量或表达式,已废弃使用 hou.text.expandStringAtFrame
hou.expandStringAtFrame(str, frame_number) 
cpp 复制代码
//hou.Vector3 class
vector.length()
vector.normalized()
vector.distanceTo(vector3)
vector.dot(vector3) 
vector.cross(vector3)
angleTo(vector3) 
x()、y()、z()
cpp 复制代码
//获取图像分辨率
imageResolution(image_file_name)
//获取运行的houdini的路径
hou.houdiniPath()
//设置节点的默认表达式语言
node.setExpressionLanguage(hou.exprLanguage.Hscript)
//将节点从指定版本同步到其HDA定义的当前版本
node.syncNodeVersionIfNeeded(from_version)
cpp 复制代码
//加载自定义hda
hou.hda.installFile(hda_file_path)
//存储当前文件
hou.hipFile.save()
//加载一个新文件
hou.hipFile.load()

其他

自定义运行节点代码按钮

  • 在节点创建多行字符串参数,语言改为Python;
  • 创建按钮参数,并编写Python调用脚本(callback script);
cpp 复制代码
//current_node = kwargs['node']
//kwargs = hou.pwd() = kwargs['node']
exec(kwargs['node'].parm('code').eval())
//或
exec(hou.pwd().parm('code').eval())

for...in...语句

enumerate()枚举函数

相关推荐
敲代码不忘补水2 分钟前
Python 项目实践:简单的计算器
开发语言·python·json·项目实践
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
子午1 小时前
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
人工智能·python·cnn
风等雨归期2 小时前
【python】【绘制小程序】动态爱心绘制
开发语言·python·小程序
Adolf_19932 小时前
Flask-JWT-Extended登录验证, 不用自定义
后端·python·flask
冯宝宝^2 小时前
基于mongodb+flask(Python)+vue的实验室器材管理系统
vue.js·python·flask
叫我:松哥2 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Eiceblue2 小时前
Python 复制Excel 中的行、列、单元格
开发语言·python·excel
NLP工程化3 小时前
对 Python 中 GIL 的理解
python·gil
极客代码3 小时前
OpenCV Python 深度指南
开发语言·人工智能·python·opencv·计算机视觉