Q&A

  • 베지어곡선 그리기
아래 김영대님 답변 무지 감사 합니다.



그런데요, 베지어 곡선은 어떻게 그리나요?

그왜, 늘어뜨려 곡선 그리는거 말입니다.

,, 난왜 안될까,,,







1  COMMENTS
  • Profile
    김영대 1999.08.18 00:13
    초보델피언 께서 말씀하시기를...

    > 아래 김영대님 답변 무지 감사 합니다.

    >

    > 그런데요, 베지어 곡선은 어떻게 그리나요?

    > 그왜, 늘어뜨려 곡선 그리는거 말입니다.

    > ,, 난왜 안될까,,,



    답변이 무지 느리죠?...



    // Win95/NT4.0 부터 베쥬(Bezier) 곡선을 그릴 수 있는 API가 추가되었습니다

    // 그러나, Delphi 의 TCanvas 에서는 지원되지 않습니다

    // 물론 API 를 직접 호출하면 사용할 수 있습니다

    // 아래 예제는 PolyBezierTo() API 를 사용해 타원을 그리는 예제입니다



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ExtCtrls;



    type

    TForm1 = class(TForm)

    Image1: TImage;

    Button1: TButton;

    procedure FormCreate(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure DrawCircle(dc: HDC; x, y, rx, ry: Integer);

    var

    pt: array [0..2] of TPoint;

    cx, cy: Integer;

    begin

    cx := rx * 55 div 100;

    cy := ry * 55 div 100;

    MoveToEx(dc, x, y - ry, nil);

    pt[0] := Point(x + cx, y - ry);

    pt[1] := Point(x + rx, y - cy);

    pt[2] := Point(x + rx, y );

    PolyBezierTo(dc, pt, 3);

    pt[0] := Point(x + rx, y + cy);

    pt[1] := Point(x + cx, y + ry);

    pt[2] := Point(x , y + ry);

    PolyBezierTo(dc, pt, 3);

    pt[0] := Point(x - cx, y + ry);

    pt[1] := Point(x - rx, y + cy);

    pt[2] := Point(x - rx, y );

    PolyBezierTo(dc, pt, 3);

    pt[0] := Point(x - rx, y - cy);

    pt[1] := Point(x - cx, y - ry);

    pt[2] := Point(x , y - ry);

    PolyBezierTo(dc, pt, 3);

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    DrawCircle(Image1.Canvas.Handle, 50, 50, 40, 30);

    end;



    end.