Python —— 简述
Houdini Python | 笔记合集 - 知乎
Houdini内置三大语言:
- 表达式,主要用于节点参数控制,可实现跨模块控制;
- vex,速度最快(比表达式和Python快一个数量级),非常适合密集型计算环境,应首选;
- python,注意用于编写脚本,控制pdg,实现houdini以外的功能;可做表达式和vex(材质除外)大部分事情,但最慢;此语言可用于自定义窗口、导出数据、加密、抓取网络数据,任务发布,深度学习等;
Houdini中调用Python的方式
- Python节点;
- Python Shell;
- Python Source Editor,自定义函数模块,需保存hip文件;
- 节点的Operator Type Properties/Scripts;
- 工具架工具Scripts;
节点编辑
//创建节点
node.createNode('subnet', subnet_name)
node.createInputNode(0, 'box')
node.createOutputNode('box')
//节点状态
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() //自动排列节点位置,相当于Lnode.bypass(True)hou.node('/obj/python').cook(True) //强制重新计算
//节点位置
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()
//获取节点信息
hou.pwd() //获取当前节点
hou.node('.') //获取当前节点node.path() //获取节点的绝对路径node.name()
node.setName(newname)
//选择节点
hou.selectedNodes() //返回所选节点的列表
node.setSelected(True) //设置为选择节点
node.setCurrent(True) //设置当前节点为最后选择的节点
//父子节点
node.parent() //父级节点
node.children() //子节点列表
node.allSubChildren() //递归返回所有子节点
node.allNodes() //递归返回所有子节点,包括本身
node.allItems() //返回所有子项
node.numItems() //子项数//上游节点
node.inputAncestors()
//连接节点
node.inputs()
node.input(inputindex)
node.outputs()
node.setFirstinput(otherNode)
node.setInput(0, otherNode)
//节点类型
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类别
//用户数据
node.setUserData(name, value)
node.userDataDict()
node.Data(name)
node.destroyUserData(name)
node.clearUserDataDict()
//注释评论
node.setComment(comment) //设置评论
node.setGenericFlag(hou.nodeFlag.DisplayComment, True) //显示评论
//复制节点
hou.copyNodesTo(nodes, dest)
node.copyTo(dest)
节点参数编辑
//获取参数
hou.parm(path)
hou.parmTuple(path)
node.parm(parm_path)
node.parmTuple(parm_path)
node.parms()
node.parmTuples()
//计算参数
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()
//设置参数
node.setParms(parm_dict)
node.parm(parm_path).set(value)
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脚本
//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,几何体对象包含定义几何体形状的点或面;
//创建线
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)
//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)
//point
point.number()
point.position()
point.prims()
point.vertices()
//prim
prim.number()
prim.points()
prim.vertices()
组编辑
//返回对应的所有组
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窗口
//显示提示框
hou.ui.displayMessage(text)
hou.ui.displayConfirmation(text)
hou.ui.displayNodeHelp(node.type())
hou.ui.displayFileDependencyDialog()
//输入弹窗
hou.ui.readInput("Insert text") //单行
hou.ui.readMultiInput(message = "Enter parms:",
input_labels = ["height","lRadius","uRadius","frequency"],
initial_contents = ["20","10","0","3"]) //多行
//文件选择弹窗
hou.ui.selectFile()
函数
//自定义函数
def fun(kwargs):return kwargs
node.asCode() //打印重建此节点所需的代码
str() //转化为字符类型
exec(str) //将字符做为代码运行
locals().get("var") //是否已存在指定的局部变量
//展开字符串内的局部变量或表达式,已废弃使用hou.text.expandString
hou.expandString(str)
//在给定帧展开字符串内的局部变量或表达式,已废弃使用 hou.text.expandStringAtFrame
hou.expandStringAtFrame(str, frame_number)
//hou.Vector3 class
vector.length()
vector.normalized()
vector.distanceTo(vector3)
vector.dot(vector3)
vector.cross(vector3)
angleTo(vector3)
x()、y()、z()
//获取图像分辨率
imageResolution(image_file_name)
//获取运行的houdini的路径
hou.houdiniPath()
//设置节点的默认表达式语言
node.setExpressionLanguage(hou.exprLanguage.Hscript)
//将节点从指定版本同步到其HDA定义的当前版本
node.syncNodeVersionIfNeeded(from_version)
//加载自定义hda
hou.hda.installFile(hda_file_path)
//存储当前文件
hou.hipFile.save()
//加载一个新文件
hou.hipFile.load()
其他
自定义运行节点代码按钮
- 在节点创建多行字符串参数,语言改为Python;
- 创建按钮参数,并编写Python调用脚本(callback script);
//current_node = kwargs['node']
//kwargs = hou.pwd() = kwargs['node']
exec(kwargs['node'].parm('code').eval())
//或
exec(hou.pwd().parm('code').eval())
for…in…语句
enumerate()枚举函数
相关文章:

Python —— 简述
Houdini Python | 笔记合集 - 知乎 Houdini内置三大语言: 表达式,主要用于节点参数控制,可实现跨模块控制;vex,速度最快(比表达式和Python快一个数量级),非常适合密集型计算环境&…...

使用Rust加速Python程序,让代码飞起来
作为一种解释型语言,Python在开发速度和灵活性方面具有明显的优势,但在性能方面却不如编译型语言如C或Rust。对于性能要求苛刻的应用程序,如果纯粹使用Python编写可能会运行缓慢,影响用户体验。因此,如何利用Rust来加速…...
【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(八)- 向量整数算术指令
1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容: 这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…...
Qt Designer在布局中调整控件垂直伸展或者水平伸展之后控件没有变化
QtDesigner设置垂直伸展 在Qt Designer中,要对网格布局中的每一个网格设置垂直伸展,可以按照以下步骤操作: 1.打开Qt Designer并打开你的UI文件。 2.确保你的布局是一个网格布局(QGridLayout)。 3.选中你想要设置垂直…...

微信公众号粉丝迁移费用是多少?
公众号迁移后原来内容还在么?通过公众号迁移,可以实现这些目的:主体变更、开通留言功能、多号合并、订阅号升级为服务号、服务号转为订阅号。公众号迁移流程:①申请公证;②提交迁移申请;③第三方审核&#…...

基于Vue3 中后台管理系统框架
基于Vue3 中后台管理系统框架 文章目录 基于Vue3 中后台管理系统框架一、特点二、源码下载地址 一款开箱即用的 Vue 中后台管理系统框架,支持多款 UI 组件库,兼容PC、移动端。vue-admin, vue-element-admin, vue后台, 后台系统, 后台框架, 管理后台, 管理…...

Agent调研--19类Agent框架对比
代理(Agent)指能自主感知环境并采取行动实现目标的智能体,即AI作为一个人或一个组织的代表,进行某种特定行为和交易,降低一个人或组织的工作复杂程度,减少工作量和沟通成本。 背景 目前,我们在探…...

蓝桥杯-求阶乘
问题描述 满足 N!的末尾恰好有 区 个o的最小的 N 是多少? 如果这样的 N 不存在输出 -1。 输入格式 一个整数 区。 输出格式 一个整数代表答案。 样例输入 样例输出 10 评测用例规模与约定 对于 30% 的数据,1<K<106 对于 100% 的数据,1<K<1018 运行限制 最大运行时…...
计算两个日期之间相差的天数的四种方法
计算两个日期之间相差的天数的四种方法 第一种:时间戳的方式,计算两个日期的时间戳的差,再除当天的毫秒数即可得到相差的天数。 public static void main(String[] args) {DateFormat dft new SimpleDateFormat("yyyy-MM-dd");t…...
【leetcode面试经典150题】42. 有效的字母异位词(C++)
【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…...

Windows 2003 R2与Windows 2022建立域信任报错:本地安全机构无法跟域控制器获得RPC连接。请检查名称是否可以解析,服务器是否可用。
在Windows Server 2003 R2与Windows Server 2022之间建立域信任时遇到“本地安全机构无法与域控制器获得RPC连接”的错误,可能是由于以下几种原因: DNS 解析问题: 确保源域和目标域的DNS配置正确,能够互相解析对方的域名和IP地址。…...

UE5、CesiumForUnreal实现加载建筑轮廓GeoJson数据生成白模功能
1.实现目标 在UE5.3中,通过加载本地建筑边界轮廓面GeoJson数据,获取底面轮廓和楼高数据,拉伸生成白模,并支持点选高亮。为防止阻塞Game线程,使用了异步任务进行优化,GIF动图如下所示: 其中建筑数量:128871,顶点索引数量:6695748,三角面数量:2231916,顶点数量:165…...

JavaGUI编程
目录 GUI概念 Swing概念 组件 容器组件 窗口(JFrame) 代码 运行 面板(JPanel) 代码 运行 布局管理器 FlowLayout 代码 运行 BorderLayout 代码 运行 GridLayout 代码 运行 常用组件 标签(JLabel) 代码 运…...
Nginx 基础应用实战 03 基于反向代理的负载均衡、https配置
Nginx 基础应用实战 03 反向代理 proxy_pass http://baidu.com; location /mashibing {proxy_pass http://mashibing.com/;}基于反向代理的负载均衡 upstream httpd {server 192.168.43.152:80;server 192.168.43.153:80; }weight(权重) 指定轮询几率,weight和访…...

[图解]DDD领域驱动设计伪创新-聚合根02
0 00:00:04,940 --> 00:00:06,993 在领域驱动设计之前 1 00:00:06,993 --> 00:00:09,503 的软件开发书籍里面 2 00:00:09,503 --> 00:00:12,470 并没有出现聚合根这样的说法 3 00:00:13,000 --> 00:00:14,840 大家可以去找一下 4 00:00:15,120 --> 00:00:15…...

《QT实用小工具·二十》存款/贷款计算器
1、概述 源码放在文章末尾 该项目实现了用于存款和贷款的计算器的功能,如下图所示: 项目部分代码如下: #ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJ…...

hbase基础shell用法
HBase中用create命令创建表,具体如下: create student,Sname,Ssex,Sage,Sdept,course 此时,即创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。因为HBase的表中会有一个系统默认的属性作为行键&#x…...
ElasticSearch 的 BoolQueryBuilder 使用
ElasticSearch的BoolQueryBuilder定义: A Query that matches documents matching boolean combinations of other queries import org.elasticsearch.index.query.QueryBuilders;BoolQueryBuilder boolQueryBuilder QueryBuilders.boolQuery(); for (String wor…...
[C++/Linux] 网络I/O处理
引言:网络数据能够正常到达用户并且被接收是进行网络传输的根本目的,网络传输的数据发送和接收有多种方案,本文章就对通过向量接收和发送等数据传输方式,并且对多种I/O模型进详细分析介绍。 目录 一.I/O函数 1.1 recv和send rec…...

HarmonyOS4 页面路由
Index.ets: import router from ohos.routerclass RouterInfo {// 页面路径url: string// 页面标题title: stringconstructor(url: string, title: string) {this.url urlthis.title title} }Entry // 入口組件 Component struct Index {State message: string 页面列表// …...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...