Einzelnen Beitrag anzeigen

Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: GDI+ RotateTransform - Problem im eigenen Objekt

  Alt 20. Jun 2012, 20:04
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat