MEL脚本求助:PolySeparate分离多边形时避免创建父组
解决MEL脚本中多边形分离不创建父组的问题
你遇到的polySeparate报错,核心原因是命令需要明确指定单个多边形对象(或同一对象的面),直接依赖选中对象但未做有效性校验时,就会触发参数错误。下面是修正后的脚本,既能避免报错,又能实现分离后不生成父组的需求:
// 获取选中的有效多边形网格对象 string $selected[] = `ls -selection -type "mesh" -long`; if (size($selected) == 0) { error "请先选中一个多边形对象或其面"; } // 提取目标对象(选中面时会自动关联到所属网格) string $targetObj = $selected[0]; // 执行分离:-s 0 生成独立对象,-ch 1 保留历史 string $separatedObjs[] = `polySeparate -s 0 -ch 1 $targetObj`; // 将所有分离后的对象移到世界空间(彻底脱离父组) parent -world $separatedObjs; // 清理场景冗余元素 source cleanUpScene; deleteEmptyGroups; deleteUnusedSets;
关键细节说明:
- 用
ls -selection -type "mesh"过滤选中内容,确保只处理多边形网格节点,避免选中其他类型元素导致报错;如果选的是面,ls会自动返回所属的网格对象,刚好满足polySeparate的参数要求。 - 执行
polySeparate时明确传入目标对象$targetObj,从根源解决"Invalid selection"的报错问题。 - 分离后通过
parent -world $separatedObjs将所有新生成的对象直接挂载到世界空间,完全避免父组的产生。 - 最后调用清理命令移除空组和无用集合,保持场景整洁。
如果你的需求是分离选中的面而非整个对象,只需确保选中的是同一多边形对象的面,上述脚本同样适用——polySeparate会自动将选中面分离为独立对象。
内容的提问来源于stack exchange,提问作者Aleksei Gorokhov
相关产品推荐
相关产品推荐

