小工具:输出Houdini里节点间参数的差别
需求
节点的参数影响了节点的行为。因此对于节点使用者来说,比较节点间参数的差异就可以明白其行为的差异了。
然而有些节点的参数数量实在太多,比较其参数间的差异会比较麻烦,在没有工具的情况下只能来回在节点间跳转才能比较出参数的不同。
我想,其实可以使用Houdini的Python模块写代码来自动比较并输出不同,这并不麻烦。最后如果能输出更易于阅读的格式(比如csv表格,或Markdown表格语法)会让比较更高效。
另外,我还假定了被比较的节点的类型都是一样的,因此这让代码更为简单——只需要按顺序访问参数就行了,因为参数的顺序一定是一样的。
比较两个节点参数差别
仅对比两个节点的代码是很简单的。
比如我放了两个box节点,并将缩放参数调整得不一样。
#两个对比的节点:
node1 = hou.node("../box1");
node2 = hou.node("../box2");#节点的参数个数
parmCount = len(node1.parms());#遍历所有参数寻找其中不同的值
for i in range(parmCount) :if(node1.parms()[i].eval() != node2.parms()[i].eval()):message = "";message += node1.parms()[i].description()message += " " + str(node1.parms()[i].eval()) + " " + str(node2.parms()[i].eval())print(message)
则输出:
Uniform Scale 1.0 3.11
多节点比较
当考虑多节点时,就以第0个为参照,其他节点都和它比较,只要有一个节点不一样,就输出这个参数所有节点的值。
比如我放了三个box节点,第二三个各有一个参数和第一个不一样。
#要对比的节点们:(以第0个为参照)
nodes = [];
nodes.append(hou.node("../box1"));
nodes.append(hou.node("../box2"));
nodes.append(hou.node("../box3"));#节点的参数个数
parmCount = len(nodes[0].parms());#遍历所有参数寻找其中不同的值
for i in range(parmCount) :allsame = True; #参数是否都一样message = ""; #信息,仅在有参数不同时才予以显示message += nodes[0].parms()[i].description() #参数名message += " " + str(nodes[0].parms()[i].eval()) #参照节点的参数值for j in range(len(nodes)-1):#参数不同,写上值if(nodes[j+1].parms()[i].eval() != nodes[0].parms()[i].eval()): allsame = False;message += " " + str(nodes[j+1].parms()[i].eval())#参数相同:省略值else:message += " -"if not allsame : #仅在有参数不同时输出信息print(message)
输出:
Size 1.0 - 1.9
Uniform Scale 1.0 3.11 -
输出MarkDown表格语法
MarkDown表格语法也是在CSDN博客中可以使用的。
比如
| Syntax | Description |
| - | - |
| Header | Title |
| Paragraph | Text |
在博客中将会变为:
Syntax | Description |
---|---|
Header | Title |
Paragraph | Text |
另外,当前的menu型参数会直接输出数字,可读性较差。
hou模块有接口读到menu:
当失败时会有异常。可以根据此判断是否是menu。
因此,最终代码修改为:
#要对比的节点们:(以第0个为参照)
nodes = [];
nodes.append(hou.node("../box1"));
nodes.append(hou.node("../box2"));
nodes.append(hou.node("../box3"));#MarkDown表格前两行:
line1 = "| - | "
line2 = "| - | "
for n in range(len(nodes)):line1 += nodes[n].name() +" |"line2 += "- |"
print(line1)
print(line2)#节点的参数个数
parmCount = len(nodes[0].parms());#获得参数的值,如果是menu则会输出menu的值
def GetParmMessage(p):try:p.menuLabels()except hou.OperationFailed:return str(p.eval())else:if(isinstance(p.eval(),int)):return p.menuLabels()[p.eval()]else:return str(p.eval());#遍历所有参数寻找其中不同的值
for i in range(parmCount) :allsame = True; #参数是否都一样message = "| "; #信息,仅在有参数不同时才予以显示message += nodes[0].parms()[i].description() #参数名message += " | " + GetParmMessage(nodes[0].parms()[i]) + " |" #参照节点的参数值for j in range(len(nodes)-1):#参数不同,写上值if(nodes[j+1].parms()[i].eval() != nodes[0].parms()[i].eval()): allsame = False;message += " " + GetParmMessage(nodes[j+1].parms()[i])+ " |"#参数相同:省略值else:message += " - |"if not allsame : #仅在有参数不同时输出信息print(message)
将box节点的一个menu型参数修改下。
输出:
| - | box1 |box2 |box3 |
| - | - |- |- |
| Primitive Type | Polygon | - | NURBS |
| Size | 1.0 | - | 1.9 |
| Uniform Scale | 1.0 | 3.11 | - |
将这段直接复制到博客中就会变成:
- | box1 | box2 | box3 |
---|---|---|---|
Primitive Type | Polygon | - | NURBS |
Size | 1.0 | - | 1.9 |
Uniform Scale | 1.0 | 3.11 | - |
在一个复杂的例子中尝试
Downloadable fabrics是Houdini官方关于Vellum布料模拟的一些展示性效果
工程文件可在这里下载。
我建立了一个默认的Vellum布料配置,然后尝试将其与当前的八个布料配置进行比较
#要对比的节点们:(以第0个为参照)
nodes = [];
nodes.append(hou.node("../default"));
nodes.append(hou.node("../vellumcloth6"));#Jersey
nodes.append(hou.node("../vellumcloth3"));#RainCoat
nodes.append(hou.node("../vellumcloth11"));#tulle with embroidery
nodes.append(hou.node("../vellumcloth15"));#Jeans
nodes.append(hou.node("../vellumcloth9"));#Velvet
nodes.append(hou.node("../vellumcloth8"));#Silk
nodes.append(hou.node("../vellumcloth_wool"));#Wool
nodes.append(hou.node("../vellumcloth10"));#Leather...
结果如下:
- | default | vellumcloth6 | vellumcloth3 | vellumcloth11 | vellumcloth15 | vellumcloth9 | vellumcloth8 | vellumcloth_wool | vellumcloth10 |
---|---|---|---|---|---|---|---|---|---|
Density | 0.1 | 0.04 | 0.25 | 0.04 | 0.4 | 0.02 | 0.04 | 0.04 | 0.4 |
Thickness | Calculate Uniform | Calculate Varying | Calculate Varying | Calculate Varying | - | Calculate Varying | Calculate Varying | Calculate Varying | - |
Edge Length Scale | 0.25 | - | - | - | - | - | 0.2 | - | - |
Normal Drag | 10.0 | 40.0 | - | 80.0 | - | 40.0 | 80.0 | 80.0 | - |
Tangent Drag | 0.1 | 0.4 | 1.0 | 0.4 | 5.0 | 40.0 | 0.8 | 0.4 | 2.0 |
Stiffness | 1.0 | - | - | - | 100000000.0 | - | - | - | 100000000.0 |
Damping Ratio | 0.001 | - | - | - | 0.0001 | - | - | - | 0.0001 |
Stiffness | 1.0 | 0.15 | - | - | - | 2.0 | - | - | 2000.0 |
× | 1e-7 | 0.000 01 | 1 | 1 | 10 000 | 0.000 1 | 0.000 1 | - | 1 |
bendstiffnessscalemode | No Scaling | - | - | Scale by Attribute | - | - | - | - | - |
Damping Ratio | 0.01 | - | 0.0075 | - | - | - | 0.1 | - | - |
Rest Angle Scale | 1.0 | - | 2.0 | 2.0 | - | - | - | - | - |
dobendstiffnessfalloff | 0 | - | 1 | - | - | - | - | - | - |
Stiffness Dropoff | 0.0 | 85.0 | 48.0 | 85.0 | 55.0 | 85.0 | 70.0 | 85.0 | 55.0 |
bendstiffnessfalloffdir | Increasing | Decreasing | Decreasing | Decreasing | - | Decreasing | Decreasing | Decreasing | - |
dobendstiffnessdropoffmin | 0 | - | 1 | - | 1 | - | - | - | - |
Min Stiffness | 0.0 | - | 5e-06 | - | 0.0001 | - | - | - | - |
Enable Plasticity | 0 | 1 | 1 | - | 1 | 1 | - | 1 | 1 |
Threshold | 10.0 | 0.1 | 15.0 | - | 35.0 | 1.0 | - | 0.005 | 3.0 |
Rate | 1.0 | 0.25 | 0.3 | - | 5.0 | 2.0 | - | - | 6.0 |
Hardening | 1.0 | 0.3 | - | - | 5.0 | 2.0 | - | - | 0.5 |
Promotion Method | Average | - | - | - | Use Target | - | - | - | Use Target |
Tag | default | vellumcloth6 | vellumcloth3 | vellumcloth11 | vellumcloth15 | vellumcloth9 | vellumcloth8 | vellumcloth_wool | vellumcloth10 |
通过这个列表,就可以知道哪些参数有改变,即我需要关注哪些参数了。
问题记录:
运行python脚本的时候会有报错:
这个问题我在Python 排错UnicodeEncodeError ‘ascii’ codec can’t encode character 错误解决方法 - 授客 - 博客园找到了解决方法,即先运行这段代码:
import sysreload(sys)sys.setdefaultencoding('utf8')
之后就没有报错了
小工具:输出Houdini里节点间参数的差别相关推荐
- matlab里的svmtrain的输出model里,各参数的含义
* optimization finished, #iter = 162 nu = 0.431029 obj = -100.877288, rho = 0.424462 nSV = 132, nBSV ...
- 【移动端debug-6】如何做一个App里的web调试小工具
原文链接:如何做一个App里的web调试小工具 我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的.相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌 ...
- 从java进程里dump出类的class文件的小工具--dumpclass
Serviceability Agent 想要查看一些被增强过的类的字节码,或者一些AOP框架的生成类,就需要dump出运行时的java进程里的字节码. 从运行的java进程里dump出运行中的类的c ...
- py获取前端的参数_Python小工具系列(3)之参数检查
#Python小工具系列# python 这是Python小工具系列第三篇,以往分别有 1.Python小工具系列(1)之file_cache 2.Python小工具系列(2)之Test_all 这次 ...
- 小工具——寻找节点的一二三阶邻居
日常小工具,本人代码水平一般,只是存在这里当笔记.若正好有小伙伴用到,希望能帮助到你,如若有错误之处,欢迎批评指正. 输入:图以及图中一个节点 输出:该节点在图中的一阶,二阶,三阶邻居 import ...
- 分享几个可以放在博客里的小工具
刚加入博客园的时候,拜读了LloydSheng的随笔<玩转博客园的5个小技巧>,收获不小,其中的几个技巧我也用到了自己的博客里,很感谢LloydSheng的分享精神. 经常去访问博客园其他 ...
- Windows:利用各种小工具查看自己电脑上的CPUGPU型号、个数、详细参数等不同方法的详细攻略
Windows:利用各种小工具查看自己电脑上的CPU&GPU型号.个数.详细参数等不同方法的详细攻略 导读 本文章以Windows10系统为例,利用各种小工具查看自己电脑上的CPU&G ...
- delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...
最科幻的企业微信群机器人管理工具 非常方便的发布群即时消息和定时消息,解放双手,提升沟通效率 部署教程 更新日志(2020.05.31) 修复设置为智能跳过工作日时,周日依然提醒问题. 前端修复定时成 ...
- 如何在计算机桌面上添加小工具,怎么在电脑的桌面小工具里添加便签
原标题:怎么在电脑的桌面小工具里添加便签 用便签小工具记事,是很多用电脑用户的常规操作.有的人找不到电脑便签,打开电脑开始菜单栏一看,记事工具居然只有记事本. 用记事本很多人不愿意,毕竟记事本比较适合 ...
- 计算机桌面没有有了怎么添加,电脑里没有便签小工具怎么办?办公电脑上怎么添加一款方便记事的桌面便签软件...
原标题:电脑里没有便签小工具怎么办?办公电脑上怎么添加一款方便记事的桌面便签软件 随着时代的发展,微软操作系统也在不断地完善和发展.这不,Win7及其以上版本的电脑上就增添了便签小工具.点击电脑左下角 ...
最新文章
- 转:【小作品】STM32无线WIFI视频小车制作剖析(下)
- 杭电oj1384--Intervals(差分约束)
- Autocomplete 自动补全(Webform实战篇)
- 6月Python热文Top10,精选自1000篇文章
- 初中教师资格证计算机试讲教案模板,初中数学教师资格证面试教案模板: 《投影》...
- python 华泰证券 客户端_华泰证券网上交易系统(高级版)下载 v8.13官方版下载
- 无法连接iphone软件更新服务器_苹果发布了iphone、ipad和mac的新软件更新
- linux安装qq_Windows和Linux的比较
- 《HBase企业应用开发实战》—— 3.6 本章小结
- 使用数据库镜像保障高可用的数据库应用(下)
- JS常用函数(方法)
- Android Studio的单元测试
- python网格搜索优化参数_Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据...
- 2019新版《龙果学院Elasticsearch顶尖高手系列(高手进阶篇教程)》
- 计算机开机时间设置方法,win10系统设置电脑开关机时间的技巧介绍
- android的补间动画一共包含,Android的四种补间动画
- Acwing-4454. 未初始化警告
- Linux双独立显卡SLI,完美的解决方案:双显卡不需要使用双水冷Tt提供SLi冷却解决方案...
- 你不知道的雍正八年版《连平州志》
- 如何在微信内置浏览器中开启开发者模式(f12)
热门文章
- 解读加多宝的营销案例分析 1
- BI如何实现用户身份集成自定义安全程序开发
- Arcgis Engine 切割图斑(ITool)
- 【CSDN软件工程师能力认证学习精选】SQL语句查询
- 得知大熊哥最后一天在岗位工作今天离开有感而发
- 网页调起支付宝付款和微信付款
- mysql:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)解决方法
- 蓝桥杯五4史丰收速算
- Matlab 乱码问题解决方法
- 好记性不如烂笔头之linux的vim命令速看