# 2.2.3.9.66 matrixbase::SetSubMatrix

## Description

Set a subset of this matrix specified by 0 based column and row indices. The source and target matrices can have different types and different dimensions but the target matrix is never resized even if the source matrix is larger than the target.

## Syntax

BOOL SetSubMatrix( matrixbase & mbSource, int c1 = 0, int r1 = 0 )

## Parameters

mbSource
[input] matixbase oject containing the subset to set
c1
[input] Begining column index in the target matrix, default is 0 (0 based offset)
r1
[input] Begining row index in the target matrix, default is 0 (0 based offset)

## Return

Returns TRUE on successful exit or FALSE on failure.

## Examples

EX1

void matrixbase_SetSubMatrix_ex1()
{
int c1, r1;
BOOL rc;

matrix<double> matD = {
{0,  0,  0,  0},
{0,  0,  0,  0},
{0,  0,  0,  0}
};  // Destination matrix<double> to be applied the method

matrix<int> matS = {
{1,  2,  3},
{5,  6,  7},
{9, 10, 11}
};  // Source matrix<int> to apply the method

// Result matrix by this sample program will be:
//  {0,  0,  0, 0}
//  {0,  0,  1, 2}
//  {0,  0,  5, 6}

// Prepare the source matrix
MatrixPage MatPg1;
MatPg1.Create("Origin");
MatrixLayer MatLy1 = MatPg1.Layers(0);
Matrix Mat1(MatLy1);
Mat1 = matS;
printf("  Source matrix is %s. Size=%dx%d.\n",
Mat1.GetName(),Mat1.GetNumRows(),Mat1.GetNumCols());

// Prepare a copy of the destination matrix
MatrixPage MatPg2;
MatPg2.Create("Origin");
MatrixLayer MatLy2 = MatPg2.Layers(0);
Matrix Mat2(MatLy2);
Mat2 = matD;
printf("  Original copy of the destination matrix is %s. Size=%dx%d.\n",
Mat2.GetName(),Mat2.GetNumRows(),Mat2.GetNumCols());

// Prepare the result destination matrix
MatrixPage MatPg3;
MatPg3.Create("Origin");
MatrixLayer MatLy3 = MatPg3.Layers(0);
Matrix Mat3(MatLy3);

c1=2;
r1=1;
rc=matD.SetSubMatrix(matS, c1, r1);
Mat3 = matD;

printf("  Setting position: Row=%d, Col=%d.\n",r1+1,c1+1);
if(!rc)
printf("  Error: Shrink failed.\n");
else
printf("  Result destination matrix is %s. Size=%dx%d.\n",
Mat3.GetName(),Mat3.GetNumRows(),Mat3.GetNumCols());
}