Æнº(Path)´Â Á÷¼±°ú °î¼±ÀÇ ÁýÇÕÀ¸·Î ±¸¼ºµÈ ±×·¡ÇÈ ¿ÀºêÁ§Æ®ÀÌ´Ù. ¼±ÀÌ Áö³ª°¡´Â °æ·Î¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö¸ç ¿ì¸®¸»·Î ¹ø¿ªÇÏÀÚ¸é ±ËÀû ¶Ç´Â ÀÚÃë¶ó°í ÇÑ´Ù. Æнº ±× ÀÚü´Â ȸ鿡 º¸ÀÌÁö ¾ÊÁö¸¸ º¹ÀâÇÑ Æнº¸¦ ±¸¼ºÇÑ ÈÄ ÇѲ¨¹ø¿¡ ±×¸°´Ù°Å³ª ºê·¯½Ã¸¦ ¸¸µé ¶§ À¯¿ëÇÏ°Ô
»ç¿ëµÈ´Ù. Drawing2D ³×ÀÓ½ºÆäÀ̽º¿¡ Á¤ÀǵǾî ÀÖ´Â
GraphicsPath Ŭ·¡½º·Î Æнº¸¦ Ç¥ÇöÇÑ´Ù. »ý¼ºÀÚ´Â ¿©·¯ °¡Áö ¹öÀüÀÌ ÀÖÁö¸¸ Åë»ó
µðÆúÆ® »ý¼ºÀÚ·Î Æнº¸¦ ¸¸µé¸ç Æнº¿¡ µµÇü Á¤º¸¸¦ Ãß°¡ÇÒ ¶§´Â ´ÙÀ½ ¸Þ¼µå¸¦ »ç¿ëÇÑ´Ù.
public void AddLine (int x1,int y1,int x2,int y2)
public void AddLines (Point[] points)
public void AddEllipse (Rectangle rect)
public void AddBezier (Point pt1,Point pt2,Point
pt3,Point pt4)
public void AddCurve (Point[] points)
public void AddArc (Rectangle rect,float
startAngle,float sweepAngle)
public void AddPie (Rectangle rect, float
startAngle,float sweepAngle)
public void AddPolygon (Point[] points)
public void AddRectangle (Rectangle rect)
public void AddString (string s,FontFamily
family,int style,float emSize,Point origin,StringFormat format)
Æнº¿¡ µµÇüÀ» Ãß°¡ÇÏ´Â ¸Þ¼µå´Â Çϳª°°ÀÌ Add·Î ½ÃÀÛÇϸç Add ´ÙÀ½¿¡ Ãß°¡ÇÏ´Â µµÇüÀÌ ¸í½ÃµÇ¾î ÀÖ´Ù. AddLineÀº Á÷¼±À»
°æ·Î¿¡ Ãß°¡ÇÏ°í AddEllipse´Â Ÿ¿øÀ» °æ·Î¿¡ Ãß°¡ÇÑ´Ù. Àμö´Â
Ãß°¡ÇÏ´Â µµÇü¿¡ ´ëÇÑ ÁÂÇ¥ Á¤º¸ÀÌ¸ç ±×¸®±â ¸Þ¼µå¿Í °ÅÀÇ À¯»çÇÏ´Ù. Á÷¼±Àº ½ÃÀÛÁ¡°ú ³¡Á¡À» ÁöÁ¤ÇÏ°í
Ÿ¿ø°ú »ç°¢ÇüÀº Rectangle ±¸Á¶Ã¼¸¦ ÁöÁ¤ÇÑ´Ù.
Add~ ¸Þ¼µå´Â Æнº¿¡ ÇØ´ç µµÇü¿¡ ´ëÇÑ °æ·Î Á¤º¸¸¦ Ãß°¡ÇÒ »Ó
½ÇÁ¦ ȸ鿡 ±×¸®Áö´Â ¾Ê´Â´Ù. ±×·¡¼ ÆæÀ̳ª ºê·¯½Ã¸¦ ¿ä±¸ÇÏÁö ¾ÊÀ¸¸ç
GraphicsÀÇ ¸â¹öµµ ¾Æ´Ï°í º¯È¯ÀÇ ¿µÇâÀ» ¹ÞÁöµµ ¾Ê´Â´Ù. Àμö·Î Àü´ÞµÈ µµÇüÀÇ Á¤º¸¸¦
Æнº ¿ÀºêÁ§Æ®¿¡ ±â·ÏÇÒ »ÓÀÌ´Ù. Æнº´Â µµÇüÀÇ ÁÂÇ¥ Á¤º¸ÀÏ »ÓÀ̹ǷΠ±× ÀÚü´Â º¸ÀÌÁö ¾Ê´Â´Ù. Æнº¸¦ ȸ鿡 ±×¸®·Á¸é GraphicsÀÇ ´ÙÀ½ µÎ ¸Þ¼µå Áß Çϳª¸¦
È£ÃâÇÑ´Ù.
public void DrawPath (Pen pen,GraphicsPath path)
public void FillPath (Brush brush,GraphicsPath
path)
DrawPath ¸Þ¼µå´Â ÁöÁ¤ÇÑ ÆæÀ¸·Î ÆнºÀÇ ¿Ü°û¼±¸¸ ±×¸°´Ù. FillPath´Â ÁöÁ¤ÇÑ ºê·¯½Ã·Î ÆнºÀÇ ³»ºÎ¸¦ ä¿ì´Âµ¥ ¸¸¾à Æнº°¡ ´ÝÇô ÀÖÁö ¾Ê´Ù¸é ½ÃÀÛÁ¡°ú ³¡Á¡À» ¿¬°áÇÏ¿©
Æó°î¼±À» ¸¸µé¾î ä¿î´Ù. ´ÙÀ½ ¿¹Á¦´Â Æнº·Î Á÷¼± Á¤º¸¸¦ ¸¸µç ÈÄ ±×¸®±â¸¦ ¼öÇàÇÑ´Ù.
PathTest |
using
System; ~ using System.Windows.Forms; using
System.Drawing.Drawing2D; namespace
PathTest { public
partial class Form1 : Form { public
Form1() { InitializeComponent(); } private
void Form1_Paint(object sender, PaintEventArgs e) { GraphicsPath
Path1 = new GraphicsPath(); GraphicsPath
Path2 = new GraphicsPath(); Pen
P = new Pen(Color.Black, 5); P.DashStyle
= DashStyle.DashDotDot; //
Á÷Á¢ ±×¸®±â e.Graphics.DrawLine(P,
10, 10, 70, 100); e.Graphics.DrawLine(P,
70, 100, 130, 10); //
Æнº·Î ¿Ü°û¼± ±×¸®±â Path1.AddLine(10,
110, 70, 200); Path1.AddLine(70,
200, 130, 110); e.Graphics.DrawPath(P,
Path1); //
Æнº ä¿ì±â Path2.AddLine(140,
110, 200, 200); Path2.AddLine(200,
200, 260, 110); e.Graphics.FillPath(Brushes.Blue,
Path2); } } } |
¶È°°Àº ÁÂÇ¥¿¡ ´ëÇØ Á÷¼±À» ±×¸®µÇ ÇÑ ¹øÀº DrawLine ¸Þ¼µå·Î
µÎ °³ÀÇ Á÷¼±À» Á¶ÇÕÇÏ¿© V ÀÚ ¸ð¾çÀ» ±×·È°í ÇÑ ¹øÀº AddLineÀ¸·Î
¶È°°Àº ¸ð¾çÀÇ Æнº¸¦ ¸ÕÀú ±¸¼ºÇÑ ÈÄ DrawPath·Î ±×·È´Ù. ±×¸®°í
µ¿ÀÏÇÑ ¸ð¾çÀÇ Æнº·Î FillPathµµ È£ÃâÇß´Ù.
VÀÚÀÇ ²ÀÁöÁ¡ ºÎºÐÀ» Àß °üÂûÇØ º¸¸é °á°ú°¡ ¹Ì¼¼ÇÏ°Ô ´Ù¸£´Ù. DrawLineÀ¸·Î µÎ °³ÀÇ ¼±À» ±×¸± ¶§´Â ÀÌÁ¡ ¼â¼±ÀÌ Ç×»ó ¼±ÀÇ Ã³À½ºÎÅÍ ´Ù½Ã ½ÃÀÛÇϹǷΠÁ¢ÇÕ ºÎºÐÀÌ ¸Å²ô·´Áö
¸øÇÏÁö¸¸ Æнº·Î ±×¸± ¶§´Â ÇÑ ¹ø¿¡ ±×¸®¹Ç·Î ¹«´Ì°¡ ¿¬¼ÓÀûÀÌ´Ù. À§ ½ÇÇà °á°úÀÇ VÀÚ¸¦ Á÷¼±À¸·Î Æì º¸¸é DrawPath·Î ±×¸° Á÷¼±Àº ¿Ã¹Ù¸¥ ÀÌÁ¡
¼â¼± ¹«´Ì°¡ µÇÁö¸¸ DrawLineÀ¸·Î ±×¸° Á÷¼±Àº Áß°£¿¡ Á¡ÀÌ Çϳª »ý·«µÇ¾î ²÷¾îÁø µíÇÑ ¸ð¾çÀÌ µÈ´Ù.
Æнº´Â °î¼±À̳ª Á÷¼±À» Á¶ÇÕÇÏ¿© ÁÂÇ¥ ÁýÇÕÀ» ¸¸µç ÈÄ ÇÑ ¹ø¿¡ ±×·Á ¿¬°áÁ¡ÀÌ ºÎµå·´´Ù. ½Ç¼± ÆæÀ¸·Î ±×¸°´Ù¸é º° Â÷ÀÌ°¡ ¾øÁö¸¸ ´ë½Ã°¡ ÀÖ´Â ÆæÀº ³ª´©¾î ±×¸®´Â °Í°ú ÇÑ ¹ø¿¡ ±×¸± ¶§ ´ë½ÃÀÇ ¿¬¼Ó¼º¿¡
Â÷ÀÌ°¡ ÀÖ´Ù. À°¾ÈÀ¸·Î ¾ó¸¥ ±¸ºÐµÇÁö ¾ÊÁö¸¸ °íÇ°ÁúÀÇ ±×·¡ÇÈÀº ÀÌ·± Â÷À̵µ ¹«½Ã¸øÇÒ Á¤µµ·Î Áß¿äÇÏ´Ù. FillPath´Â Æнº¸¦ °Á¦·Î ´Ý°í ³»ºÎ¸¦ ÁöÁ¤ÇÑ ºê·¯½Ã·Î ä¿î´Ù. VÀÚ
¸ð¾çÀ» Æó°î¼±À¸·Î ä¿ì¸é ¿ª»ï°¢Çü ¸ð¾çÀÌ µÈ´Ù.
Æнº¿¡ µµÇü Á¤º¸¸¦ Ãß°¡ÇÏ´Â Add~ ¸Þ¼µå°¡ ´Ù¾çÇÏ°Ô Á¦°øµÇ¹Ç·Î
¸¸µé ¼ö ÀÖ´Â ÆнºÀÇ ¸ð¾çÀº °ÅÀÇ ¹«±Ã ¹«ÁøÇÏ´Ù. ¾Æ¹«¸® º¹ÀâÇÑ ¸ð¾çÀÌ¶óµµ Æнº¸¦ ¹Ì¸® ¸¸µé¾î ³õÀ¸¸é
Á¶°Ç¿¡ µû¶ó ÆæÀ̳ª ºê·¯½Ã¸¦ ¹Ù²ã°¡¸ç ¿©·¯ °¡Áö ÇüÅ·Π±×¸± ¼ö ÀÖ°í ÀÌ¹Ì ¿Ï¼ºµÈ °æ·Î Á¤º¸¸¦ È°¿ëÇϹǷΠ¼Óµµ°¡ ºü¸£´Ù. À§ ¿¹Á¦¿¡¼´Â Paint À̺¥Æ®¿¡¼ Æнº¸¦ Á÷Á¢ ¸¸µé¾ú´Âµ¥ ¼Óµµ¸¦
°í·ÁÇÑ´Ù¸é ´Ù¸¥ À̺¥Æ®¿¡¼ ¹Ì¸® ¿¹ºñ µ¿ÀÛÀ» ÃëÇØ ³õ´Â °ÍÀÌ ÁÁ´Ù.
AddString ¸Þ¼µå´Â Æнº¿¡ ¹®ÀÚ¿À» Ãß°¡ÇÑ´Ù. ¹®ÀÚ´Â ¿©·¯ °³ÀÇ Á÷¼±°ú °î¼±ÀÇ Á¶ÇÕÀ¸·Î ±¸¼ºµÇ¸ç ȹÀÌ ¿¬¼ÓµÇÁö ¾Ê°í ²÷¾îÁú ¼öµµ ÀÖ¾î Á÷¼±À̳ª Ÿ¿øº¸´Ù ´õ
º¹ÀâÇÑ µµÇüÀÌ´Ù. "ÇÑ"À̶ó´Â ±ÛÀÚ Çϳª¸¸
º¸´õ¶óµµ Á÷¼± ±¸°£ÀÌ ÀÖ°í °î¼± ±¸°£ÀÌ ÀÖ°í ´Ù¼¸ °³ÀÇ Á¶°¢À¸·Î ³ª´©¾îÁ® ÀÖ´Ù. ±ÛÀÚ°¡ ¸ðÀÎ ¹®ÀÚ¿Àº
´õ º¹ÀâÇÏ´Ù.
AddString ¸Þ¼µå´Â ÆùÆ® °´Ã¼¸¦ ¾²Áö ¾Ê°í ÆùÆ® Æйи®ÀÇ À̸§°ú
½ºÅ¸ÀÏ ±×¸®°í ½Ç¼ö ´ÜÀ§ÀÇ Å©±â¸¦ Àμö·Î Àü´Þ¹Þ´Â´Ù. ¿Ö ÀÌ·¸°Ô µÇ¾î Àִ°¡ Çϸé ÆùÆ® °´Ã¼´Â Æ÷ÀÎÆ®
´ÜÀ§ÀÇ Å©±â¸¦ °¡Áö´Âµ¥ ºñÇØ Æнº¿¡ Ãß°¡µÇ´Â ¹®ÀÚ¿Àº ³í¸® ´ÜÀ§¸¦ ¾µ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ±¸Ã¼ÀûÀÎ Å©±â¸¦
Àμö·Î ¹àÇô¾ß ÇÏ¸ç ½ÇÁ¦ Å©±â´Â Æнº¸¦ ±×¸± ¶§ÀÇ º¯È¯ ¸ðµå¿¡ µû¶ó °áÁ¤µÈ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ÅëÇØ ¹®ÀÚ¿
Æнº¸¦ ¸¸µé°í ³»ºÎ ±¸Á¶¿¡ ´ëÇØ ¿¬±¸ÇØ º¸ÀÚ.
StringPath |
using
System; ~ using System.Windows.Forms; using
System.Drawing.Drawing2D; namespace
StringPath { public
partial class Form1 : Form { public
Form1() { InitializeComponent(); } private
void Form1_Paint(object sender, PaintEventArgs e) { GraphicsPath
Path = new GraphicsPath(); Path.AddString("´ëÇѹα¹", new FontFamily("±Ã¼"), 0,
60, new
Point(10, 10), new StringFormat()); e.Graphics.DrawPath(Pens.Black,
Path); } } } |
Å©±â 60ÀÇ ±Ã¼Ã¼ ÆùÆ®·Î
"´ëÇѹα¹" ¹®ÀÚ¿À» Æнº¿¡ Ãß°¡Çß´Ù.
¼¼ ¹ø° Àμö¸¦ ÅëÇØ ±½°Ô, ±â¿ïÀÓ µîÀÇ ½ºÅ¸ÀÏÀ» ÁöÁ¤ÇÏ°í ¸¶Áö¸· StringFormat °´Ã¼¸¦ ÅëÇØ Á¤·Ä ¹æ½ÄÀ̳ª ÁÙ°£ µîÀ» ÁöÁ¤ÇÑ´Ù.
RectangleÀ» ¹Þ´Â ¹öÀüÀ» »ç¿ëÇÏ¸é »ç°¢¿µ¿ª¾È¿¡ ¹®ÀÚ¿À» ÀÚµ¿ °³ÇàÇÏ¿© Ãâ·ÂÇÒ ¼öµµ ÀÖ´Ù. ÀÌ
Æнº°¡ ¾î¶² ¸ð¾çÀ» °¡Áö´Â°¡´Â Á÷Á¢ ±×·Á ºÁ¾ß ÇÑ´Ù. ÀÏ´Ü
DrawPath·Î ¿Ü°û¼±¸¸ ±×·Á º¸¾Ò´Ù.
¹®ÀÚ¿À» Æнº¿¡ Ãß°¡ÇÏ¸é ±ÛÀÚ¸¦ ±¸¼ºÇÏ´Â ¿Ü°û¼±ÀÇ ±ËÀûÀÌ Æнº¿¡ ±â·ÏµÈ´Ù. Æ®·çŸÀÔ
ÆùÆ®¿¡ ÀúÀåµÈ ¿Ü°û¼± Á¤º¸°¡ Æнº¿¡ ±â·ÏµÈ´Ù. ÀÌ·± ¿Ü°û¼± ÃßÃâÀº Æнº°¡ ¾Æ´Ï¸é ±¸ÇöÇϱ⠾î·Æ°í ¼Óµµµµ
Á¦´ë·Î ³ª¿ÀÁö ¾Ê´Â´Ù. À̹ø¿¡´Â ´ÙÀ½ ÄÚµå·Î Æнº¸¦ ä¿ö º¸ÀÚ. ÆĶõ»öÀ¸·Î
Æнº¸¦ ä¿ì¸é DrawStringÀ¸·Î ¹®ÀÚ¿À» Á÷Á¢ Ãâ·ÂÇÏ´Â °Í°ú °°¾Æ ±»ÀÌ Æнº¸¦ ¾µ ÇÊ¿ä°¡ ¾ø´Ù.
e.Graphics.FillPath(Brushes.Blue, Path);
¹®ÀÚ¿·Î Æнº¸¦ ¸¸µé¾î º¸¸é Æнº°¡ ´Ü¼øÈ÷ ÇϳªÀÇ µµÇüÀ¸·Î¸¸ ±¸¼ºµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ¿©·¯ °³ÀÇ ÀÛÀº µµÇüÀÌ ÇϳªÀÇ Æнº¸¦ ±¸¼ºÇÏ¸ç °¢ µµÇüÀº ¿·Á Àְųª ´ÝÇô ÀÖ´Ù. À̶§ Àüü Æнº¸¦ ±¸¼ºÇÏ´Â ÀÛÀº µµÇüÀ» ¼ºêÆнº ¶Ç´Â ¸ð¾ç(Figure)À̶ó°í
ÇÑ´Ù. À§ ±×¸²ÀÇ "¹Î"ÀÚ¿¡¼ Ãʼº ¹ÌÀ½, Áß¼º ÀÌ, ¹Þħ ´ÏÀº µîÀÌ ¸ðµÎ ¼ºêÆнºÀÌ´Ù. GraphicsPath Ŭ·¡½º´Â
ÆнºÀÇ ³»ºÎ ±¸Á¶¸¦ Á÷Á¢ ´Ù·ç´Â ÇÁ·ÎÆÛƼ¸¦ Á¦°øÇÑ´Ù.
ÇÁ·ÎÆÛƼ |
ŸÀÔ |
¼³¸í |
PathPoints |
PointF[]¨Þ |
Æнº¸¦ ±¸¼ºÇÏ´Â Á¡ÀÇ ¹è¿ÀÌ´Ù. PointF [] ŸÀÔÀÌ´Ù. |
PathCount |
int ¨Þ |
Æнº¿¡ ¸î °³ÀÇ Á¡ÀÌ ÀÖ´ÂÁö °³¼ö¸¦ Á¶»çÇÑ´Ù. |
PathTypes |
byte[]¨Þ |
Æнº¸¦ ±¸¼ºÇÏ´Â °¢ ÁÂÇ¥ÀÇ Å¸ÀÔ Á¤º¸ÀÌ´Ù. |
PathData |
PathData ¨Þ |
PathPoints¿Í PathTyesÀÇ
¹è¿À» ¸â¹ö·Î °¡Áö´Â °´Ã¼ÀÌ´Ù. |
FillMode |
FillMode |
µµÇüÀÇ ³»ºÎ¸¦ ¾î¶»°Ô ä¿ï °ÍÀΰ¡¸¦ ÁöÁ¤Çϴ ä¿ì±â ¸ðµåÀÌ´Ù. |
PathPoints ÇÁ·ÎÆÛƼ¿¡´Â Æнº¸¦ ±¸¼ºÇÏ´Â Á÷¼± ¶Ç´Â °î¼±ÀÇ
ÁÂÇ¥ Á¤º¸°¡ ¹è¿·Î ÀúÀåµÇ¾î ÀÖÀ¸¸ç PathCount´Â
PathPoints ¹è¿¿¡ ÀúÀåµÈ Á¡ÀÇ °³¼öÀÌ´Ù. ´Ù¾çÇÑ ÁÂÇ¥ °ø°£¿¡ È°¿ëÇÒ ¼ö ÀÖµµ·Ï
¹è¿ ¿ä¼ÒÀÇ Å¸ÀÔÀº Á¤¹Ðµµ°¡ ³ôÀº ½Ç¼öÇüÀ¸·Î °íÁ¤µÇ¾î ÀÖ´Ù. ÀÌ Á¡À» ÀÌ¾î ±×¸®¸é ÆнºÀÇ ¿Ü°û¼±ÀÌ ±×·ÁÁö¹Ç·Î DrawPath ¸Þ¼µåÀÇ µ¿ÀÛÀ» ±×´ë·Î µû¶óÇÒ ¼ö ÀÖ´Ù.
Æнº´Â Çϳª·Î ¿¬°áµÈ Æó°î¼±ÀÌ ¾Æ´Ï¶ó ¿©·¯ °³ÀÇ ¼ºêÆнº·Î ±¸¼ºµÇ¹Ç·Î ÁÂÇ¥¸¸ ÀúÀåÇؼ´Â ¾ÈµÇ¸ç °¢ ÁÂÇ¥ÀÇ ¼º°Ý¿¡
´ëÇÑ Á¤º¸µµ ÇÊ¿äÇÏ´Ù. ÀÌ Á¤º¸°¡ PathTypes ÇÁ·ÎÆÛƼÀ̸ç
Á¡ÀÇ °³¼ö¿Í °°Àº Å©±âÀÇ ¹è¿·Î µÇ¾î ÀÖ´Ù. PathTypesÀÇ °¢ ¿ä¼Ò´Â ´ÙÀ½°ú °°Àº PathPointType Ç÷¡±×·Î ±¸¼ºµÇ´Â byte ŸÀÔÀÌ´Ù.
¿°Å°ª |
¼³¸í |
Start |
¼ºêÆнºÀÇ ½ÃÀÛÁ¡ÀÌ´Ù. |
Line |
¼±ºÐÀÌ´Ù. |
Bezier |
°î¼±ÀÌ´Ù. ´Ù¸¥ ÇüÅÂÀÇ °î¼±Àº º£Áö¾î °î¼±À¸·Î º¯È¯µÇ¾î ÀúÀåµÈ´Ù. |
Bezier3 |
3Â÷¿ø Å¥ºò °î¼±ÀÌ´Ù. Bezier¿Í
½ÇÁ¦°ªÀº °°´Ù. |
PathTypeMask |
À§ ¼¼ °ªÀÇ ¸¶½ºÅ©°ªÀÌ´Ù. ¾Æ·¡ÂÊÀÇ Ç÷¡±×¸¦ Á¦°ÅÇÏ°í ÁÂÇ¥ÀÇ ¼ºÁú¸¸ Á¶»çÇÏ°í
½ÍÀ» ¶§ ÀÌ °ªÀ¸·Î ¸¶½ºÅ© ¿ÀÇÁÇÑ ÈÄ ºñ±³ÇÑ´Ù. |
DashMode |
ÇØ´ç ¼±ºÐÀÌ Æļ±ÀÓÀ» Ç¥½ÃÇÑ´Ù. |
PathMarker |
Æнº»óÀÇ ÇÑ ÁöÁ¡À» Ç¥ÇöÇÏ´Â ¸¶Ä¿ÀÌ´Ù. |
CloseSubpath |
¼ºêÆнºÀÇ ³¡ÀÌ´Ù. |
Start, Line, Bezier´Â Æнº¸¦ ±¸¼ºÇÏ´Â °¢ ¼±ºÐÀÇ ¼ºÁúÀ»
³ªÅ¸³»¸ç DashMode, PathMarker, CloseSubpath´Â ÀÌ °ª°ú ORµÇ¾î ±â¾ïµÈ´Ù. PathPoints¿Í PathTypes ÇÁ·ÎÆÛƼ¸¦ Àоî ÁÂÇ¥¸¦ ¼øȸÇÏ¸é¼ ¿¬°áÇϸé Æнº¸¦ ±×´ë·Î ±×¸± ¼ö ÀÖ´Ù. ´ÙÀ½ ÄÚµå´Â DrawPathÀÇ µ¿ÀÛÀ» ±×´ë·Î µû¶óÇϴµ¥ DrawPath ¸Þ¼µåÀÇ ³»ºÎµµ ¾Æ¸¶ ÀÌ·¸°Ô ÀÛ¼ºµÇ¾î ÀÖÀ» °ÍÀÌ´Ù.
PointF[] arP = Path.PathPoints;
Text = Path.PointCount.ToString();
for (int i = 0; i < arP.Length; i++) {
if
(Path.PathTypes[i] != (byte)PathPointType.Start) {
e.Graphics.DrawLine(Pens.Black,
arP[i - 1], arP[i]);
}
System.Threading.Thread.Sleep(1);
}
PathPoints ¹è¿À» ¼øȸÇÏ¸é¼ °¢ ÁÂÇ¥¸¦ Á÷¼±À¸·Î ¿¬°áÇß´Ù. ŸÀÌƲ ¹Ù¿¡´Â ÁÂÇ¥ÀÇ °³¼ö¸¦ Ãâ·ÂÇÏ°í ±×¸®´Â °úÁ¤À» ½Ã°¢ÀûÀ¸·Î º¸±â À§ÇØ Á÷¼± Çϳª¸¦ ±×À» ¶§¸¶´Ù Sleep ¸Þ¼µå·Î ½Ã°£À» Á¶±Ý Áö¿¬½ÃÄ×´Ù. ¸¶Ä¡ ¿¬ÇÊ·Î ±ÛÀÚ¸¦ ¾²µí
¹®ÀÚ¿ÀÌ Ãâ·ÂµÇ´Âµ¥ ±×·ÁÁö´Â °úÁ¤À» ºÁ¾ß ÇϹǷΠÁ÷Á¢ ½ÇÇàÇØ º¸±â ¹Ù¶õ´Ù.
ŸÀÌƲ ¹Ù¿¡´Â °æ·ÎÁ¡ÀÇ °³¼öÀÎ 969°¡ Ãâ·ÂµÇ´Âµ¥ ¹®ÀÚ¿ Çϳª¸¦ ÀúÀåÇϴµ¥
°ÅÀÇ 1000°³ÀÇ ÁÂÇ¥°¡ ÇÊ¿äÇÏ´Ù. ¹è¿»óÀÇ ÁÂÇ¥¸¦ ¼øȸÇϸç
ÀÌÀü ÁÂÇ¥¿Í ÇöÀç ÁÂÇ¥¸¦ ¿¬°áÇÏ¿© Á÷¼±À» ±×¸®µÇ ´Ü ÁÂÇ¥ÀÇ Å¸ÀÔÀÌ StartÀÎ °æ¿ì´Â »õ·Î¿î ¼ºêÆнºÀÇ
½ÃÀÛÀ̹ǷΠÀÌÀü ÁÂÇ¥¿Í ¿¬°áÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. ÀÌ Ã³¸®°¡ ¿Ö ÇÊ¿äÇÑ°¡´Â Á¶°Ç¹®À» Àá½Ã »© º¸¸é ¾Ë ¼ö
ÀÖ´Ù. ·çÇÁ¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.
PointF[] arP = Path.PathPoints;
for (int i = 1; i < arP.Length; i++) {
e.Graphics.DrawLine(Pens.Black,
arP[i - 1], arP[i]);
System.Threading.Thread.Sleep(1);
}
À½¼ö ÷ÀÚ¸¦ Àо ¾ÈµÇ¹Ç·Î ·çÇÁÀÇ ½ÃÀÛ Ã·ÀÚ¸¦ 1·Î º¯°æÇß°í Á¶°Ç
Á¡°Ë¾øÀÌ ¹è¿»óÀÇ ¸ðµç ÁÂÇ¥¸¦ Á÷¼±À¸·Î ¹«½ÄÇÏ°Ô ¿¬°áÇß´Ù.
¼ºêÆнº±îÁö ÀüºÎ ¿¬°áµÇ¾î ±×·ÁÁø´Ù. ¸¶Ä¡ Á¾ÀÌ¿¡ ±ÛÀ» ¾µ ¶§ ¿¬ÇÊÀ»
¶¼Áö ¾Ê°í ±×¸° °Í°ú °°´Ù. °æ°è Ç¥½Ã¸¦ À§ÇØ ¾îµð°¡ ¼ºêÆнºÀÇ ½ÃÀÛÀÎÁö Ç¥½ÃÇØ¾ß ÇÏ¸ç ±×·¡¼ PathTypes ÇÁ·ÎÆÛƼ°¡ ÇÊ¿äÇÏ´Ù. Âü°í·Î Á¤È®ÇÑ Á¶°Ç¹®Àº ´ÙÀ½°ú
°°ÀÌ ½á¾ß ¿Ç´Ù. PathTypes°¡ ºñÆ® Çʵå¶ó ¸¶½ºÅ© ¿ÀÇÁÇÑ ÈÄ ºñ±³ÇØ¾ß ÇÏÁö¸¸ ù ½ÃÀÛ¿¡´Â ¸¶½ºÅ·ÀÌ
²À ÇÊ¿äÄ¡ ¾Ê¾Æ °£´ÜÇÏ°Ô ¾´ °ÍÀÌ´Ù.
if ((Path.PathTypes[i] &
(byte)PathPointType.PathTypeMask) != (byte)PathPointType.Start)
PathData ÇÁ·ÎÆÛƼ´Â
PathPoints¿Í PathTypes µÎ Á¤º¸¸¦ ¸â¹ö·Î °¡Áö´Â Ŭ·¡½ºÀε¥ ÇϳªÀÇ °´Ã¼
¾È¿¡ µÎ °³ÀÇ ¹è¿ÀÌ µé¾î ÀÖ´Ù. µ¿ÀÏÇÑ Á¤º¸¿¡ ´ëÇØ ÀÌÁßÀÇ ÇÁ·ÎÆÛƼ¸¦ Á¦°øÇÏ´Â ¼ÀÀε¥ PathData ÇÁ·ÎÆÛƼ·Îµµ ¼øȸÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº µ¿ÀÏÇÑ µ¿ÀÛÀ»
ÇÏ´Â ÄÚµåÀÌ¸ç ½ÇÇà °á°úµµ ´ç¿¬È÷ ¶È°°´Ù.
PathData pd = Path.PathData;
Text = pd.Points.Length.ToString();
for (int i = 0 ; i < pd.Points.Length; i++) {
if
(pd.Types[i] != (byte)PathPointType.Start) {
e.Graphics.DrawLine(Pens.Black,
pd.Points[i-1], pd.Points[i]);
}
System.Threading.Thread.Sleep(1);
}
Æнº¿¡´Â Á÷¼±ÀÇ ÁÂÇ¥¿¡ ´ëÇÑ Á¤º¸ ¿Ü¿¡ ¸¶Ä¿¶ó´Â Ãß°¡ Á¤º¸¸¦ ´õ »ðÀÔÇÒ ¼ö ÀÖ´Ù. Add~ ¸Þ¼µå·Î ¸¸µç Æнº¿¡´Â º°µµÀÇ ¸¶Ä¿°¡ »ðÀÔµÇÁö ¾ÊÁö¸¸ Æнº¸¦ ¸¸µå´Â Áß¿¡ ´ÙÀ½ µÎ ¸Þ¼µå¸¦ È£ÃâÇÏ¿©
ÀǵµÀûÀ¸·Î ¸¶Ä¿¸¦ Ãß°¡Çϰųª Á¦°ÅÇÒ ¼ö ÀÖ´Ù.
public void SetMarkers ()
public void ClearMarkers ()
¸¶Ä¿´Â Æнº¿¡ ÀúÀ常 µÉ »Ó ÆнºÀÇ ¸ð¾çÀ̳ª Ãâ·Â °á°ú¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.
ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Æ¯¼öÇÑ ¸ñÀûÀ¸·Î Æнº ³»ÀÇ ÇÑ ÁöÁ¡¿¡ Ç¥½ÄÀ» ³²±â°í ½ÍÀ» ¶§ ¸¶Ä¿¸¦ ã¾Æ È°¿ëÇÑ´Ù.
Æнº³»¿¡ ÀúÀåµÇ´Â »ç¿ëÀÚ Á¤ÀÇ µ¥ÀÌÅÍÀÎ ¼ÀÀÌ´Ù. ¿¹¸¦ µé¾î ¸¶Ä¿°¡ ÀÖ´Â À§Ä¡¿¡¼ 0.5ÃÊ°£ ½°À¸·Î½á ¼ºêÆнº¸¦ °¢°¢ µû·Î ±×¸®´Â °Íó·³ Èä³»³¾ ¼ö ÀÖ´Ù.
Æнº Çϳª¿¡´Â ¿©·¯ °³ÀÇ ¼ºêÆнº°¡ Æ÷ÇԵȴÙ. AddString °°ÀÌ
º¹ÀâÇÑ µµÇüÀ» Ãß°¡ÇÏ´Â ¸Þ¼µå´Â ¹®ÀÚ¸¦ ±¸¼ºÇϴ ȹ¿¡ ´ëÇÑ Á¤º¸¸¦ ½º½º·Î ¾Ë°í ÀÖÀ¸¹Ç·Î ¾Ë¾Æ¼ ¼ºêÆнº¸¦ Àß ³ª´©°ÚÁö¸¸ Á÷Á¢ ±×¸± ¶§´Â ¾îµð±îÁö°¡
ÇϳªÀÇ ¼ºêÆнºÀÎÁö ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸ÀÚ.
FigureTest |
using
System; ~ using System.Windows.Forms; using
System.Drawing.Drawing2D; namespace
FigureTest { public
partial class Form1 : Form { public
Form1() { InitializeComponent(); } private
void Form1_Paint(object sender, PaintEventArgs e) { GraphicsPath
Path = new GraphicsPath(); Path.AddLine(10,
10, 50, 50); Path.AddLine(100,
50, 140, 10); Path.AddLine(140,
80, 100, 120); Path.AddLine(100,
150, 140, 190); e.Graphics.DrawPath(Pens.Black,
Path); } } } |
Æнº¸¦ Çϳª ¸¸µé°í AddLine ¸Þ¼µå·Î 4°³ÀÇ Á÷¼±À» Ãß°¡Çß´Ù. ±×¸®°í ÆнºÀÇ ¸ð¾çÀ» È®ÀÎÇϱâ À§ÇØ DrawPath·Î ȸ鿡 Ãâ·ÂÇß´Ù. ´ÙÀ½°ú °°Àº ±«»óÇÑ ¸ð¾çÀÇ µµÇüÀÌ
±×·ÁÁø´Ù.
AddLine ¸Þ¼µå·Î 4°³ÀÇ
´ë°¢¼±¸¸ ±×·È´Âµ¥ °á°ú·Î ¸¸µé¾îÁø Æнº´Â ¸ðµç ´ë°¢¼±ÀÌ ¿¬°áµÇ¾î ÀÖ´Ù. Æнº´Â º°´Ù¸¥ ÁöÁ¤ÀÌ ¾øÀ¸¸é
¶³¾îÁø Á÷¼±À» ÀÚµ¿À¸·Î ¿¬°áÇÏ¿© °°Àº ¼ºêÆнº¿¡ Æ÷ÇÔ½ÃÄÑ ¹ö¸°´Ù. À§ ±×¸²¿¡¼ ´ë°¢¼±¸¸ AddLineÀ¸·Î Ãß°¡ÇÑ °ÍÀÌ°í ¼öÆò, ¼öÁ÷¼±Àº ¿¬°áÀ» À§ÇØ ÀÚµ¿À¸·Î
Ãß°¡µÈ °ÍÀÌ´Ù. ÆнºÀÇ ÀÌ·± ±âº» µ¿ÀÛÀ» ¹Ù²Ù·Á¸é Áß°£ Áß°£¿¡ ´ÙÀ½ ¸Þ¼µå¸¦ È£ÃâÇÑ´Ù.
public void StartFigure ()
public void CloseFigure ()
public void CloseAllFigures ()
¸Þ¼µå À̸§¿¡ ÀÖ´Â Figure¶ó´Â ¸»Àº ¼ºêÆнº¿Í °°Àº ¶æÀÌ´Ù. StartFigure ¸Þ¼µå´Â ¿©±â¼ºÎÅÍ »õ·Î¿î ¼ºêÆнº¸¦ ½ÃÀÛÇÑ´Ù´Â ¶æÀ̸ç ÀÌÀüÀÇ ¼ºêÆнº¿Í ¿¬°áÀ» ²÷´Â´Ù. ÀÌ ¸Þ¼µå È£Ãâ ÈÄ¿¡ ±â·ÏµÇ´Â Á¤º¸´Â »õ·Î¿î ¼ºêÆнº¸¦ ±¸¼ºÇÑ´Ù. Äڵ带
´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ. µÎ °³ÀÇ Á÷¼±À» Ãß°¡ÇÑ ÈÄ
StartFigure¸¦ È£ÃâÇÏ¿© »õ·Î¿î ¼ºêÆнº¸¦ ½ÃÀÛÇß´Ù. µû¶ó¼ ¾Õ µÚÀÇ Á÷¼±Àº ¼·Î
´Ù¸¥ ¼ºêÆнº°¡ µÇ¾î ²÷¾îÁø´Ù.
Path.AddLine(10, 10, 50, 50); Path.AddLine(100, 50, 140, 10); Path.StartFigure(); Path.AddLine(140, 80, 100, 120); Path.AddLine(100, 150, 140, 190); |
|
ÀÌ Æнº´Â µÎ °³ÀÇ ¼ºêÆнº·Î ±¸¼ºµÈ´Ù. ¸¸¾à ¸Å AddLine ¸Þ¼µå È£Ã⸶´Ù StartFigure È£ÃâÀ» »ðÀÔÇÑ´Ù¸é
´ë°¢¼± 4°³¸¸ ±×·ÁÁö¸ç ¼ºêÆнºÀÇ °³¼ö´Â 4°³°¡ µÈ´Ù. CloseFigure ¸Þ¼µå´Â Áö±Ý±îÁö ¸¸µç ¼ºêÆнº¸¦ ´Ý´Âµ¥ ¸¸¾à ¼ºêÆнºÀÇ ½ÃÀÛÁ¡°ú ³¡Á¡ÀÌ ¿¬°áµÇ¾î ÀÖÁö
¾Ê´Ù¸é °Á¦·Î ¿¬°áÇÏ¿© ´ÝÈù ¼ºêÆнº¸¦ ¸¸µç´Ù. Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.
Path.AddLine(10, 10, 50, 50); Path.AddLine(100, 50, 140, 10); Path.CloseFigure(); Path.AddLine(140, 80, 100, 120); Path.AddLine(100, 150, 140, 190); Path.CloseFigure(); |
|
Á÷¼± µÎ °³ ±ß°í ¼ºêÆнº¸¦ ´Ý¾Ò´Ù. ±×¸®°í ¶Ç µÎ °³¸¦ ±ß°í ¼ºêÆнº¸¦
´Ý¾Ò´Ù. µÎ °³ÀÇ Á÷¼±Àº ´ÝÈù µµÇüÀÌ µÇ¸ç ¶ÇÇÑ µÎ °³ÀÇ ¼ºê Æнº·Î ºÐ¸®µÈ´Ù.
CloseAllFigure ¸Þ¼µå´Â ¸ðµç ¼ºêÆнº¸¦ ´Ý´Â´Ù. Add~ ¸Þ¼µå·Î Æнº¿¡ µµÇüÀ» Ãß°¡ÇÒ ¶§´Â ¼ºêÆнº¸¦ ¾îµð¼ ²÷À» °ÍÀΰ¡¸¦ »ó±âÀÇ ¸Þ¼µå·Î ÀûÀýÈ÷ ÅëÁ¦Çؾß
ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¸ðµç µµÇüÀÌ Çϳª·Î ¿¬°áµÈ Æнº¸¸ ¸¸µé ¼ö ÀÖ´Ù.
´ÙÀ½ ¸Þ¼µå´Â Æнº¿¡ ¶Ç ´Ù¸¥ Æнº¸¦ ¿¬°áÇÑ´Ù.
public void AddPath (GraphicsPath addingPath,
bool connect)
°¢°¢ µû·Î ¸¸µç µÎ °³ÀÇ Æнº¸¦ Çϳª·Î ÇÕÄ£´Ù. ù ¹ø° Àμö´Â µÚ¿¡
µ¡ºÙÀÏ Æнº¸¦ ÁöÁ¤Çϴµ¥ ÀÌ ÆнºÀÇ ÁÂÇ¥°¡ È£Ãâ °´Ã¼ÀÇ ³¡ ÁÂÇ¥ ´ÙÀ½¿¡ Ãß°¡µÈ´Ù. µÎ ¹ø° Àμö connect´Â »õ·Î Ãß°¡µÇ´Â Æнº°¡ ±âÁ¸ ¼ºêÆнº¿¡ °è¼Ó Ãß°¡µÉ °ÍÀΰ¡ ¾Æ´Ï¸é ±âÁ¸ Æнº¸¦ ÀÏ´Ü ´Ý°í »õ·Î¿î
¼ºêÆнº¸¦ ½ÃÀÛÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù.
´ÙÀ½ ¿¹Á¦´Â À̺¥Æ® Àå¿¡¼ ¸¸µé¾ú´ø Curve ¿¹Á¦¿¡ È¸é º¹±¸ ±â´ÉÀ»
´õÇÑ °ÍÀÌ´Ù. ÀÚÀ¯ °î¼±Àº ¸¶¿ì½º°¡ Áö³ª°£ ÁÂÇ¥ÀÇ ÁýÇÕÀ̹ǷΠÆнº¸¦ »ç¿ëÇÏ¸é ¸ðµç °î¼± Á¤º¸¸¦ ¼Õ½±°Ô
ÀúÀåÇÒ ¼ö ÀÖ´Ù. ArrayList·Î Á÷¼±ÀÇ ÁÂÇ¥¸¦ ÀúÀåÇÏ´Â ¹æ¹ýµµ °¡´ÉÇÏÁö¸¸ Æнº ÀÚü°¡ Ä÷º¼ÇÀ̹ǷÎ
µû·Î Ä÷º¼ÇÀ» ¾µ ÇÊ¿ä°¡ ¾ø´Ù. Æнº¿¡ ´ëÇÑ °¡Àå ½Ç¿ëÀûÀÎ È°¿ë ¿¹Á¦ÀÌ´Ù.
PathCurve |
using
System; ~ using System.Windows.Forms; using
System.Drawing.Drawing2D; namespace
PathCurve { public
partial class Form1 : Form { GraphicsPath
Curve = new GraphicsPath(); private
int x, y; public
Form1() { InitializeComponent(); } private
void Form1_MouseDown(object sender, MouseEventArgs e) { if
(e.Button == MouseButtons.Left) { x
= e.X; y
= e.Y; Curve.StartFigure(); } } private
void Form1_MouseMove(object sender, MouseEventArgs e) { if
(Capture && e.Button == MouseButtons.Left) { Curve.AddLine(x,
y, e.X, e.Y); Graphics
G = CreateGraphics(); G.DrawLine(Pens.Black,
x, y, e.X, e.Y); x
= e.X; y
= e.Y; G.Dispose(); } } private
void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawPath(Pens.Black,
Curve); } } } |
GraphicsPath °´Ã¼
Curve¸¦ Çʵå·Î ¼±¾ðÇÏ°í ¸¶¿ì½º ¹öÆ°À» ´©¸¦ ¶§ »õ·Î¿î ¼ºêÆнº¸¦ ½ÃÀÛÇÑ´Ù. ÀÌÀü¿¡
±×·È´ø °î¼±°ú´Â ¿¬°áÇÏÁö ¸»¾Æ¾ß ÇϹǷΠStartFigure ¸Þ¼µå·Î °î¼±À» ºÐ¸®ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¸¶¿ì½º°¡ À̵¿Çϸé AddLine ¸Þ¼µå·Î ÀÌÀü ÁÂÇ¥¿Í ÇöÀç ÁÂÇ¥¸¦
¿¬°áÇÏ´Â Á÷¼±À» Æнº¿¡ Ãß°¡ÇÑ´Ù. ¸ðµç °î¼± Á¤º¸°¡ Æнº¿¡ °í½º¶õÈ÷ ÀúÀåµÇ¾î ÀÖÀ¸¹Ç·Î Paint À̺¥Æ®¿¡¼´Â DrawPath ¸Þ¼µå¸¸ È£ÃâÇÏ¸é µÈ´Ù.
´ÙÀ½ ¸Þ¼µå´Â Æнº ÀÚü¸¦ °ü¸®ÇÑ´Ù. À̸§ÀÌ ¹«Ã´ Á÷°üÀûÀε¥´Ù º°´Ù¸¥
Àμö°¡ ¾ø¾î »ç¿ëÇϱâ´Â ¾ÆÁÖ ½±´Ù. ÇÊ¿äÇÒ ¶§ È£Ã⸸ ÇÏ¸é µÈ´Ù.
public void Reset ()
public void Reverse ()
public RectangleF GetBounds ()
public PointF GetLastPoint ()
ResetÀº ÆнºÀÇ ÁÂÇ¥¸¦ ¸ðµÎ »èÁ¦ÇÏ°í FillMode¸¦ µðÆúÆ®ÀÎ Alternate·Î µÇµ¹¸°´Ù. Æнº¸¦ ¿ÏÀüÈ÷ »õ·Î ¸¸µå´Â °Í°ú °°´Ù. Reverse ¸Þ¼µå´Â ÁÂÇ¥ÀÇ
¼ø¼¸¦ ¹Ý´ë·Î µÚÁý´Â´Ù. ¹°·Ð ¹Ý´ë·Î µÚÁý¾î ºÃÀÚ ¼ø¼¸¸ ´Ù¸¦ »Ó Á¤º¸ ÀÚü°¡ ´Þ¶óÁö´Â °ÍÀº ¾Æ´Ï¹Ç·Î
±×·ÁÁö´Â ¸ð¾çÀº µ¿ÀÏÇÏ´Ù. StringPath ¿¹Á¦¿¡¼ ¼øȸ¸¦ Çϱâ Àü¿¡ ÀÌ ¸Þ¼µå¸¦ È£ÃâÇϸé "±¹¹ÎÇÑ´ë"½ÄÀ¸·Î ¿ì¿¡¼ Á·Π±ÛÀÚ°¡ °Å²Ù·Î ½áÁöµÇ
Ãâ·Â °á°ú´Â °°´Ù.
GetBounds ¸Þ¼µå´Â Æнº¸¦ °¨½Î´Â »ç°¢¿µ¿ªÀ» Á¶»çÇÑ´Ù. Æнº ÁÖÀ§¿¡ »ç°¢ÇüÀÇ Àå½Ä¹°À» ±×¸°´Ù°Å³ª Æнº°¡ µé¾î°¥¸¸ÇÑ Å©±â¸¦ °è»êÇÒ ¶§ À¯¿ëÇÏ´Ù. GetLastPoint´Â À̸§ ±×´ë·Î Last·Î ÀúÀåµÈ Point¸¦ GetÇÑ´Ù. Æнº¸¦
±×¸° ÈÄ ÀÌÈĺÎÅÍ ÀÛµµ ¸Þ¼µå¸¦ Á÷Á¢ È£ÃâÇÏ¿© ÀÌ¾î ±×¸®±â¸¦ ÇÏ°í ½ÍÀ» ¶§ ÆнºÀÇ ¸¶Áö¸· ÁÂÇ¥¸¦ Á¶»çÇÑ´Ù. ´ÙÀ½
µÎ ¸Þ¼µå´Â ƯÁ¤ÇÑ Á¡ÀÌ Æнº¿¡ ¼ÓÇÏ´ÂÁö Á¶»çÇÑ´Ù.
public bool IsVisible (Point point)
public bool IsOutlineVisible (Point point,Pen
pen)
IsVisibleÀº ÁöÁ¤ÇÑ Á¡ÀÌ Æнº ³»ºÎ¿¡ ÀÖÀ» ¶§ true¸¦ ¸®ÅÏÇÑ´Ù. ´ÝÈù Æó°î¼±ÀÇ ³»ºÎ¿¡ ÀÖÀ» ¶§µµ true¸¦ ¸®ÅÏÇÑ´Ù. IsOutlineVisibleÀº ÁöÁ¤ÇÑ Á¡ÀÌ
ÆнºÀÇ ¿Ü°û¼±¿¡ ÀÖ´ÂÁö Á¶»çÇÑ´Ù. Àμö·Î ÆæÀ» Àü´ÞÇϴµ¥ ÀÌ ÆæÀ¸·Î ÆнºÀÇ ¿Ü°û¼±À» ±×À» ¶§ ÁöÁ¤ÇÑ
Á¡ÀÌ ÆнºÀÇ ¿Ü°û¼±°ú ¸¸³ª´ÂÁö Á¡°ËÇÑ´Ù. ÆæÀÇ ±½±â°¡ 1À̶ó¸é
Á¤È®ÇÏ°Ô ¿Ü°û¼± À§¿¡ ÀÖÀ» ¶§¸¸ true¸¦ ¸®ÅÏÇÏÁö¸¸ ÆæÀÌ ±½´Ù¸é ¿Ü°û¼±°ú ¾î´À Á¤µµ ¶³¾îÁ® À־ true¸¦ ¸®ÅÏÇÑ´Ù.
PathIsVisible |
using
System; ~ using System.Windows.Forms; using
System.Drawing.Drawing2D; using
System.Media; namespace
PathIsVisible { public
partial class Form1 : Form { private
GraphicsPath Path; public
Form1() { InitializeComponent(); Path
= new GraphicsPath(); StringFormat
sm = new StringFormat(); Path.AddString("ÇÑ", new FontFamily("±Ã¼"), 0,
200, new Point(10, 10), sm); } private
void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawPath(new
Pen(Color.Blue, 5), Path); } private
void Form1_MouseDown(object sender, MouseEventArgs e) { if
(e.Button == MouseButtons.Left) { if
(Path.IsVisible(e.Location) == true) { SystemSounds.Beep.Play(); } } if
(e.Button == MouseButtons.Right) { if
(Path.IsOutlineVisible(e.Location, new Pen(Color.Black, 5)) == true) { SystemSounds.Asterisk.Play(); } } } } } |
»ý¼ºÀÚ¿¡¼ 200Çȼ¿ Å©±âÀÇ ±Ã¼ ÆùÆ®·Î "ÇÑ" ±ÛÀÚ¸¦ °¡Áö´Â Æнº¸¦ ÀÛ¼ºÇØ µÎ¾ú´Ù. Æнº´Â Graphics¿Í Á÷Á¢ÀûÀÎ »ó°üÀÌ ¾ø°í ȸ鿡 ¹Ù·Î Ãâ·ÂµÇ´Â
°Íµµ ¾Æ´Ï¾î¼ »ý¼ºÀÚ¿¡¼ ¹Ì¸® ¸¸µé¾î µÑ ¼ö ÀÖ¾î ¼Óµµ¿¡ À¯¸®ÇÏ´Ù. Paint À̺¥Æ®¿¡¼ ÆнºÀÇ ¿Ü°û¼±À»
ȸ鿡 Ãâ·ÂÇÑ´Ù. 5Çȼ¿ ±½±âÀÇ ÆĶõ»öÀ¸·Î "ÇÑ"ÀÚ°¡ ³ªÅ¸³´Ù.
MouseDown À̺¥Æ®¿¡¼ Ŭ¸¯ÇÑ ÁöÁ¡ÀÌ ÆнºÀÇ ³»ºÎ¿¡ ÀÖ´ÂÁö Á¶»çÇÏ¿©
ºñÇÁÀ½À» Ãâ·ÂÇÑ´Ù. ¿ÞÂÊ ¸¶¿ì½º ¹öÆ°Àº IsVisible ¸Þ¼µå¸¦
È£ÃâÇÏ¿© ÆнºÀÇ ³»ºÎÀÎÁö Á¶»çÇϴµ¥ ȹ ³»ºÎ¸¦ ÂïÀ¸¸é ºñÇÁÀ½ÀÌ µé¸°´Ù. ±×·¯³ª ¤¾ÀÇ µ¿±×¶ó¹Ì ¾ÈÂÊÀº
ºñÇÁÀ½ÀÌ µé¸®Áö ¾Ê´Âµ¥ ÀÌ ÁöÁ¡Àº Æнº·Î µÑ·¯ ½ÎÀÎ ¿µ¿ªÀÏ »ÓÀÌÁö ÆнºÀÇ ³»ºÎ´Â ¾Æ´Ï´Ù. FillPath ¸Þ¼µå·Î
Æнº¸¦ Ä¥ÇßÀ» ¶§ ä¿öÁöÁö ¾Ê´Â ºÎºÐÀº ³»ºÎ°¡ ¾Æ´Ï´Ù.
¿À¸¥ÂÊ ¹öÆ°À» ´©¸£¸é IsOutlineVisible ¸Þ¼µå·Î ÆнºÀÇ
¿Ü°û¼±¿¡ ÀÖ´ÂÁö Á¡°ËÇÑ´Ù. ±½±â 5ÀÇ ÆæÀ» ÁöÁ¤ÇßÀ¸¹Ç·Î ´ëÃæ 2 Çȼ¿ Á¤µµ Â÷ÀÌ¸é ¿Ü°û¼±°ú ¸¸³¯ °ÍÀÌ°í ±×º¸´Ù ´õ ¸Ö¸® ¶³¾îÁø ÁöÁ¡ÀÌ¸é ±×·¸Áö ¾ÊÀ» °ÍÀÌ´Ù. ±½±â¸¦ 1·Î ¹Ù²Ù¸é Á¤È®ÇÏ°Ô ¿Ü°û¼± À§¸¦ Ŭ¸¯ÇÒ ¶§¸¸ ¼Ò¸®°¡ ³´Ù. Ææ Àμö´Â ¿Ü°û¼±°úÀÇ Çã¿ë ¿ÀÂ÷¸¦ ÁöÁ¤ÇÑ´Ù. Æнº¸¦ ±×¸± ¶§ 5Çȼ¿ ±½±âÀÇ ÆæÀ» »ç¿ëÇßÀ¸¹Ç·Î ÆĶõ»ö °æ°è¼± À§¿¡ ÀÖÀ¸¸é ºñÇÁÀ½ÀÌ Ãâ·ÂµÈ´Ù.
³»ºÎÀûÀ¸·Î ÆнºÀÇ ÁÂÇ¥¸¦ ¼øȸÇϸç ÁöÁ¤ÇÑ Á¡ÀÌ Æнº¿¡ Æ÷ÇԵǴÂÁö Á¡°ËÇÑ´Ù. ÀÌ·±
È÷Æ® Å×½ºÆ®´Â Æнº°¡ ¾Æ´Ï¸é ó¸®Çϱ⠾î·Æ´Ù. À§¿Í ¶È°°Àº ¿¹Á¦¸¦ Æнº¸¦ ¾²Áö ¾Ê°í Á÷Á¢ ÀÛ¼ºÇÏ·Á¸é
¸·¸·ÇÏ´Ù. º¹ÀâÇÑ ¸ð¾ç¿¡ ´ëÇØ È÷Æ® Å×½ºÆ®¸¦ ÇØ¾ß ÇÑ´Ù¸é ±×³É ±×¸²À» ±×¸®Áö ¸»°í Æнº·Î ¸¸µç ÈÄ ±×¸®°í
ÀÌ Æнº¸¦ ÁÂÇ¥ Á¡°Ë¿¡ È°¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. Áöµµ³ª 3D µµ¸é¿¡
ÀÌ·± ±â¹ýÀÌ ÀûÀýÇÏ´Ù.
Æнº´Â ÀÏ´Ü ¸¸µé¾îÁö¸é ¿©·¯ °¡Áö ÇüÅ·Πº¯ÇüÇÒ ¼ö ÀÖ´Ù. º¯Çü¿¡
ÀÇÇØ ´õ ´Ù¾çÇÑ ÇüÅÂÀÇ Æнº¸¦ ¸¸µé ¼ö ÀÖÀ¸¸ç º¯ÇüÇϱ⿡ µû¶ó ÆнºÀÇ È°¿ë¼ºÀÌ ³ô¾ÆÁø´Ù. ´ÙÀ½ÀÌ GraphicsPath Ŭ·¡½ºÀÇ º¯Çü ¸Þ¼µåÀε¥ ¿À¹ö·Îµå¸¦ È°¿ëÇÏ¸é ´Ù¾çÇÑ ¹æ½ÄÀÇ º¯ÇüÀ» ÇÒ ¼ö ÀÖ´Ù.
public void Widen (Pen pen)
public void Flatten (Matrix matrix,float
flatness)
public void Transform (Matrix matrix)
public void Warp (PointF[] destPoints,RectangleF
srcRect)
´ÙÀ½ ¿¹Á¦¸¦ ÅëÇØ º¯Çü ¸Þ¼µå¸¦ È£ÃâÇÏ¿© ´«À¸·Î ±× È¿°ú¸¦ È®ÀÎÇØ º¸ÀÚ. ÁÖ¼®
ó¸®µÈ ºÎºÐÀ» ¹Ù²ã°¡¸ç ¼ø¼´ë·Î ½ÇÇàÇØ º¸¸é µÈ´Ù.
PathTransform |
using
System; ~ using System.Windows.Forms; using
System.Drawing.Drawing2D; namespace
PathTransform { public
partial class Form1 : Form { public
Form1() { InitializeComponent(); } private
void Form1_Paint(object sender, PaintEventArgs e) { GraphicsPath
Path = new GraphicsPath(); Path.AddString("ÇѱÛ", new FontFamily("±Ã¼"), 0,
100, new
Point(10, 30), new StringFormat()); /*
È®Àå ÈÄ ¿Ü°û¼± ±×¸®±â
Path.Widen(new Pen(Color.Black, 3));
e.Graphics.DrawPath(Pens.Black, Path);
//*/ /*
È®Àå ÈÄ Ã¤¿ì±â
Path.Widen(new Pen(Color.Black, 3));
e.Graphics.FillPath(Brushes.Blue, Path);
//*/ /*
°î¼± Æì±â
Path.Flatten(new Matrix(), 12f); e.Graphics.DrawPath(Pens.Black,
Path);
//*/ /*
ȸÀü
Matrix M = new Matrix();
M.Rotate(-10);
Path.Transform(M);
e.Graphics.FillPath(Brushes.Blue, Path);
//*/ //*
ÈÖ±â RectangleF
R = Path.GetBounds(); PointF[]
arPoint = new PointF[4]; arPoint[0]
= new PointF(R.Left, R.Top + 30); arPoint[1]
= new PointF(R.Right, R.Top - 10); arPoint[2]
= new PointF(R.Left + 10, R.Bottom - 10); arPoint[3]
= new PointF(R.Right + 30, R.Bottom + 30); Path.Warp(arPoint,
R); e.Graphics.FillPath(Brushes.Blue,
Path); //*/ } } } |
Widen ¸Þ¼µå´Â ÆнºÀÇ ¿Ü°û¼±À» È®ÀåÇÏ¿© ´õ ±½°Ô ¸¸µç´Ù. Àμö·Î Àü´ÞµÇ´Â ÆæÀº È®ÀåÀÇ ±½±â¸¦ ÁöÁ¤ÇÏ¸ç »ö»ó Á¤º¸´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÆæÀÇ
³Êºñ¸¸Å ¿Ü°û¼±ÀÌ È®ÀåµÈ´Ù. ´ÙÀ½Àº "ÇѱÛ" ¹®ÀÚ¿ Æнº¸¦ ±½±â 3¸¸Å È®ÀåÇÑ °ÍÀÌ´Ù.
¿ø·¡ÀÇ ¿Ü°û¼±À» ±âÁØÀ¸·Î ÇÏ¿© ¾çÂÊÀ¸·Î µÎ²² 3ÀÇ °£°ÝÀ¸·Î »õ·Î¿î
¿Ü°û¼±ÀÌ »ý¼ºµÈ´Ù. È®Àå¿¡ ÀÇÇØ »õ·Î ¸¸µé¾îÁø µÎ °³ÀÇ ¿Ü°û¼±ÀÌ »õ·Î¿î Æнº°¡ µÇ¸ç ÀÌ µÎ ¿Ü°û¼±ÀÇ
³»ºÎ¸¸ Æнº·Î ÀÎÁ¤ÇÑ´Ù. Áï È®ÀåÀüÀÇ ¿Ü°û¼± ¾ÈÂÊÀº ´õ ÀÌ»ó ÆнºÀÇ ³»ºÎ°¡ ¾Æ´Ï´Ù. È®ÀåµÈ ¿Ü°û¼±À» FillPath·Î ä¿ö º¸¸é ¹«½¼ ¸»ÀÎÁö ¾Ë ¼ö
ÀÖ´Ù.
È®Àå¿¡ ÀÇÇØ ±½¾îÁø ¿Ü°û¼±ÀÇ ¾ÈÂʸ¸ ä¿öÁø´Ù. ¸¶Ä¡ ±½±â 3ÀÇ ÆĶõ»ö ÆæÀ¸·Î ¿Ü°û¼±¸¸ ±×¸° °Íó·³ º¸ÀÌÁö¸¸ ÆнºÀÇ ¸ð¾ç ÀÚü°¡ ¿ÏÀüÈ÷ ¹Ù²ï °ÍÀÌ´Ù. À§ ±×¸²ÀÇ ÆĶõ»ö ºÎºÐ¸¸ ÆнºÀÇ ³»ºÎÀ̸ç Ä¥ÇØÁöÁö ¾ÊÀº ºÎºÐÀº Æнº¿¡ ¼ÓÇÏÁö ¾Ê´Â´Ù. ¿øº» Æнº´Â "ÇѱÛ"À̶ó´Â
¹®ÀÚ¿¿¡ ´ëÇÑ ÁÂÇ¥ Á¤º¸¸¦ °¡Á³Áö¸¸ WidenÀ» Àû¿ëÇÑ ÈÄ¿¡´Â
"ÇѱÛ"À̶ó´Â ¹®ÀÚ¿ÀÇ ¿Ü°û¼±¿¡ ´ëÇÑ ÁÂÇ¥ Á¤º¸¸¦ °¡Áø´Ù. ÀÌ ¿Ü°û¼±ÀÇ ±½±â°¡ 3ÀÌ´Ù.
Flatten ¸Þ¼µå´Â °î¼±À» Æì Á÷¼±ÀÇ ÁýÇÕÀ¸·Î ¸¸µç´Ù. ÇϳªÀÇ °î¼±Àº ¼ö½Ê °³ÀÇ Á÷¼±À¸·Î ÀÌ·ç¾îÁö´Âµ¥ Á÷¼±ÀÇ °³¼ö¸¦ ÁÙÀÌ´Â È¿°ú°¡ ÀÖ´Ù. ¼¼ ¹ø° Àμö´Â °î¼±À» Á÷¼±ÈÇÒ ¶§ÀÇ Çã¿ë ¿À·ù¸¦ ÁöÁ¤Çϴµ¥ ÀÛÀ»¼ö·Ï ¼±ÀÇ ¼ö°¡ ¸¹¾ÆÁö°í Ŭ¼ö·Ï ¼±ÀÇ ¼ö°¡
ÀÛ¾ÆÁ® °ÅÄ¥¾îÁø´Ù. ÃÖ¼Ò°ªÀº 0.25À̸ç À̶§´Â Á÷¼±À¸·Î
¹Ù²ãµµ °ÅÀÇ º¯È°¡ ¾ø´Ù. ÇÏÁö¸¸ 12Á¤µµÀÇ Å« Çã¿ëÄ¡¸¦
ÁÖ¸é °î¼±ÀÌ µüµüÇÑ Á÷¼±À¸·Î ¹Ù²ï´Ù. 50Á¤µµÀÇ Å« °ªÀ» ÁÖ¸é °î¼±ÀÌ °ÅÀÇ Á¦°ÅµÇ¹Ç·Î ¸ø ¾Ë¾Æº¼ Á¤µµ·Î
°ÅÄ¥¾îÁø´Ù.
´ÙÀ½Àº ȸÀü º¯ÇüÀ» ÇØ º¸ÀÚ. Transform ¸Þ¼µå´Â Matrix Ŭ·¡½ºÀÇ º¯È¯ °ø½ÄÀ» Æнº¿¡ Àû¿ëÇϸç ÆнºÀÇ ¸ðµç ÁÂÇ¥°¡ ÀÌ º¯È¯ÀÇ ¿µÇâÀ» ¹Þ´Â´Ù. ¾Õ Àý¿¡¼ ¾Ë¾Æº» ÆòÇà À̵¿, È®´ë/Ãà¼Ò, ȸÀü, ±â¿ïÀ̱â
µîÀÇ º¯È¯À» ¸ðµÎ Àû¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹Á¦¿¡¼´Â Rotate ¸Þ¼µå¸¦
È£ÃâÇÏ¿© ȸÀü º¯È¯¸¸ ÇØ º¸¾Ò´Ù. ±ÛÀÚ°¡ 10µµ¸¸Å ±â¿ï¾îÁö´Âµ¥
ÀÌ ±ÛÀÚ¸¦ ±¸¼ºÇÏ´Â ¸ðµç ÁÂÇ¥°¡ ¿ì»óÇâÀ¸·Î À̵¿ÇÑ´Ù. TransformÀº Áï½Ã ¾î¶² µ¿ÀÛÀ» ÇÏ´Â ¸Þ¼µåÀÌÁö
»óŸ¦ ÁöÁ¤ÇÏ´Â ÇÁ·ÎÆÛƼ°¡ ¾Æ´Ï¹Ç·Î ÀÌÈÄ Ãß°¡µÇ´Â ÁÂÇ¥¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù.
Warp ¸Þ¼µå´Â Æнº¸¦ ÈÖ°Ô ¸¸µç´Ù. µÎ ¹ø° Àμö´Â º¯È¯ ´ë»ó »ç°¢¿µ¿ªÀ» ÁöÁ¤Çϴµ¥ Æнº Àüü°¡ º¯È¯ ´ë»óÀ̶ó¸é
GetBounds ¸Þ¼µå·Î ÆнºÀÇ ¿ÜÁ¢ »ç°¢ÇüÀ» ±¸ÇØ Àü´ÞÇÑ´Ù. ù ¹ø° Àμö´Â º¯È¯ ¸ñÀû
¿µ¿ªÀ» ÁöÁ¤Çϴµ¥ Á÷»ç°¢ÇüÀÌ ¾Æ´Ò ¼öµµ ÀÖÀ¸¸ç Á¡ÀÇ ¹è¿·Î ºÒ±ÔÄ¢ÇÑ ¸ð¾çÀ» Á¤ÀÇÇÑ´Ù. Á¡ÀÇ °³¼ö°¡ ¼¼
°³À̸é ÆòÇà »çº¯ÇüÀÌ¸ç ³× °³À̸é ÀÓÀÇÀÇ »ç°¢ÇüÀÌ´Ù. Warp ¸Þ¼µå´Â µÎ ¹ø° Àμö·Î ÁöÁ¤ÇÑ Á÷»ç°¢Çü
¿µ¿ªÀ» ù ¹ø° Àμö·Î ÁöÁ¤ÇÑ ºÒ±ÔÄ¢ÇÑ »ç°¢¿µ¿ª¿¡ ´ëÀÀ½ÃŲ´Ù. ¿¹Á¦¿¡¼ ÁöÁ¤ÇÑ µÎ »ç°¢ÇüÀº ´ÙÀ½°ú °°´Ù.
¿øº»ÀÇ AÁ¡Àº ¸ñÀûÁöÀÇ A`·Î
À̵¿ÇÏ°í BÁ¡Àº B`·Î À̵¿ÇÏ´Â ½ÄÀ¸·Î ´ëÀÀµÇ´Â ²ÀÁöÁ¡À¸·Î
À̵¿ÇÑ´Ù. Áß°£ÀÇ Á¡µµ ²ÀÁöÁ¡°úÀÇ »ó´ëÀûÀÎ °Å¸®¿¡ µû¶ó Àû´çÇÑ °÷À¸·Î À̵¿ÇÑ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
Á÷»ç°¢Çü ¿µ¿ªÀ» ºÒ±ÔÄ¢ÇÑ »ç°¢¿µ¿ª¿¡ ³¢¿ö ¸ÂÃç ÆнºÀÇ ¸ð¾çÀ» Âî±×·¯¶ß¸°´Ù. ¼³¸íÀ»
ÀÐ¾î º¸¸é ±²ÀåÈ÷ º¹ÀâÇØ º¸À̴µ¥ °£´ÜÇÏ°Ô »ý°¢ÇÏ¸é ¾ïÁö·Î ³¢¿ö ¸ÂÃß´Â º¯È¯ÀÌ´Ù. ¸¶Ä¡ °í¹«ÆÇ À§¿¡
±×¸²À» ±×·Á ³õ°í °í¹«ÆÇÀÇ °¢ ¸ð¼¸®¸¦ Àâ¾Æ ´Ã¸®´Â °Í°ú À¯»çÇÏ´Ù. ÀÌ º¯È¯À» Àß ÇÏ·Á¸é dzºÎÇÑ °ø°£Àû
»ó»ó·ÂÀÌ ¿ä±¸µÇ´Âµ¥ Àß È°¿ëÇϸé ÀÔüÀûÀÎ È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù. È®½ÇÈ÷ º¯È¯Àº ÀÀ¿ëÀÇ ¹¦¹Ì°¡ ÀÖ´Ù.