MergeFaces
From scripting
global proc float MergeFaces(string $Obj1, string $FaceNum1, string $Obj2, string $FaceNum2) { //Author Nick Pisca 0001d 2008 /*string $Obj1 = "pTorus1"; string $FaceNum1 = 12; string $Obj2 = "pTorus2"; string $FaceNum2 = 36;*/ string $CurFace1pts[] = `polyInfo -fv ($Obj1+".f["+$FaceNum1+"]")`; string $CurtD1[]; tokenizeList($CurFace1pts[0], $CurtD1); string $CurFace2pts[] = `polyInfo -fv ($Obj2+".f["+$FaceNum2+"]")`; string $CurtD2[]; tokenizeList($CurFace2pts[0], $CurtD2); vector $VecArr[3]; vector $Vec2Arr[3]; string $Vec1Str[3]; string $Vec2Str[3]; for ($s=0;$s<4;$s++) { $Vec1Str[$s] = ($Obj1+".vtx["+$CurtD1[(2+$s)]+"]"); float $CurCornerPt[2] = `pointPosition ($Vec1Str[$s])`; vector $CurCornerVec = <<$CurCornerPt[0],$CurCornerPt[1],$CurCornerPt[2]>>; $VecArr[$s] = $CurCornerVec; $Vec2Str[$s] = ($Obj2+".vtx["+$CurtD2[(2+$s)]+"]"); float $CurCorner2Pt[2] = `pointPosition $Vec2Str[$s]`; vector $CurCorner2Vec = <<$CurCorner2Pt[0],$CurCorner2Pt[1],$CurCorner2Pt[2]>>; $Vec2Arr[$s] = $CurCorner2Vec; } //for ($e=0;$e<4;$e++) { int $e = 0; do { vector $CVec = $VecArr[$e]; string $CVecStr = ($Obj1+".vtx["+$CurtD1[(2+$e)]+"]"); float $CWin = 100000000; string $CWinStr = ""; int $CWinInt = 0; //for ($f=0;$f<4;$f++) { int $f = 0; do { vector $C2Vec = $Vec2Arr[$f]; vector $Diff = $CVec - $C2Vec; float $DiffMag = mag($Diff); if ($DiffMag < $CWin) { $CWin = $DiffMag; $CWinStr = $Vec2Str[$f]; //($Obj2+".vtx["+$CurtD2[(2+$f)]+"]"); $CWinInt = $f; } $f++; } while ($f<size($Vec2Str)); scale -r 0 0 0 -p ($CVec.x) ($CVec.y) ($CVec.z) $CVecStr $CWinStr; $Vec2Arr = RemoveVectorArrayElement($Vec2Arr,$CWinInt); $Vec2Str = RemoveStringArrayElement($Vec2Str,$CWinInt); $e++; } while ($e<size($Vec1Str)); //RemoveArrayElement delete ($Obj1+".f["+$FaceNum1+"]"); delete ($Obj2+".f["+$FaceNum2+"]"); return 5; }
More information on polygon vertex manipulation, read pages 113-116 in YSYT.