Houdini 节点参数读取输入节点的数据列表

今天做了一个在点级别的smooth工具,因为houdini默认的smooth是基于primitive的。工具能够根据输入节点的点组(point groups)或者特定的点属性(attributes)来smooth特定范围的点,这里讲一讲制作过程中一个很值得在意的细节问题,那就是读取输入节点的特定属性列表,这里讲的就是point group list和attribute list。

这个问题相当于用自己的方法实现很多节点里面的选择点组或者面组的功能,这个问题大家也许觉得非常简单,不就是从子节点上拽一个选组的参数到父节点上就可以了。但是换个角度来思考Houdini它自己是怎样实现下拉列表选择组的呢。

其实Python模块里面已经给我们准备好了非常全面的方法调用想要的数据列表,而且清楚的告诉了我们该方法会返回什么,比如点的属性列表:

如果善于查询Houdini帮助文档的话,不难发现point, vertex, primitive下的属性都可以查到,组也是类似。这样调用输入节点数据列表的方法就找到了,接下来在string参数的menu->menu script写上能用的python代码就好了:

比如需要读取输入节点的点属性列表:

list = []

self = hou.pwd()
input = self.inputs()[0]

attributs = input.geometry().pointAttribs()

for attrib in attributs:
    attribName = attrib.name()
    if attribName != "Pw":
        list.append(attribName)
        list.append(attribName)

return list

读取输入节点的点组列表:

list = []

self = hou.pwd()
input = self.inputs()[0]

ptGroups = input.geometry().pointGroups()

for group in ptGroups:
    list.append(group.name())
    list.append(group.name())

return list

还有一个细节也在这提一下,怕自己以后也忘记了:

如果需要节点上的A参数的数据和B参数的变化实施更新,比如B参数是点属性值Cd,A要求反馈B参数中Cd的size,这种情况下,比较靠谱的方法是PythonModule下面写上更新方法,并在A参数的CallBack Script中用kwargs[‘node‘].hdaModule().调用方法() 者hou.pwd().hdaModule().调用方法()来调用更新函数。

时间: 2024-10-21 02:05:59

Houdini 节点参数读取输入节点的数据列表的相关文章

数据库的应用——直接从内存中读取osg节点 (转)

数据库的应用——直接从内存中读取osg节点 目的:要从数据库中读取节点数据到osg. 一开始的方法是这样的,每当我要添加一个数据库中的节点数据时,首先把它读取到内存中,然后写入一个文件,最后再次从文件中用osg的osgDB::readNodeFile()读取,这个方法是可行的,但是却很糟糕.我的初衷是不要经过文件转换. 现在问题解决了,多亏了osg::ReaderWriter提供一个虚函数: virtual ReadResult  readNode (std::istream &, const

读取数量不定的数据输入

//学习读取数量不定的数据输入#include<iostream>using namespace std; int main(){ int sum=0,value=0; while(cin>>value) //边读取边计算. { sum+=value; cout<<"sum is "<<sum<<endl; } return 0;} 令去掉大括弧{}:结果完全不同 while(cin>>value) //读取结束,

java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = DocumentHelper.parseText(xmlStr); // XML转字符串 Document document = ...; String text = document.asXML(); //这里的XML DOCUMENT为org.dom4j.Document 二.读取XML文档节点: pack

用Houdini实现substance的warp节点

看同事在substance演示warp节点感觉比较牛逼,推了下方程: SDF图: 变形的图: 结果: Houdini里实现,第一步实现二维的gradient(sdf),形成二维的梯度场,因为一定要在uv空间操作,所以得在sop映射个uv. 把求出来的梯度放到N属性上.为了方便的观看向量.节点网络: <1> grad节点是求二维的sdf的梯度 这里面的map 用的上面的sdf贴图. // sample sdf texture float f_tex(string map;float u;floa

学习笔记(二)Eclipse设置 Servlet配置及初始化参数读取 及Servlet应用

1. 使用 JavaEE 版的 Eclipse 开发动态的 WEB 工程(JavaWEB 项目)1). 把开发选项切换到 JavaEE2). 可以在 Window -> Show View 中找到 Package Explorer, 并把其拖拽到开发区的左边3). 在 Servers 面板中新建 Tomcat 服务器. 一定要关联到 Tomcat 安装的根目录4). 新建一个 Dynamic Web Project. 其中 Target Runtime 需选择 Tomcat6.0 5). 开发

HDFS读文件过程分析:读取文件的Block数据

转自http://shiyanjun.cn/archives/962.html 我们可以从java.io.InputStream类中看到,抽象出一个read方法,用来读取已经打开的InputStream实例中的字节,每次调用read方法,会读取一个字节数据,该方法抽象定义,如下所示:public abstract int read() throws IOException;Hadoop的DFSClient.DFSInputStream类实现了该抽象逻辑,如果我们清楚了如何从HDFS中读取一个文件

多次读取请求request里数据

如果请求是GET方法,可以直接通过getParameter(String param)方法读取指定参数,可读取多次: 而POST方法的参数是存储在输入流中,只能读一次,不能多次读取. 有时需要在filter里打印请求参数,因而在filter里读取post请求里的输入流后,会导致具体的controller里拿不到请求参数. 解决方法: 采用ThreadLocal,在filter里把读取到的post参数存入ThreadLocal里,而controller就可以再从ThreadLocal里把请求参数读

文件读取输入

在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1.基于C的文件操作: 2.基于C++的文件操作: 3.基于WINAPI的文件操作: 4.基于BCB库的文件操作: 5.特殊文件的操作. 壹.基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:

Zookeeper并不保证读取的是最新数据

Zookeeper并不保证读取的是最新数据 原文地址:http://www.crazyant.net/2120.html 如果是对zk进行读取操作,读取到的数据可能是过期的旧数据,不是最新的数据. 已上图为例,如果一个zk集群有10000台节点,当进行写入的时候,如果已经有6K个节点写入成功,zk就认为本次写请求成功.但是这时候如果一个客户端读取的刚好是另外4K个节点的数据,那么读取到的就是旧的过期数据. 在zk的官方文档中对此有解释,地址在:https://zookeeper.apache.o