ich denke mit folgendem kommst Du dahin wo Du willst.
Ich verwende das ganze als
Api ohne Interfaces, daher das Free.
(Ja DeddyH ohne try finally)
Delphi-Quellcode:
Function PointsFromRect(r: TGPRectF): TPointFDynArray;
begin
SetLength(Result, 4);
Result[0].X := r.X;
Result[0].Y := r.Y;
Result[1].X := r.X + r.Width;
Result[1].Y := r.Y;
Result[2].X := r.X + r.Width;
Result[2].Y := r.Y + r.Height;
Result[3].X := r.X;
Result[3].Y := r.Y + r.Height;
end;
Procedure Adaptmatrix(Matrix: TGPMatrix; Zoom: Double; Angle: Double; Centerpoint: TGPPointF);
var
Winkel: Double;
Function Grad2Rad(w: Double): Double;// ich wollte Math gerade nicht bemühen
begin
Result := w / 360 * PI * 2;
end;
begin
Winkel := Grad2Rad(Angle);
Matrix.SetElements(Zoom * cos(Winkel), Zoom * Sin(Winkel), Zoom * (-Sin(Winkel)), Zoom * cos(Winkel), Centerpoint.X, Centerpoint.Y)
end;
procedure TForm2.Button1Click(Sender: TObject);
var
M:TGPMatrix;
r : TGPRectF;
pArray:TPointFDynArray;
I: Integer;
w:Integer;
begin
r.X := 0;
r.Y := 0;
r.Width := 200;
r.Height := 20;
M:=TGPMatrix.Create;
for w := 0 to 36 do
begin
Adaptmatrix(m,1,w * 10,MakePoint(0.0,0));
pArray:=PointsFromRect(r);
m.TransformPoints(PGPPointF(pArray),4);
Memo1.Lines.Add(Format('Winkel: %d',[w*10]));
Memo1.Lines.Add(StringOfChar('_',20));
for I := 0 to High(pArray) do
begin
Memo1.Lines.Add(Format('X: %0.0f Y: %0.0f',[pArray[i].X,pArray[i].Y]))
end;
Memo1.Lines.Add('');
end;
M.Free;
end;