private void smoothSelectionToolStripMenuItem_Click(object sender, EventArgs e)
{
if (m_viewtype == ViewType.Hexadecimal)
{
MessageBox.Show("Smoothing cannot be done in Hex view!");
return;
}
DevExpress.XtraGrid.Views.Base.GridCell[] cellcollection = gridView1.GetSelectedCells();
if (cellcollection.Length > 2)
{
// get boundaries for this selection
// we need 4 corners
int max_column = 0;
int min_column = 0xFFFF;
int max_row = 0;
int min_row = 0xFFFF;
foreach (DevExpress.XtraGrid.Views.Base.GridCell cell in cellcollection)
{
if (cell.Column.AbsoluteIndex > max_column) max_column = cell.Column.AbsoluteIndex;
if (cell.Column.AbsoluteIndex < min_column) min_column = cell.Column.AbsoluteIndex;
if (cell.RowHandle > max_row) max_row = cell.RowHandle;
if (cell.RowHandle < min_row) min_row = cell.RowHandle;
}
if (max_column == min_column)
{
// one column selected only
int top_value = Convert.ToInt32(gridView1.GetRowCellValue(max_row, gridView1.Columns[max_column]));
int bottom_value = Convert.ToInt32(gridView1.GetRowCellValue(min_row, gridView1.Columns[max_column]));
double diffvalue = (top_value - bottom_value) / (cellcollection.Length - 1);
for (int t = 1; t < cellcollection.Length - 1; t++)
{
double newvalue = bottom_value + (t * diffvalue);
gridView1.SetRowCellValue(min_row + t, gridView1.Columns[max_column], newvalue);
}
}
else if (max_row == min_row)
{
// one row selected only
int top_value = Convert.ToInt32(gridView1.GetRowCellValue(max_row, gridView1.Columns[max_column]));
int bottom_value = Convert.ToInt32(gridView1.GetRowCellValue(max_row, gridView1.Columns[min_column]));
double diffvalue = (top_value - bottom_value) / (cellcollection.Length - 1);
for (int t = 1; t < cellcollection.Length - 1; t++)
{
double newvalue = bottom_value + (t * diffvalue);
gridView1.SetRowCellValue(min_row, gridView1.Columns[min_column + t], newvalue);
}
}
else
{
// block selected
// interpolation on 4 points!!!
int top_leftvalue = Convert.ToInt32(gridView1.GetRowCellValue(min_row, gridView1.Columns[min_column]));
int top_rightvalue = Convert.ToInt32(gridView1.GetRowCellValue(min_row, gridView1.Columns[max_column]));
int bottom_leftvalue = Convert.ToInt32(gridView1.GetRowCellValue(max_row, gridView1.Columns[min_column]));
int bottom_rightvalue = Convert.ToInt32(gridView1.GetRowCellValue(max_row, gridView1.Columns[max_column]));
for (int tely = 1; tely < max_row - min_row; tely++)
{
for (int telx = 1; telx < max_column - min_column; telx++)
{
// get values
double valx1 = 0;
double valx2 = 0;
double valy1 = 0;
double valy2 = 0;
if (telx + min_column > 0)
{
valx1 = Convert.ToDouble(gridView1.GetRowCellValue(tely + min_row, gridView1.Columns[telx + min_column - 1]));
}
else
{
valx1 = Convert.ToDouble(gridView1.GetRowCellValue(tely + min_row, gridView1.Columns[min_column]));
}
if ((telx + min_column) < gridView1.Columns.Count - 1)
{
valx2 = Convert.ToDouble(gridView1.GetRowCellValue(tely + min_row, gridView1.Columns[telx + min_column + 1]));
}
else
{
valx2 = Convert.ToDouble(gridView1.GetRowCellValue(tely + min_row, gridView1.Columns[telx + min_column]));
}
if (tely + min_row > 0)
{
valy1 = Convert.ToDouble(gridView1.GetRowCellValue(tely + min_row - 1, gridView1.Columns[telx + min_column]));
}
else
{
valy1 = Convert.ToDouble(gridView1.GetRowCellValue(min_row, gridView1.Columns[telx + min_column]));
}
if ((tely + min_row) < gridView1.RowCount - 1)
{
valy2 = Convert.ToDouble(gridView1.GetRowCellValue(tely + min_row + 1, gridView1.Columns[telx + min_column]));
}
else
{
valy2 = Convert.ToDouble(gridView1.GetRowCellValue(tely + min_row, gridView1.Columns[telx + min_column]));
}
//Console.WriteLine("valx1 = " + valx1.ToString() + " valx2 = " + valx2.ToString() + " valy1 = " + valy1.ToString() + " valy2 = " + valy2.ToString());
// x as
double valuex = (valx2 + valx1) / 2;
double valuey = (valy2 + valy1) / 2;
float newvalue = (float)((valuex + valuey) / 2);
gridView1.SetRowCellValue(min_row + tely, gridView1.Columns[min_column + telx], newvalue.ToString("F0"));
m_map_content = GetDataFromGridView(m_isUpsideDown);
//double diffvaluex = (top_rightvalue - top_leftvalue) / (max_column - min_column - 1);
//double diffvaluey = (top_rightvalue - top_leftvalue) / (max_column - min_column - 1);
}
}
}
// simpleButton3.Enabled = false;
}
}