需求

节点的参数影响了节点的行为。因此对于节点使用者来说,比较节点间参数的差异就可以明白其行为的差异了。

然而有些节点的参数数量实在太多,比较其参数间的差异会比较麻烦,在没有工具的情况下只能来回在节点间跳转才能比较出参数的不同。

我想,其实可以使用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里节点间参数的差别相关推荐

  1. matlab里的svmtrain的输出model里,各参数的含义

    * optimization finished, #iter = 162 nu = 0.431029 obj = -100.877288, rho = 0.424462 nSV = 132, nBSV ...

  2. 【移动端debug-6】如何做一个App里的web调试小工具

    原文链接:如何做一个App里的web调试小工具 我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的.相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌 ...

  3. 从java进程里dump出类的class文件的小工具--dumpclass

    Serviceability Agent 想要查看一些被增强过的类的字节码,或者一些AOP框架的生成类,就需要dump出运行时的java进程里的字节码. 从运行的java进程里dump出运行中的类的c ...

  4. py获取前端的参数_Python小工具系列(3)之参数检查

    #Python小工具系列# python 这是Python小工具系列第三篇,以往分别有 1.Python小工具系列(1)之file_cache 2.Python小工具系列(2)之Test_all 这次 ...

  5. 小工具——寻找节点的一二三阶邻居

    日常小工具,本人代码水平一般,只是存在这里当笔记.若正好有小伙伴用到,希望能帮助到你,如若有错误之处,欢迎批评指正. 输入:图以及图中一个节点 输出:该节点在图中的一阶,二阶,三阶邻居 import ...

  6. 分享几个可以放在博客里的小工具

    刚加入博客园的时候,拜读了LloydSheng的随笔<玩转博客园的5个小技巧>,收获不小,其中的几个技巧我也用到了自己的博客里,很感谢LloydSheng的分享精神. 经常去访问博客园其他 ...

  7. Windows:利用各种小工具查看自己电脑上的CPUGPU型号、个数、详细参数等不同方法的详细攻略

    Windows:利用各种小工具查看自己电脑上的CPU&GPU型号.个数.详细参数等不同方法的详细攻略 导读 本文章以Windows10系统为例,利用各种小工具查看自己电脑上的CPU&G ...

  8. delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...

    最科幻的企业微信群机器人管理工具 非常方便的发布群即时消息和定时消息,解放双手,提升沟通效率 部署教程 更新日志(2020.05.31) 修复设置为智能跳过工作日时,周日依然提醒问题. 前端修复定时成 ...

  9. 如何在计算机桌面上添加小工具,怎么在电脑的桌面小工具里添加便签

    原标题:怎么在电脑的桌面小工具里添加便签 用便签小工具记事,是很多用电脑用户的常规操作.有的人找不到电脑便签,打开电脑开始菜单栏一看,记事工具居然只有记事本. 用记事本很多人不愿意,毕竟记事本比较适合 ...

  10. 计算机桌面没有有了怎么添加,电脑里没有便签小工具怎么办?办公电脑上怎么添加一款方便记事的桌面便签软件...

    原标题:电脑里没有便签小工具怎么办?办公电脑上怎么添加一款方便记事的桌面便签软件 随着时代的发展,微软操作系统也在不断地完善和发展.这不,Win7及其以上版本的电脑上就增添了便签小工具.点击电脑左下角 ...

最新文章

  1. 转:【小作品】STM32无线WIFI视频小车制作剖析(下)
  2. 杭电oj1384--Intervals(差分约束)
  3. Autocomplete 自动补全(Webform实战篇)
  4. 6月Python热文Top10,精选自1000篇文章
  5. 初中教师资格证计算机试讲教案模板,初中数学教师资格证面试教案模板: 《投影》...
  6. python 华泰证券 客户端_华泰证券网上交易系统(高级版)下载 v8.13官方版下载
  7. 无法连接iphone软件更新服务器_苹果发布了iphone、ipad和mac的新软件更新
  8. linux安装qq_Windows和Linux的比较
  9. 《HBase企业应用开发实战》—— 3.6 本章小结
  10. 使用数据库镜像保障高可用的数据库应用(下)
  11. JS常用函数(方法)
  12. Android Studio的单元测试
  13. python网格搜索优化参数_Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据...
  14. 2019新版《龙果学院Elasticsearch顶尖高手系列(高手进阶篇教程)》
  15. 计算机开机时间设置方法,win10系统设置电脑开关机时间的技巧介绍
  16. android的补间动画一共包含,Android的四种补间动画
  17. Acwing-4454. 未初始化警告
  18. Linux双独立显卡SLI,完美的解决方案:双显卡不需要使用双水冷Tt提供SLi冷却解决方案...
  19. 你不知道的雍正八年版《连平州志》
  20. 如何在微信内置浏览器中开启开发者模式(f12)

热门文章

  1. 解读加多宝的营销案例分析 1
  2. BI如何实现用户身份集成自定义安全程序开发
  3. Arcgis Engine 切割图斑(ITool)
  4. 【CSDN软件工程师能力认证学习精选】SQL语句查询
  5. 得知大熊哥最后一天在岗位工作今天离开有感而发
  6. 网页调起支付宝付款和微信付款
  7. mysql:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)解决方法
  8. 蓝桥杯五4史丰收速算
  9. Matlab 乱码问题解决方法
  10. 好记性不如烂笔头之linux的vim命令速看