Val(varX, numX, error);
Val(varY, numY, error);
varX1 := numX;
varY1 := numY;
BGRAVirtualScreen1.Canvas.Clear();
boxX := (ClientWidth) div 4;
boxY := (ClientHeight) div 4;
bmp := TBGRABitmap.Create(BGRAVirtualScreen1.ClientWidth, BGRAVirtualScreen1.ClientHeight, BGRA(0,0,0,0));
tmp := TBGRABitmap.Create(BGRAVirtualScreen1.ClientWidth, BGRAVirtualScreen1.ClientHeight, BGRAWhite);
ctx := bmp.Canvas2D;
ttx := tmp.Canvas2D;
ctx.save();
ttx.save();
ctx.translate(boxX, boxY);
ttx.translate(boxX, boxY);
ttx.fontRenderer := TBGRAVectorizedFontRenderer.Create; //here we supply an adequate font renderer
ttx.font := '20px Calibri';
ttx.textBaseline := 'bottom';
ttx.textalign := 'center';
ctx.antialiasing := True;
ctx.lineWidth:=1;
ctx.scale(1, 1);
ttx.scale(1, 1);
ctx.pixelCenteredCoordinates := True;
ctx.StrokeStyle(clBlack);
...
Val(sX, holX, error);
Val(sY, holY, error);
holY := varY1 - holY;
Val(sline.ValueFromIndex[3], radX, error);
radX1 := radX / 2;
p2 := TBGRAPath.Create;
p2.arc(abs(varX2) + holX + varX2, holY, radX1, degtorad(0), degtorad(360));
p2.closePath();
p2.copyTo(ctx);
ctx.moveTo(abs(varX2) + holX + varX2, holY - RadX/2 - 5);
ctx.lineTo(abs(varX2) + holX + varX2, varY1 + 105);
ttx.fillStyle(VGARed);
varM := varX2 + single(holX) + varX2;
ttx.fillText(FloatToStrF(varM,ffFixed,10,2), abs(varX2) + holX + varX2, varY1 + 90);
ttx.rotate(degtorad(90));
ttx.fill();
ctx.moveTo(abs(varX2) + varX2 - 5, varY1 + 100);
ctx.lineTo(abs(varX2) + varX1 + varX2 + 5, varY1 + 100);
ctx.fillStyle(BGRA(127, 130, 204, 255));
{draw outline}
p1 := TBGRAPath.Create;
p1.lineTo(abs(varX2), 0);
p1.lineTo(abs(varX2) + varX1 + varX2, 0);
p1.lineTo(abs(varX2) + varX1 + 2*varX2, VarY1);
p1.lineTo(abs(varX2) + varX2, varY1);
p1.lineTo(abs(varX2), 0);
p1.closePath();
p1.copyTo(ctx);
ctx.fill();
{draw flange thickness}
p3 := TBGRAPath.Create;
p3.lineTo(abs(varX2) + varX3, FlensX);
p3.lineTo(abs(varX2) + varX1 + varX2 +varX3, FlensX);
p3.closePath();
p3.copyTo(ctx);
p4 := TBGRAPath.Create;
p4.lineTo(abs(varX2) + varX2 - varX3, varY1 - FlensX);
p4.lineTo(abs(varX2) + VarX1 + 2*varX2 - varX3, varY1 - FlensX);
p4.closePath();
p4.copyTo(ctx);
ctx.stroke();
{ draw measure lines }
ctx.moveTo(abs(varX2) + varX2 - 5, varY1 + 100+50);
ctx.lineTo(abs(varX2) + varX1 + varX2 + 5, varY1 + 100+50);
ctx.moveTo(abs(varX2) + varX2, varY1 + 5);
ctx.lineTo(abs(varX2) + varX2 , varY1 + 100+55);
ctx.moveTo(abs(varX2) + varX1 + varX2 , varY1 + 5);
ctx.lineTo(abs(varX2) + varX1 + varX2 , varY1 + 100+55);
ctx.stroke();
ctx.fillStyle(VGARed);
ctx.fillText(varX, (abs(varX2) + varX1 + varX2)/2, varY1 + 100+50);
ctx.fillText('Calibri', (abs(varX2) + varX1 + varX2)/2, 100 + varY1);
ctx.fill();
bmp.Draw(tmp.Canvas, 0, 0, True);
bmp.Draw(BGRAVirtualScreen1.Canvas, 0, 0, True);
tmp.Free;
bmp.Free;