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