private void UpdateMetrics(BoundingBox bounds)
{
x_max = bounds.Xmax;
x_min = bounds.Xmin;
y_max = bounds.Ymax;
y_min = bounds.Ymin;
// Enlarge width 5% on each side
x_scale = x_max - x_min;
x_max = x_max + 0.05 * x_scale;
x_min = x_min - 0.05 * x_scale;
x_scale = x_max - x_min;
// Enlarge height 5% on each side
y_scale = y_max - y_min;
y_max = y_max + 0.05 * y_scale;
y_min = y_min - 0.05 * y_scale;
y_scale = y_max - y_min;
if (x_scale < y_scale)
{
int delta = (int)Math.Round((x_ps_max - x_ps_min) * (y_scale - x_scale) / (2.0 * y_scale));
x_ps_max = x_ps_max - delta;
x_ps_min = x_ps_min + delta;
x_ps_max_clip = x_ps_max_clip - delta;
x_ps_min_clip = x_ps_min_clip + delta;
x_scale = y_scale;
}
else
{
int delta = (int)Math.Round((y_ps_max - y_ps_min) * (x_scale - y_scale) / (2.0 * x_scale));
y_ps_max = y_ps_max - delta;
y_ps_min = y_ps_min + delta;
y_ps_max_clip = y_ps_max_clip - delta;
y_ps_min_clip = y_ps_min_clip + delta;
y_scale = x_scale;
}
}