# Direct2D (28) : 获取几何图形的面积、线总长度和指定位置的点坐标

uses Direct2D, D2D1;

procedure TForm1.FormPaint(Sender: TObject);
var
cvs: TDirect2DCanvas;
iEllipseGeometry: ID2D1EllipseGeometry;
area,length: Single;
rPointF1,rPointF2: TD2DPoint2f;
ptCenter: TPoint;
begin
ptCenter := Point(ClientWidth div 2, ClientHeight div 2);
D2DFactory.CreateEllipseGeometry(D2D1Ellipse(ptCenter, ClientWidth/4, ClientHeight/4), iEllipseGeometry);

{获取面积与周长}
iEllipseGeometry.ComputeArea(TD2DMatrix3x2F.Identity, 0, area);
iEllipseGeometry.ComputeLength(TD2DMatrix3x2F.Identity, 0, length);

{获取图形的起始处和 1/4 处的点}
iEllipseGeometry.ComputePointAtLength(0, TD2DMatrix3x2F.Identity, 0, @rPointF1, nil);
iEllipseGeometry.ComputePointAtLength(length/4, TD2DMatrix3x2F.Identity, 0, @rPointF2, nil);

cvs := TDirect2DCanvas.Create(Canvas, ClientRect);
cvs.BeginDraw;
cvs.RenderTarget.Clear(D2D1ColorF(clWhite));

cvs.Font.Size := 9;
cvs.TextOut(5, 5, Format('面积: %f; 周长: %f', [area, length]));

cvs.DrawGeometry(iEllipseGeometry);

cvs.MoveTo(ptCenter.X, ptCenter.Y);
cvs.LineTo(Trunc(rPointF1.x), Trunc(rPointF1.y));
cvs.MoveTo(ptCenter.X, ptCenter.Y);
cvs.LineTo(Trunc(rPointF2.x), Trunc(rPointF2.y));

cvs.EndDraw;
cvs.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
Repaint;
end;


posted on 2011-04-07 17:08  万一  阅读(1711)  评论(0编辑  收藏  举报