Einzelnen Beitrag anzeigen

aLeXanDer..

Registriert seit: 21. Aug 2008
4 Beiträge
 
#1

GDI+ RotateTransform - Problem im eigenen Objekt

  Alt 19. Jun 2012, 10:50
Hallo community,

Ich arbeite z.Zt. mit Delphi XE2 an einem Objekt, das ich mit IGDI+ zeichne.
Nun möchte ich mein Objekt auch Drehen können.
Das also z.B. eine Linie die zuvor gerade , 200Pixel Lang und 20 Pixel hoch, war auch
in einem Winkel von xxx°Grad noch 200Pixel lang und 20 Pixel hoch ist.

Momentan habe ich in meiner Zeichenroutine folgenden Ansatz, der mir mein Objekt zwar dreht, aber ich meine Größe nicht anpasse, bzw.
Anpassen kann, bzw. nicht das Wissen besitze, oder am Schlauch stehe.

Delphi-Quellcode:
procedure TILKnopf.IntDraw( AGraphics : IGPGraphics; AXCoeff : Single; AYCoeff : Single; AWidth : Single; AHeight : Single; AOutWidth : Single; AOutHeight : Single; AFromLayer : Boolean; AContoursOnly : Boolean );
var
// AGraphics : IGPGraphics;
  AFont : IGPFont;
  ALeftTopCorner : TGPPointF;
  ARect : TGPRectF;
  ARect1 : TGPRectF;
  APath : IGPGraphicsPath;

  ABrush : TGPBrush;
  APen : TGPPen;

  AText :String;
  Farbe1 : TGPColor;
  Farbe2 : TGPColor;

  ABarHeightH, ABarHeightW : Single;
  FXTranslate, FYTranslate : Single;
  FRotation : Integer;
    ATransform : IGPMatrix;

begin
  inherited;

// AGraphics := TGPGraphics.Create( Canvas );
  AGraphics.SmoothingMode := SmoothingModeAntiAlias;
  AGraphics.TextRenderingHint := TextRenderingHintAntiAlias;

  APen := TGPPen.Create(aclGray);

// self.SetBounds(Left,Top, Width, Width);

  FRotation := 45;

  AGraphics.TranslateTransform( 0,0);
////// AGraphics.TranslateTransform( FXTranslate, FYTranslate);
  AGraphics.RotateTransform(FRotation);


  if FValue then
    begin
      AText := FZustandsTextEin;
      Farbe1 := aclLime;
      Farbe2 := aclLime;
    end
  else
    begin
      AText := FZustandsTextAus;
      Farbe1 := aclTomato;
      Farbe2 := aclRed;
    end;

  ALeftTopCorner := MakePointF( 10, 10 );
  AFont := TGPFont.Create( 'Microsoft Sans Serif', FFontSize, [ fsBold ] );
  ARect := AGraphics.GetStringBoundingBoxF( AText, AFont, ALeftTopCorner );
  ARect1 := GPInflateRectF( ARect, 5, 5 );

    AGraphics.DrawRoundRectangleF(
        TGPPen.Create( TGPLinearGradientBrush.Create( GPInflateRectF( ARect1, 2, 2 ), aclGray, aclDimgray, LinearGradientModeVertical ), 4 ),
        TGPPathGradientBrush.Create(
          TGPGraphicsPath.Create().AddRoundRectangleF( ARect1, MakeSizeF( 10 ) )
           ).SetInterpolationColorArrays(
          [ aclGray, aclLightgray, aclGray ], [ 0, 0.05, 1 ] )
         .SetCenterPointF( MakePointF( 250, 50 ))
         .SetFocusScales( 0.1, 0.8 ),
        ARect1, MakeSizeF( 10) );

    // Draw a text with semitransparent shadow.
  AGraphics.DrawStringF( AText,
             AFont,
             MakePointF( 13, 13 ),
             TGPSolidBrush.Create( MakeARGBColor( 50, aclBlack )) )

       .DrawStringF( AText,
             AFont,
             ALeftTopCorner,
             TGPLinearGradientBrush.Create( ARect, Farbe1, Farbe2, LinearGradientModeForwardDiagonal ));

end;
//---------------------------------------------------------------------------
Das "Objekt" wird korrekt in dem Winkel gezeichnet, nur müsste ich ja mein Objekt iwie anpassen?
das es dann entsprechende Breite und Höhe besitzt.
Woher weiß ich das , wie mach ich das?


Danke Alex
  Mit Zitat antworten Zitat