MergeFaces

From scripting
Jump to: navigation, search
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.