📄 hgecanvas.pas
字号:
DrawEx(Image, PatternIndex, X, Y, CenterPosX, CenterPosY, Scale, Scale,
False, False, ARGB(Alpha, 255, 255, 255), BlendMode);
end;
procedure THGECanvas.DrawAlpha1(Image: ITexture; PatternIndex: Integer; X, Y: Single;
Alpha: Byte; Blendmode: Integer);
begin
DrawEx(Image, PatternIndex, X, Y, 0, 0, 1, 1,
False, False, ARGB(Alpha, 255, 255, 255), BlendMode);
end;
procedure THGECanvas.DrawColor4(Image: ITexture; PatternIndex: Integer; X, Y, ScaleX, ScaleY: Single;
DoCenter, MirrorX, MirrorY: Boolean; Color1, Color2, Color3, Color4: Cardinal; BlendMode: Integer);
var
CenterPosX, CenterPosY: Single;
begin
if DoCenter then
begin
CenterPosX := Image.PatternWidth div 2;
CenterPosY := Image.PatternHeight div 2;
end
else
begin
CenterPosX := 0;
CenterPosY := 0;
end;
DrawEx(Image, PatternIndex, X, Y, CenterPosX, CenterPosY, ScaleX, ScaleY,
MirrorX, MirrorY, Color1, Color2, Color3, Color4, BlendMode);
end;
procedure THGECanvas.DrawColor4(Image: ITexture; PatternIndex: Integer; X, Y, Scale: Single;
DoCenter: Boolean; Color1, Color2, Color3, Color4: Cardinal; BlendMode: Integer);
var
CenterPosX, CenterPosY: Single;
begin
if DoCenter then
begin
CenterPosX := Image.PatternWidth div 2;
CenterPosY := Image.PatternHeight div 2;
end
else
begin
CenterPosX := 0;
CenterPosY := 0;
end;
DrawEx(Image, PatternIndex, X, Y, CenterPosX, centerPosY, Scale, Scale,
False, False, Color1, Color2, Color3, Color4, BlendMode);
end;
procedure THGECanvas.DrawColor4(Image: ITexture; PatternIndex: Integer; X, Y: Single;
Color1, Color2, Color3, Color4: Cardinal; BlendMode: Integer);
begin
DrawEx(Image, PatternIndex, X, Y, 0, 0, 1, 1,
False, False, Color1, Color2, Color3, Color4, BlendMode);
end;
procedure THGECanvas.DrawAlpha4(Image: ITexture; PatternIndex: Integer; X, Y, ScaleX, ScaleY: Single;
DoCenter, MirrorX, MirrorY: Boolean; Alpha1, Alpha2, Alpha3, Alpha4: Byte; BlendMode: Integer);
var
CenterPosX, CenterPosY: Single;
begin
if DoCenter then
begin
CenterPosX := Image.PatternWidth div 2;
CenterPosY := Image.PatternHeight div 2;
end
else
begin
CenterPosX := 0;
CenterPosY := 0;
end;
DrawEx(Image, PatternIndex, X, Y, CenterPosX, CenterPosY, ScaleX, ScaleY,
MirrorX, MirrorY,
ARGB(Alpha1,255,255,255), ARGB(Alpha2,255,255,255),ARGB(Alpha3,255,255,255),ARGB(Alpha4,255,255,255), BlendMode);
end;
procedure THGECanvas.DrawAlpha4(Image: ITexture; PatternIndex: Integer; X, Y, Scale: Single;
DoCenter: Boolean; Alpha1, Alpha2, Alpha3, Alpha4: Byte; BlendMode: Integer);
var
CenterPosX, CenterPosY: Single;
begin
if DoCenter then
begin
CenterPosX := Image.PatternWidth div 2;
CenterPosY := Image.PatternHeight div 2;
end
else
begin
CenterPosX := 0;
CenterPosY := 0;
end;
DrawEx(Image, PatternIndex, X, Y, CenterPosX, CenterPosY, Scale, Scale,
False, False,
ARGB(Alpha1,255,255,255), ARGB(Alpha2,255,255,255), ARGB(Alpha3,255,255,255), ARGB(Alpha4,255,255,255), BlendMode);
end;
procedure THGECanvas.DrawAlpha4(Image: ITexture; PatternIndex: Integer; X, Y: Single;
Alpha1, Alpha2, Alpha3, Alpha4: Byte; BlendMode: Integer);
begin
DrawEx(Image, PatternIndex, X, Y, 0, 0, 1, 1,
False, False,
ARGB(Alpha1,255,255,255),ARGB(Alpha2,255,255,255), ARGB(Alpha3,255,255,255), ARGB(Alpha4,255,255,255), BlendMode);
end;
procedure THGECanvas.Draw4V(Image:ITexture; PatternIndex: Integer; X1, Y1, X2, Y2, X3, Y3, X4, Y4: Single;
MirrorX, MirrorY: Boolean; Color: Cardinal; BlendMode: Integer);
begin
SetPattern(Image, PatternIndex);
SetColor(Color);
FQuad.V[0].X := X1; FQuad.V[0].Y := Y1;
FQuad.V[1].X := X2; FQuad.V[1].Y := Y2;
FQuad.V[2].X := X3; FQuad.V[2].Y := Y3;
FQuad.V[3].X := X4; FQuad.V[3].Y := Y4;
SetMirror(MirrorX, MirrorY);
FQuad.Blend := BlendMode;
FHGE.Gfx_RenderQuad(FQuad);
end;
procedure THGECanvas.Draw4V(Image:ITexture; PatternIndex: Integer; X1, Y1, X2, Y2, X3, Y3, X4, Y4: Single;
MirrorX, MirrorY: Boolean; Color1, Color2, Color3, Color4: Cardinal; BlendMode: Integer);
begin
SetPattern(Image, PatternIndex);
SetColor(Color1, Color2, Color3, Color4);
FQuad.V[0].X := X1; FQuad.V[0].Y := Y1;
FQuad.V[1].X := X2; FQuad.V[1].Y := Y2;
FQuad.V[2].X := X3; FQuad.V[2].Y := Y3;
FQuad.V[3].X := X4; FQuad.V[3].Y := Y4;
SetMirror(MirrorX, MirrorY);
FQuad.Blend := BlendMode;
FHGE.Gfx_RenderQuad(FQuad);
end;
procedure THGECanvas.DrawStretch(Image: ITexture; PatternIndex: Integer; X1, Y1, X2, Y2: Single;
MirrorX, MirrorY: Boolean; Color: Cardinal; BlendMode: Integer);
begin
SetPattern(Image, PatternIndex);
SetColor(Color);
FQuad.V[0].X := X1; FQuad.V[0].Y := Y1;
FQuad.V[1].X := X2; FQuad.V[1].Y := Y1;
FQuad.V[2].X := X2; FQuad.V[2].Y := Y2;
FQuad.V[3].X := X1; FQuad.V[3].Y := Y2;
SetMirror(MirrorX, MirrorY);
FQuad.Blend := BlendMode;
FHGE.Gfx_RenderQuad(FQuad);
end;
procedure THGECanvas.DrawPart(Texture: ITexture; X, Y, SrcX, SrcY, Width, Height,
ScaleX, ScaleY, CenterX, CenterY: Single; MirrorX, MirrorY: Boolean; Color: Cardinal; BlendMode: Integer);
var
TexX1, TexY1, TexX2, TexY2: Single;
TempX1, TempY1, TempX2, TempY2: Single;
begin
// FTX := SrcX;
// FTY := SrcY;
FWidth := Width;
FHeight := Height;
if Assigned(Texture) then begin
FTexWidth := FHGE.Texture_GetWidth(Texture);
FTexHeight := FHGE.Texture_GetHeight(Texture);
end else begin
FTexWidth := 1;
FTexHeight := 1;
end;
FQuad.Tex := Texture;
TexX1 := SrcX / FTexWidth;
TexY1 := SrcY / FTexHeight;
TexX2 := (SrcX + Width) / FTexWidth;
TexY2 := (SrcY + Height) / FTexHeight;
FQuad.V[0].TX := TexX1; FQuad.V[0].TY := TexY1;
FQuad.V[1].TX := TexX2; FQuad.V[1].TY := TexY1;
FQuad.V[2].TX := TexX2; FQuad.V[2].TY := TexY2;
FQuad.V[3].TX := TexX1; FQuad.V[3].TY := TexY2;
FQuad.V[0].Z := 0.5;
FQuad.V[1].Z := 0.5;
FQuad.V[2].Z := 0.5;
FQuad.V[3].Z := 0.5;
SetColor(Color);
TempX1 := X - CenterX * ScaleX;
TempY1 := Y - CenterY * ScaleY;
TempX2 := (X + FWidth * ScaleX) - CenterX * ScaleX;
TempY2 := (Y + FHeight* ScaleY) - CenterY * ScaleY;
FQuad.V[0].X := TempX1; FQuad.V[0].Y := TempY1;
FQuad.V[1].X := TempX2; FQuad.V[1].Y := TempY1;
FQuad.V[2].X := TempX2; FQuad.V[2].Y := TempY2;
FQuad.V[3].X := TempX1; FQuad.V[3].Y := TempY2;
SetMirror(MirrorX, MirrorY);
FQuad.Blend := BlendMode;
FHGE.Gfx_RenderQuad(FQuad);
end;
procedure THGECanvas.DrawPart(Texture: ITexture; X, Y, SrcX, SrcY, Width, Height: Single;
Color: Cardinal; BlendMode: Integer);
begin
DrawPart(Texture,X, Y, SrcX, SrcY, Width, Height, 1,1,0,0, False, False, Color, BlendMode);
end;
procedure THGECanvas.DrawRotate(Image: ITexture; PatternIndex: Integer; X, Y, CenterX, CenterY,
Angle, ScaleX, ScaleY: Single; MirrorX, MirrorY: Boolean; Color: Cardinal; BlendMode: Integer);
var
TX1, TY1, TX2, TY2, SinT, CosT: Single;
begin
// if (VScale=0) then
// VScale := HScale;
SetPattern(Image, PatternIndex);
SetColor(Color);
TX1 := -CenterX * ScaleX;
TY1 := -CenterY * ScaleY;
TX2 := (FWidth - CenterX) * ScaleX;
TY2 := (FHeight - CenterY) * ScaleY;
if (Angle <> 0.0) then begin
CosT := Cos(Angle);
SinT := Sin(Angle);
FQuad.V[0].X := TX1 * CosT - TY1 * SinT + X;
FQuad.V[0].Y := TX1 * SinT + TY1 * CosT + Y;
FQuad.V[1].X := TX2 * CosT - TY1 * SinT + X;
FQuad.V[1].Y := TX2 * SinT + TY1 * CosT + Y;
FQuad.V[2].X := TX2 * CosT - TY2 * SinT + X;
FQuad.V[2].Y := TX2 * SinT + TY2 * CosT + Y;
FQuad.V[3].X := TX1 * CosT - TY2 * SinT + X;
FQuad.V[3].Y := TX1 * SinT + TY2 * CosT + Y;
end else begin
FQuad.V[0].X := TX1 + X; FQuad.V[0].Y := TY1 + Y;
FQuad.V[1].X := TX2 + X; FQuad.V[1].Y := TY1 + Y;
FQuad.V[2].X := TX2 + X; FQuad.V[2].Y := TY2 + Y;
FQuad.V[3].X := TX1 + X; FQuad.V[3].Y := TY2 + Y;
end;
SetMirror(MirrorX, MirrorY);
FQuad.Blend := BlendMode;
FHGE.Gfx_RenderQuad(FQuad);
end;
procedure THGECanvas.DrawRotate(Image: ITexture; PatternIndex: Integer; X, Y, CenterX, CenterY,
Angle: Real; Color: Cardinal; BlendMode: Integer);
begin
DrawRotate(Image, PatternIndex, X, Y, CenterX, CenterY, Angle, 1, 1,False, False, Color, BlendMode);
end;
procedure THGECanvas.DrawRotateColor4(Image: ITexture; PatternIndex: Integer; X, Y, CenterX, CenterY,
Angle, ScaleX, ScaleY: Single; MirrorX, MirrorY: Boolean; Color1, Color2, Color3, Color4: Cardinal; BlendMode: Integer);
var
TX1, TY1, TX2, TY2, SinT, CosT: Single;
begin
// if (VScale=0) then
// VScale := HScale;
SetPattern(Image, PatternIndex);
SetColor(Color1, Color2, Color3, Color4);
TX1 := -CenterX * ScaleX;
TY1 := -CenterY * ScaleY;
TX2 := (FWidth - CenterX) * ScaleX;
TY2 := (FHeight - CenterY) * ScaleY;
if (Angle <> 0.0) then begin
CosT := Cos(Angle);
SinT := Sin(Angle);
FQuad.V[0].X := TX1 * CosT - TY1 * SinT + X;
FQuad.V[0].Y := TX1 * SinT + TY1 * CosT + Y;
FQuad.V[1].X := TX2 * CosT - TY1 * SinT + X;
FQuad.V[1].Y := TX2 * SinT + TY1 * CosT + Y;
FQuad.V[2].X := TX2 * CosT - TY2 * SinT + X;
FQuad.V[2].Y := TX2 * SinT + TY2 * CosT + Y;
FQuad.V[3].X := TX1 * CosT - TY2 * SinT + X;
FQuad.V[3].Y := TX1 * SinT + TY2 * CosT + Y;
end else begin
FQuad.V[0].X := TX1 + X; FQuad.V[0].Y := TY1 + Y;
FQuad.V[1].X := TX2 + X; FQuad.V[1].Y := TY1 + Y;
FQuad.V[2].X := TX2 + X; FQuad.V[2].Y := TY2 + Y;
FQuad.V[3].X := TX1 + X; FQuad.V[3].Y := TY2 + Y;
end;
SetMirror(MirrorX, MirrorY);
FQuad.Blend := BlendMode;
FHGE.Gfx_RenderQuad(FQuad);
end;
procedure THGECanvas.DrawRotateC(Image: ITexture; PatternIndex: Integer; X, Y, Angle,
ScaleX, ScaleY: Single; MirrorX, MirrorY: Boolean; Color: Cardinal; BlendMode: Integer);
begin
DrawRotate(Image, PatternIndex, X, Y, Image.PatternWidth div 2, Image.PatternHeight div 2,
Angle, ScaleX, ScaleY, MirrorX, MirrorY, Color, BlendMode);
end;
procedure THGECanvas.DrawRotateC(Image: ITexture; PatternIndex: Integer; X, Y, Angle: Single;
Color: Cardinal; BlendMode: Integer);
begin
DrawRotate(Image, PatternIndex, X, Y, Image.PatternWidth div 2, Image.PatternHeight div 2,
Angle, 1, 1, False, False, Color, BlendMode);
end;
procedure THGECanvas.DrawWaveX(Image: ITexture; X, Y, Width, Height: Integer; Amp, Len,
Phase: Integer; Color: Cardinal; BlendMode: Integer);
var
I, J: Integer;
begin
for J := 0 to Width do
begin
I:=Trunc(J * Image.PatternWidth / Width);
DrawPart(Image, X + J, Y + Amp * Sin((Phase + J) * PI * Width / Len / 256),
I, 0, 1, Height, Color, BlendMode);
end;
end;
procedure THGECanvas.DrawWaveY(Image: ITexture; X, Y, Width, Height: Integer; Amp, Len,
Phase: Integer; Color: Cardinal; BlendMode: Integer);
var
I, J: Integer;
begin
for J := 0 to Height do
begin
I:=Trunc(J * Image.PatternHeight / Height);
DrawPart(Image, X + Amp * Sin((Phase + J) * PI * Height / Len / 256), Y + J,
0, I, Width, 1, Color, BlendMode);
end;
end;
initialization
FHGE := nil;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -