今晚写代码中出现了一个问题,记录下来。
首先是所参照的没问题的代码:
当选择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之后就浮云了。