//****************************************************************************** // // 版权所有: 玉溪时光科技有限公司 // 联系邮箱: q.100@qq.com // 开发日期: 2024/09/16 // //****************************************************************************** global proc SGDelBlendShape (int $meshIndex, int $inTgtGrp){ string $bsn = `SGGetMeshes -i $meshIndex` + "_blendShapes"; if(!`objExists $bsn`){ return; } string $attr; // Skip if the target group to be deleted are locked $attr = $bsn + ".weight[" + $inTgtGrp + "]"; if(`getAttr -l $attr`) { warning ("There is no such attribute:" + $attr) ; return ; } //Remove combination shape if there is any $source = eval("connectionInfo -sourceFromDestination \""+$bsn+".w["+$inTgtGrp+"]\""); $sourceStrings = stringToStringArray($source, "."); if(size($sourceStrings) == 2) { if(nodeType($sourceStrings[0]) == "combinationShape") delete $sourceStrings[0]; } // Remember the next target of this target. // This must be done before removing the weight, since it will cause // itself removed from the midLayer. $attr = $bsn + ".parentDirectory[" + $inTgtGrp + "]"; int $parentDirectory = `getAttr $attr`; if ($parentDirectory > 0) { $attr = $bsn + ".targetDirectory[" + $parentDirectory + "].childIndices"; int $childIndices[] = `getAttr $attr`; int $location = intArrayFind($inTgtGrp, 0, $childIndices); if ( $location != -1 && $location + 1 < size($childIndices) ) { $attr = $bsn + ".nextTarget[" + $inTgtGrp + "]"; setAttr $attr $childIndices[$location + 1]; } } // Remove the element in the weight array. This has to happen first. $attr = $bsn + ".weight[" + $inTgtGrp + "]"; removeMultiInstance -b true $attr; $attr = $bsn + ".parentDirectory[" + $inTgtGrp + "]"; removeMultiInstance -b true $attr; $attr = $bsn + ".nextTarget[" + $inTgtGrp + "]"; removeMultiInstance -b true $attr; $attr = $bsn + ".targetVisibility[" + $inTgtGrp + "]"; removeMultiInstance -b true $attr; $attr = $bsn + ".targetParentVisibility[" + $inTgtGrp + "]"; removeMultiInstance -b true $attr; $attr = $bsn + ".inputTarget"; int $nbInTgt = `getAttr -size $attr`; int $inTgtIndices[] = `getAttr -multiIndices $attr`; int $needsReset = 0; for( $i = 0; $i < $nbInTgt; $i++ ) { int $index = $inTgtIndices[$i]; string $targetIndex = $bsn + ".inputTarget[" + $index + "].sculptTargetIndex"; if( `getAttr $targetIndex` == $inTgtGrp ) $needsReset = 1; } // we will deleted the target group that is being sculpted on if( $needsReset == 1 ) { sculptTarget -e -target -1 $bsn; } for( $i = 0; $i < $nbInTgt; $i++ ) { int $index = $inTgtIndices[$i]; // remove each input target item within the group // we have to do this first before deleting the inputTargetGroup // otherwise on undo, the inputTargetItems aren't restored for some reason. $attr = $bsn + ".inputTarget[" + $index + "].inputTargetGroup[" + $inTgtGrp + "].inputTargetItem"; int $nbInItems = `getAttr -size $attr`; int $inItemIndices[] = `getAttr -multiIndices $attr`; for( $j = 0; $j < $nbInItems; $j++ ) { blendShapeDeleteInBetweenTarget($bsn, $inTgtGrp, $inItemIndices[$j]); } // remove each target weights within the group // we have to do this first before deleting the inputTargetGroup // otherwise on undo, the targetWeights aren't restored for some reason. $attr = $bsn + ".inputTarget[" + $index + "].inputTargetGroup[" + $inTgtGrp + "].targetWeights"; removeMultiInstance -b true -all true $attr; // remove the entire target group $attr = $bsn + ".inputTarget[" + $index + "].inputTargetGroup[" + $inTgtGrp + "]"; removeMultiInstance -b true $attr; } //Remove alias if there is one $attr = $bsn + ".weight[" + $inTgtGrp + "]"; string $alias = `aliasAttr -q $attr`; if($alias != "") { $attr = $bsn + "." + $alias; aliasAttr -rm $attr; } }