TGPGraphics на основе другого TGPGraphics? - PullRequest
0 голосов
/ 02 февраля 2020

Существует некоторое прикладное программное обеспечение, в котором мне нужно, чтобы базовые координаты для рисования GDI + находились в центре окна. В настоящее время я устанавливаю базовые координаты центра окна, затем сохраняю преобразование в матрице, чтобы восстановить его с помощью SetTransform(baseMatrix) после некоторых локальных преобразований:

procedure TForm1.Paint();
var
  g: TGPGraphics;
  baseMatrix: TGPMatrix;
begin
  inherited;
  g := TGPGraphics.Create(Canvas.Handle);
  baseMatrix := TGPMatrix.Create();
  try
    g.TranslateTransform(ClientWidth / 2, ClientHeight / 2);
    g.GetTransform(baseMatrix);
    //Do some drawing with transformations
    //.....
    //End of some drawing with transformations
    g.SetTransform(baseMatrix);
    //Do some drawing with transformations
    //.....
    //End of some drawing with transformations
    g.SetTransform(baseMatrix);
  finally
    baseMatrix.Free();
    g.Free();
  end;
end;

Моя идея заключалась в том, чтобы использовать два TGPGraphics, один основанный на другом. Первый будет использоваться для смещения базовых координат. Другой будет использоваться для рисования с возможностью восстановления базовых координат с помощью ResetTransform().

К сожалению, конструктор TGPGraphics не принимает в качестве параметра другой TGPGraphics.

Что лучшие практики для сохранения базовых координат?

...