Initial import
This commit is contained in:
commit
dfcc43c72d
34 files changed
+3057
No files matched your search
Executable
+33
@@ -0,0 +1,33 @@
|
||||
unit ProbeCamera;
|
||||
{$mode delphi}{$H+}
|
||||
{$ASSERTIONS ON}{$R+}{$Q+}{$B-}
|
||||
interface
|
||||
uses Math;
|
||||
type
|
||||
TProbeCamera = record
|
||||
OffsetX, OffsetY, PixelsPerCell: Double;
|
||||
procedure Reset;
|
||||
procedure Pan(DX,DY: Double);
|
||||
procedure ZoomAt(Factor,SX,SY: Double);
|
||||
function CellAt(SX,SY: Double;Cols,Rows:Integer;out X,Y:Integer):Boolean;
|
||||
end;
|
||||
implementation
|
||||
procedure TProbeCamera.Reset;
|
||||
begin OffsetX:=20;OffsetY:=20;PixelsPerCell:=10;end;
|
||||
procedure TProbeCamera.Pan(DX,DY:Double);
|
||||
begin OffsetX:=OffsetX+DX;OffsetY:=OffsetY+DY;end;
|
||||
procedure TProbeCamera.ZoomAt(Factor,SX,SY:Double);
|
||||
var WX,WY,NewScale:Double;
|
||||
begin
|
||||
if (Factor<=0) or IsNan(Factor) or IsInfinite(Factor) then Exit;
|
||||
WX:=(SX-OffsetX)/PixelsPerCell;WY:=(SY-OffsetY)/PixelsPerCell;
|
||||
NewScale:=EnsureRange(PixelsPerCell*Factor,2.0,128.0);
|
||||
PixelsPerCell:=NewScale;OffsetX:=SX-WX*NewScale;OffsetY:=SY-WY*NewScale;
|
||||
end;
|
||||
function TProbeCamera.CellAt(SX,SY:Double;Cols,Rows:Integer;out X,Y:Integer):Boolean;
|
||||
begin
|
||||
X:=Floor((SX-OffsetX)/PixelsPerCell)+1;
|
||||
Y:=Rows-Floor((SY-OffsetY)/PixelsPerCell);
|
||||
Result:=(X>=1) and (X<=Cols) and (Y>=1) and (Y<=Rows);
|
||||
end;
|
||||
end.
|
||||
Reference in new issue
Block a user