Houdini的PythonScript基本使用

2024-06-02 11:04

本文主要是介绍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")

获取节点相关几何数据

这篇关于Houdini的PythonScript基本使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放