Page Index Toggle Pages: 1 Send TopicPrint
Normal Topic Zoom to centre (Read 2029 times)
jagdipa
Junior Member
**
Offline


I love YaBB 1G - SP1!

Posts: 52
Joined: Jun 23rd, 2011
Zoom to centre
Jan 18th, 2012 at 2:19pm
Print Post  
I have a diagram with a silder for zooming in and out. My issue is that the zoom is anchored to the top left of the diagram. How do I get the zoom to be anchored to the centre middle of the diagram?
  
Back to top
 
IP Logged
 
Stoyo
God Member
*****
Offline


MindFusion support

Posts: 13230
Joined: Jul 20th, 2005
Re: Zoom to centre
Reply #1 - Jan 18th, 2012 at 3:33pm
Print Post  
Use this method:

Code
Select All
void SetZoomFactor(double zoomFactor, Point anchor)
{
	var pivot = DocToClient(anchor);
	var scroll = DocToClient(new Point(diagram.ScrollX, diagram.ScrollY));
	var offset = new Point(pivot.X - scroll.X, pivot.Y - scroll.Y);

	diagram.ZoomFactor = zoomFactor;

	offset = ClientToDoc(offset);
	diagram.ScrollX = anchor.X - offset.X;
	diagram.ScrollY = anchor.Y - offset.Y;
}

Point DocToClient(Point point)
{
	return diagram.DocumentPlane.TransformToVisual(diagram).Transform(point);
}

Point ClientToDoc(Point point)
{
	return diagram.TransformToVisual(diagram.DocumentPlane).Transform(point);
}

private void OnMouseWheel(object sender, MouseWheelEventArgs e)
{
	SetZoomFactor(
		diagram.ZoomFactor + e.Delta / 20.0,
		e.GetPosition(diagram.DocumentPlane));
}

void OnKeyDown(object sender, KeyEventArgs e)
{
	var v = diagram.Viewport;
	var center = new Point(v.X + v.Width / 2, v.Y + v.Height / 2);

	switch (e.Key)
	{
		case Key.Add:
			SetZoomFactor(diagram.ZoomFactor * 1.2, center);
			break;

		case Key.Subtract:
			SetZoomFactor(diagram.ZoomFactor / 1.2, center);
			break;
	}
} 



I hope that helps,
Stoyan
  
Back to top
 
IP Logged
 
Page Index Toggle Pages: 1
Send TopicPrint