101 lines
2.6 KiB
Plaintext
101 lines
2.6 KiB
Plaintext
//******************************************************************************
|
|
//
|
|
// 版权所有: 玉溪时光科技有限公司
|
|
// 联系邮箱: q.100@qq.com
|
|
// 开发日期: 2023/08/08
|
|
//
|
|
//******************************************************************************
|
|
|
|
global proc SGBlendShapeFindFlipTarget (int $axis, int $targetIdsA[], int $targetIdsB[], string $blendShape){
|
|
|
|
if(!`objExists $blendShape`)
|
|
{
|
|
warning -n ("No Exists BlendShape:" + $blendShape);
|
|
return;
|
|
}
|
|
|
|
if(size($targetIdsA) != size($targetIdsB))
|
|
{
|
|
warning -n ("Unequal Mirror Targets...");
|
|
return;
|
|
}
|
|
|
|
int $originalSymmetry = `symmetricModelling -q -s`;
|
|
string $symmetrySpace, $symmetryAxis;
|
|
if ($originalSymmetry)
|
|
{
|
|
$symmetrySpace = `symmetricModelling -q -about`;
|
|
if ($symmetrySpace == "topo")
|
|
$symmetryAxis = blendShapeGetTopoSymmetryEdge();
|
|
else
|
|
$symmetryAxis = `symmetricModelling -q -axis`;
|
|
}
|
|
|
|
for ($i=0;$i<size($targetIdsA);$i++)
|
|
{
|
|
int $targetA = $targetIdsA[$i];
|
|
int $targetB = $targetIdsB[$i];
|
|
|
|
int $exist = 0;
|
|
string $targetName = $blendShape + ".weight[" + $targetA + "]";
|
|
$targetName = `aliasAttr -q $targetName`;
|
|
if(`objExists $targetName`) {
|
|
$exist = 1;
|
|
rename $targetName ($targetName+"_temp");
|
|
}
|
|
|
|
string $targetMeshA[] = `sculptTarget -e -regenerate true -target $targetA $blendShape`;
|
|
string $targetMeshShapeA[] = `listRelatives -s $targetMeshA[0]`;
|
|
|
|
disconnectAttr ($targetMeshShapeA[0]+".worldMesh[0]") ($blendShape+".inputTarget[0].inputTargetGroup["+$targetA+"].inputTargetItem[6000].inputGeomTarget");
|
|
connectAttr -f ($targetMeshShapeA[0]+".worldMesh[0]") ($blendShape+".inputTarget[0].inputTargetGroup["+$targetB+"].inputTargetItem[6000].inputGeomTarget");
|
|
|
|
delete $targetMeshA;
|
|
|
|
if($exist){
|
|
rename ($targetName+"_temp") $targetName;
|
|
}
|
|
}
|
|
|
|
int $geometryIndices[] = `blendShape -q -gi $blendShape`;
|
|
|
|
string $cmd;
|
|
|
|
for($geometry in $geometryIndices)
|
|
{
|
|
$cmd += "blendShape -e ";
|
|
for($targetId in $targetIdsB)
|
|
{
|
|
$cmd += "-ft " + $geometry + " " + $targetId + " ";
|
|
}
|
|
|
|
if ($axis == 4)
|
|
{
|
|
$cmd += "-ss 0 ";
|
|
}
|
|
else
|
|
{
|
|
$cmd += "-ss 1 ";
|
|
if ($axis == 1)
|
|
$cmd += "-sa x ";
|
|
else if ($axis == 2)
|
|
$cmd += "-sa y ";
|
|
else if ($axis == 3)
|
|
$cmd += "-sa z ";
|
|
}
|
|
$cmd += $blendShape + "; ";
|
|
}
|
|
|
|
if (!$originalSymmetry || size($symmetryAxis) == 0)
|
|
$cmd += "eval -ue 0 \"symmetricModelling -s 0\";";
|
|
else if ($symmetrySpace == "topo")
|
|
$cmd += "eval -ue 0 \"symmetricModelling -e -about " + $symmetrySpace + " -s 1 " + $symmetryAxis + "\";";
|
|
else
|
|
$cmd += "eval -ue 0 \"symmetricModelling -e -about " + $symmetrySpace + " -axis " + $symmetryAxis + " -s 1\";";
|
|
|
|
//print $cmd;
|
|
eval($cmd);
|
|
|
|
}
|
|
|