Click here to Skip to main content
15,890,438 members

Comments by AHTOXA (Top 1 by date)

AHTOXA 19-Dec-16 8:32am View    
for zoom factors other than 2 there is more complex solution
(code is for x axis only, c++/cli)

System::Void ChartDiagramForm::OnDiagramMouseWheel(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{
	const double ZOOM_FACTOR = 1.6;
	auto axis = chart->ChartAreas[0]->AxisX;

	double initialAxisMousePosition;
	try { initialAxisMousePosition = axis->PixelPositionToValue(e->X); }
	catch( ArgumentException ^ ) { initialAxisMousePosition = (axis->ScaleView->ViewMinimum + axis->ScaleView->ViewMaximum)/2.; }

	if( e->Delta > 0 ) // zoom in
	{
		double dToLeft = (initialAxisMousePosition - axis->ScaleView->ViewMinimum) / ZOOM_FACTOR;
		double dToRight = (axis->ScaleView->ViewMaximum - initialAxisMousePosition) / ZOOM_FACTOR;
		axis->ScaleView->Zoom(initialAxisMousePosition - dToLeft, initialAxisMousePosition + dToRight);
	}
	else
	{ // zoom out
		double dToLeft = (initialAxisMousePosition - axis->ScaleView->ViewMinimum) * ZOOM_FACTOR;
		double dToRight = (axis->ScaleView->ViewMaximum - initialAxisMousePosition) * ZOOM_FACTOR;
		if( dToLeft + dToRight >= axis->Maximum - axis->Minimum )
			axis->ScaleView->ZoomReset();
		else
			axis->ScaleView->Zoom(initialAxisMousePosition - dToLeft, initialAxisMousePosition + dToRight);
	}
}