From: Ronald H. <ron...@us...> - 2005-06-05 07:22:51
|
Update of /cvsroot/apophysis/2.10/Source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22390/Source Modified Files: ControlPoint.pas Log Message: zoom out added Index: ControlPoint.pas =================================================================== RCS file: /cvsroot/apophysis/2.10/Source/ControlPoint.pas,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ControlPoint.pas 4 Jun 2005 12:47:44 -0000 1.4 --- ControlPoint.pas 5 Jun 2005 07:22:41 -0000 1.5 *************** *** 122,125 **** --- 122,126 ---- procedure ZoomtoRect(R: TRect); + procedure ZoomOuttoRect(R: TRect); procedure ZoomIn(Factor: double); procedure MoveRect(R: TRect); *************** *** 1137,1141 **** if ((maxx - minx) > 1000) or ((maxy - miny) > 1000) then ! raise EMathError.Create('Flame area to large'); cp.center[0] := (minx + maxx) / 2; --- 1138,1142 ---- if ((maxx - minx) > 1000) or ((maxy - miny) > 1000) then ! raise EMathError.Create('Flame area too large'); cp.center[0] := (minx + maxx) / 2; *************** *** 1629,1632 **** --- 1630,1654 ---- /////////////////////////////////////////////////////////////////////////////// + procedure TControlPoint.ZoomOuttoRect(R: TRect); + var + scale: double; + ppux, ppuy: double; + dx,dy: double; + begin + scale := power(2, zoom); + ppux := pixels_per_unit * scale; + ppuy := pixels_per_unit * scale; + + dx := ((r.Left + r.Right)/2 - Width/2)/ppux ; + dy := ((r.Top + r.Bottom)/2 - Height/2)/ppuy; + + center[0] := center[0] + cos(FAngle) * dx - sin(FAngle) * dy; + center[1] := center[1] + sin(FAngle) * dx + cos(FAngle) * dy ; + + Scale := Scale * Min( Width/(abs(r.Right - r.Left) + 1), Height/(abs(r.Bottom - r.Top) + 1)) ; + Zoom := Log2(1/Scale); + end; + + /////////////////////////////////////////////////////////////////////////////// procedure TControlPoint.ZoomIn(Factor: double); var |