虽然这篇文章是讲PCOPEN,但是17.5以后fuse SOP绝大多数时候都可以取代用vex写点云搜索,所以
用VEX写点云这个速度极慢的算法前,请先想想fuse SOP能不能做
众所周知,pcopen()(用handle的方法)比别的直接取ptnum的方法快,例如:nearpoints(),pccone(),pcfind()
原理上pgfind()也很快(根据文档),但是实际测试我测试是慢上百倍,甚至崩溃的
但问题是写起来特别累,我因为强迫症,每次用点云都写pcopen,写了几百遍,总结抽象出了FeE Point Cloud Open Wrangle SOP,现在很好写啦
类似的还有FeE Meta Wrangle SOP,不过这个懒得写文了,提一下
建议先学会做下面这个在做本文这个
五行精灵:用houdini生成参数方程图形的通用方案zhuanlan.zhihu.com核心也是一个attrib wrangle SOP解决,所以接下来讲这个的思路
为了之后暴露代码为参数,首先当然别忘了改这个
![f94891c0691a3b8bfc2d580adf0f90b2.png](https://i-blog.csdnimg.cn/blog_migrate/99d72daa497a1e6c854a6c97699d3502.png)
首先我们先写好pcopen()本体(核心)
![91ecd1e2a056f9d9852699eeb75e6302.png](https://i-blog.csdnimg.cn/blog_migrate/1af025f3497975a1cb0e262c7ef6a619.png)
然后暴露参数
![851bda9c077e080ac6177132c080c08f.png](https://i-blog.csdnimg.cn/blog_migrate/94ebb5c8daf9da3532875acca38a252a.png)
首先当时要可以决定runover opinput0还是runover opinput1
以及runover 哪个class
然后根据帮助文档,不能用int决定opinput,得用string,否则不能使用高级的参数
所以内部代码一开始:
创建好searchsourceop和searchtargetop
![1eed1f01e5824895256f12fec684ecac.png](https://i-blog.csdnimg.cn/blog_migrate/9f3a5c2b4bc5b179eac07f99765e09ae.jpeg)
然后将上面定义的参数统统传入pcopen
![37ceb4392d5b27df1203950ca2b1efcd.png](https://i-blog.csdnimg.cn/blog_migrate/e0b2907c0f6611d0363dd9637e9ec00a.jpeg)
这里出现了分歧,是否influenced by N,其实就是pccone()和pcfind()的区别
然后开始pciterate()
有经验就知道bypass_equal_elemnum是啥意思
![e9d950e80fea55987c549dba850c3617.png](https://i-blog.csdnimg.cn/blog_migrate/d6faabd961f9c3ad45508bcc671a0131.png)
最后把pcopen整个流程可能会添加代码的部分暴露为参数即可
![523f6a38cf363f68a38d32767905e9c2.png](https://i-blog.csdnimg.cn/blog_migrate/6c6040fe97c1d7788a5ff2e18843c333.jpeg)
关于run over opinput1的参数设定方面,有写过类似的经验就会知道要用run over number(所以说不是给新手看的啦),不过这里比一般的要复杂一些,所以要注意一下
![b4d664316b21191a5d5a9aa2b5ebf8a1.png](https://i-blog.csdnimg.cn/blog_migrate/42b78206d86a90080949ff6e71fe6616.jpeg)