MItSelectionList::setFilter()和MItSelectionList::reset()

今晚写代码中出现了一个问题,记录下来。

 

首先是所参照的没问题的代码:

 

 

当选择uv后if之间的代码块没问题的执行,

 

而几乎照搬的代码:

却根本不能迭代,调试过程发现,只有选择mesh才能迭代,但是当然的过不了if…… 我就郁闷啊。几乎一模一样的代码了,可电脑就是和我做对呢。

 

后来突然想难道是iter.reset()的问题?查了一下doc:


MStatus MItSelectionList::setFilter  ( MFn::Type  filter   )   

 

Apply a filter to the iteration. Selection items not matching the filter type will be excluded from the iteration.

 

 

 

MStatus MItSelectionList::reset  (   )   

 

Reset the iterator. If a filter has been specified then the current item will be the first selected item that matches the filter.

 

 

以前的理解一直是setFilter之后iter要迭代的序列会自动过滤掉非法的元素了,原来不是这样的,setFilter只是严格对比元素的apiType和指定的类型,不匹配的就标记为invalid,但是元素还是会迭代的,除非经过reset。

reset所做的不仅是将指针归位,还有就是去掉invalid的元素。

 

这样看来devkit里的代码其实是有问题的,虽然结果正确。setFilter之后不得不手动的验证排除,事实上只要setFilter正确然后reset,api会自动排除。

 

这个问题可能太弱智吧,本人菜鸟一只,如有错误欢迎指正。

 

还有就是mesh节点只能存储顶点的tweak,不能存uv的修改信息,如果一个mesh节点有历史,对uv的直接操作只能保存到节点中,如果直接对节点操作,一旦重新evaluate之后就浮云了。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值