Houdini的PythonScript基本使用

前言

Houdini内置了Python脚本和相应的编辑器, 很多时候想灵活的制作各种Houdini工具, 基本是必须用到 Python。Houdini官方的python提供了非常完善的接口, 比如可以创建各种节点,连接各种节点,遍历节点各种数据,遍历节点参数等等。

Houdini Python官方资料

Python scripting (sidefx.com)

hou.node (sidefx.com)

非常全面罗列了Houdini Python各种接口。 这篇文章主讲hou模块的基本使用

HoudiniPython编写工具

Python Shell运行控制台

方便用户做Python开发

Houdini里的各种节点和节点参数都可以直接从编辑器拖拽到Python shell里生成获取对象脚本

houdini

Python SourceEditor

相比python shell, 方便写多行python代码,结果也是输出python shell,也支持节点路径拖拽到Editor里

Houdini Python具体使用和概念介绍

节点基本类型

Houdini的节点基础类型为OpNode, 子类型分为ObjNode, SopNode, LopNode等.

这节主讲ObjNode, SopNode

hou.OpNode (sidefx.com)

hou.ObjNode (sidefx.com)

hou.SopNode (sidefx.com)

节点操作

获取节点

hou.node('/obj/geo1/null1')

获取节点类型, 节点类型名和节点名等

hou.node('/obj/geo1/null1').type()
hou.node('/obj/geo1/null1').type().name()
hou.node('/obj/geo1/null1').name()

 创建节点

hou.node('/obj/geo1').createNode("box")
hou.node('/obj/geo1').createNode('attribwrangle', "ttt")

这里传的"attribwrangle"为具体节点的类型名, 也就是node.type().name()

CD到某个节点路径下

作用等同于cmd的cd

hou.cd("/obj")
hou.node("geo1")

获取直接的子节点

hou.node('/obj').children()

节点参数

节点参数类型(hou.ParmTuple和hou.Parm)

hou.Parm指最简单参数元素,比如int, float, bool.

而多个(包含1个)hou.Parm一起组成了hou.ParmTuple, 比如float2, int2, color等等.

节点获取某个参数Parm

hou.parm('/obj/geo1/subnet1/Count')
hou.parmTuple('/obj/geo1/subnet1/Pos2')
hou.parmTuple('/obj/geo1/subnet1/Pos2')[0]

节点获取所有parm,parm_name, parmTemplate,parmTemplate的类型

hou.Parm (sidefx.com)

hou.ParmTemplate (sidefx.com)

hou.parmTemplateType (sidefx.com)

hou.node('/obj/geo1/subnet1').parms()

很显然数组实例化出来的"a1", "a2", 文件夹Fold0, 向量的单元素也成为了parm.

import hou
params = hou.node('/obj/geo1/subnet1').parms()
for parm in params:
    print(parm.name()) # 名字
    print("param is array instance: ", parm.isMultiParmInstance()) # 参数是否是数组的实例
    parm_template = parm.parmTemplate() 
    print(parm_template) # 参数模版
    print(parm_template.type()) # 参数模版类型
    print("\n")

节点获取所有parm_tuple, parmTemplate

import hou
parm_tuples = hou.node('/obj/geo1/Test1').parmTuples()
for parm_tuple in parm_tuples:
    print(parm_tuple)
    parmTemplate = parm_tuple.parmTemplate()
    
    # 筛选数组的实例
    if not parm_tuple.isMultiParmInstance():
        print(parmTemplate)
    
    # 如果此元素为数组,获取子元素模版
    if parmTemplate.type() == hou.parmTemplateType.Folder:
        print("child element template:")
        print(parmTemplate.parmTemplates())
 
    print("\n")

节点设置值和获取值

设置参数值

hou.parm('/obj/geo1/Test1/ArrayName').set(3)
hou.parm('/obj/geo1/Test1/a3').set(1)
hou.parmTuple('/obj/geo1/Test1/Color').set((6, 6, 6))
hou.parm('/obj/geo1/Test1/Button').pressButton()

获取参数值

hou.parmTuple('/obj/geo1/Test1/Color').eval()
hou.parm('/obj/geo1/Test1/a1').eval()
hou.parmTuple('/obj/geo1/Test1/Pos3')[0].eval()
hou.parm('/obj/geo1/Test1/ArrayName').eval()

同类型参数的区分

下面是典型例子,在Houdini中参数的区分不能仅仅用parmTemplateType和parmTupleSize去区分,像Color和float3很明显需要look或者naming schene等信息作为区分.

节点输入输出相关

获取输入节点,输出节点,输入输出连接信息

hou.node('/obj/geo1/Test1').outputs()
hou.node('/obj/geo1/Test1').inputs()
hou.node('/obj/geo1/Test1').inputConnections()
hou.node('/obj/geo1/Test1').outputConnections()

设置节点相连

box_node = hou.node('/obj/geo1/box1')
test_node = hou.node('/obj/geo1/Test1')
null2node = hou.node('/obj/geo1/null2')

test_node.setInput(2, box_node)
null2node.setInput(0, test_node)
null2node.createOutputNode("box", "box_test")

获取节点相关几何数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/670164.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu server 24 (linux) 安装 ClamAV 防病毒软件 配置和使用教程

一 ClamAV是一个开源的防病毒引擎,用于检测木马,病毒,恶意软件和其他 恶意威胁。 官网地址 二 安装 1 开始安装 sudo apt update sudo apt install clamav clamav-daemon #查看版本 snort$ clamscan -V ClamAV 1.0.5/27292/Fri May 31 …

11.3 冒泡排序

目录 11.3 冒泡排序 11.3.1 算法流程 11.3.2 效率优化 11.3.3 算法特性 11.3 冒泡排序 冒泡排序(bubble sort)通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。 如图 11-4 所示…

数据的表示和运算

目录 一.各进制间的相互转换 1.各进制转化为10进制 2.二进制和八进制,十六进制之间地相互转化 3.十进制转换为其他进制 二.BCD码(Binary-Coded Decimal,用二进制编码的十进制) 1.8421码 2.余3码 3.2421码 三.无符号整数 …

SpringMVC枚举类型字段处理

在日常的项目开发中经常会遇到一些取值范围固定的字段,例如性别、证件类型、会员等级等,此时我们可以利用枚举来最大程度减少字段的乱定义,统一管理枚举的值。 SpringMVC中对于枚举也有默认的处理策略: 对于RequestParam&#xf…

【用Python画画】六一儿童节画爱心

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#xf…

Redis 线程模型

Redis 线程模型 背景简介Redis 单线程客户端发起 Redis 请求命令的工作原理单线程面临的挑战及问题 Redis 多线程Redis v4.0 多线程命令Redis v6.0 多线程网络模型 总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术…

DNS设置(linux)

1.配置dns需要现在/etc/sysconfig/network-scripts/目录下的ifcfg-ens33(后面数字也可能是其他的)中配置DNS 2.编辑/etc/resolv.conf文件,将上面网卡中加的dns服务器ip添加到此文件 vi /etc/resolv.conf重启网络配置 service network restart常用的dns的ip 国内…

Flutter-自定义可展开文本控件

Flutter 在移动开发中,常常需要处理一些长文本显示的场景,如何优雅地展示这些文本并允许用户展开和收起是一个常见的需求。在本文中,我将分享如何使用Flutter实现一个可展开和收起的文本控件。 效果 我们将实现一个可展开和收起的文本控件…

JVM学习-详解类加载器(二)

双亲委派机制 双亲委派优势 避免类的重复加载,确保一个类的全局唯一性 Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层次关系可以避免类的重复加载,当父类已经加载了该类,就没有必要子ClassLoader再加载…

Three.js——tween动画、光线投射拾取、加载.obj/.mtl外部文件、使用相机控制器

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

低代码开发平台(Low-code Development Platform)的模块组成部分

低代码开发平台(Low-code Development Platform)的模块组成部分主要包括以下几个方面: 低代码开发平台的模块组成部分可以按照包含系统、模块、菜单组织操作行为等维度进行详细阐述。以下是从这些方面对平台模块组成部分的说明: …

计算机系统结构之FORK和JOIN

程序语言中用FORK语句派生并行任务,用JOIN语句对多个并发任务汇合。 FORK语句的形式为FORK m,其中m为新领程开始的标号。 JOIN语句的形式为JOIN n,其中n为并发进程的个数。 例1:给定算术表达式ZEA*B*C/DF经并行编译得到如下程序…

什么是 Redis 缓存?它解决了什么问题?怎么使用它?

前言 写在前面,让我们从 3 个问题开始今天的文章:什么是 Redis 缓存?它解决了什么问题?怎么使用它? 在笔者近 3 年的 Java 一线开发经历中,尤其是一些移动端、用户量大的互联网项目,经常会使用…

数学建模 —— 层次分析法(2)

目录 一、层次分析法(AHP) 二、构造比较判断矩阵 2.1 两两比较法 三、单准则下的排序及一致检验 3.1 单准则下的排序 3.2 一致性检验 四、层次总排序 4.1 层次总排序的步骤 4.2 总排序一致性检验 一、层次分析法(AHP) 方…

Centos 7部署NTP

介绍 NTP是Network Time Protocol(网络时间协议)的简称,它是用来通过互联网或局域网将计算机时钟同步到世界协调时间(UTC)的协议。 安装 # yum安装 yum install -y ntp# 离线安装 #下载地址:https://mir…

Caliburn.Micro框架学习笔记——多页面处理案例

在聊这个之前,我们先来看一个静态类 在 Caliburn.Micro 中,ViewLocator 是一个用于查找和关联视图与视图模型的静态类。默认情况下,它根据约定(命名约定或其他规则)自动找到与视图模型相对应的视图。然而,…

【5】MySQL数据库备份-XtraBackup - 全量备份

MySQL数据库备份-XtraBackup-全量备份 前言环境版本 安装部署下载RPM 包二进制包 安装卸载 场景分析全量备份 | 恢复备份恢复综合 增量备份 | 恢复部分备份 | 恢复 前言 关于数据库备份的一些常见术语、工具等,可见《MySQL数据库-备份》章节,当前不再重…

【普通切换】【DC-based handover】【DAPS】协议栈分析

移动网络切换 移动通信中切换是保证终端业务的基本流程,而切换时延是终端(UE)不能与任何基站交互(传递)用户面数据包的最短时间。 在5G(NR)网络中当终端(UE)接收到切换命令时,将断开与源小区的连接向目标小区发起随机接入过程。在此期间终端(UE)的数据传…

深入理解linux文件系统与日志分析12

一、inode和block 文件是存储在硬盘上,硬盘上的最小存储单位是扇区,每个扇区的大小是512字节。 inode:存储元信息(文件的属性--权限、创建者、创建日期等等) block:块 连续的八个扇区组成一个块&#xf…

rpmbuild多进程批量编译脚本

脚本用法 使用手册 bash spec.sh --help Please ensure the directory ~/rpmbuild exists, And the script can execute in any directory.Usage: bash spec.sh [OPTION]... [*.spec]... [OPTION]...or: bash spec.sh [*.spec]... [OPTION]... [*.spec]... rpmbuild all sp…