지오메트릭펜이라는게 있었군요
워낙에 기초가 부실에서 그런게 있는지 조차 몰랐네요 쩝쩝
가끔씩
어떤 문제에 부닥쳤을때 열심히 고민해서 구현했는데..
나중에 보면 관련함수나 Library가 있는경우가 부지기수 더군요...
뭐.. 고민한것이 전혀 손해본것은 아니지만..
삽질하고 있다는 느낌이 들때가..
rivers 님이 쓰신 글 :
: 잘되네요
: 사각형은 지오메트릭펜으로 비스무리 하게 만들었는데
: 이걸로 다시 한번 해봐야겠네요
:
:
: 장성호 님이 쓰신 글 :
: : 음...
: :
: : TCanvas의
Polygon 함수를 이용하면 쉽게 구현이 가능할듯 한데요...
: :
: :
[샘플소스]
: :
: :
: : void __fastcall TForm1::FormCreate(TObject *Sender)
: : {
: : this->DoubleBuffered=true;
: : Image1->Canvas->Rectangle(Rect(0,0,Image1->Width,Image1->Height));
: : }
: : //---------------------------------------------------------------------------
: :
: : TPoint stPt1,stPt2;
: : int iPBrushWid=3;
: : void __fastcall TForm1::Image1MouseDown(TObject *Sender,
: : TMouseButton Button, TShiftState Shift, int X, int Y)
: : {
: : stPt1=Point(X-iPBrushWid,Y-iPBrushWid);
: : stPt2=Point(X+iPBrushWid,Y+iPBrushWid);
: :
: : Image1->Canvas->Pen->Width=1;
: : Image1->Canvas->Brush->Color=clBlack;
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
: : int X, int Y)
: : {
: : if(Shift.Contains(ssLeft))
: : {
: : TPoint cuPt1,cuPt2,cuPt3,cuPt4;
: : cuPt1=Point(X-iPBrushWid,Y-iPBrushWid);
: : cuPt2=Point(X+iPBrushWid,Y+iPBrushWid);
: :
: : TPoint p[5]={stPt1,stPt2,cuPt2,cuPt1,stPt1};
: : Image1->Canvas->Polygon(&p[0],4);
: : stPt1=cuPt1;
: : stPt2=cuPt2;
: : }
: : }
: :
: :
: : 위와같이 하면 왼쪽 위에서 오른쪽 아래로 빗금의 펜브러쉬가 구현됩니다.
: :
: :
[Size]
: : iPBrushWid 값을 조정하면 크기가 조정되구
: :
: :
[방향]
: : cuPt1 ,cuPt2를 구할때
: : y값에 +/- iPBrushWid의 방향을 바꿔버리면 빗금의 방향이 바뀌어 버릴것입니다.
: :
: :
[사각형 Pen브러쉬]
: : 사각형이 좀 문제이긴 한데..
: : 위 방식을 응용하면 쉽게 구현 가능합니다.
: :
: : 그럼..
: :
: :
: : rivers 님이 쓰신 글 :
: : : 윈도우즈 그림판 브러시를 보면 사각형과, 점,
: : : 대각선으로 브러시 모양을 선택할 수 있습니다.
: : : 점이야 펜의 굵기를 늘리면 사용할 수 있지만
: : : 사각형이나 대각선은 어떤식으로 구현해야 할지
: : : 감을 못잡겠습니다.
: : : 사각형의 브러시 모양을 만들어 보려고 마우스가 움직일때마다
: : : 좌표를 따와서 일정크기의 사각형을 계속 그려줬는데
: : : 마우스를 빠르게 움직이면 선이 되는게 아니라
: : : 드문드문 사각형이 나오는 형태로 되더군요.
: : :
: : : 이것을 구현한 예제파일이 있으시면 부탁드립니다.