25-2.Æнº

25-2-1.Æнº ¸¸µé±â

Æнº(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 À̺¥Æ®¿¡¼­ Æнº¸¦ Á÷Á¢ ¸¸µé¾ú´Âµ¥ ¼Óµµ¸¦ °í·ÁÇÑ´Ù¸é ´Ù¸¥ À̺¥Æ®¿¡¼­ ¹Ì¸® ¿¹ºñ µ¿ÀÛÀ» ÃëÇØ ³õ´Â °ÍÀÌ ÁÁ´Ù.

25-2-2.ÆнºÀÇ ±¸Á¶

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ÃÊ°£ ½°À¸·Î½á ¼­ºêÆнº¸¦ °¢°¢ µû·Î ±×¸®´Â °Íó·³ Èä³»³¾ ¼ö ÀÖ´Ù.

25-2-3.¼­ºêÆнº

Æнº Çϳª¿¡´Â ¿©·¯ °³ÀÇ ¼­ºêÆнº°¡ Æ÷ÇԵȴÙ. 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 ¸Þ¼­µå¸¸ È£ÃâÇÏ¸é µÈ´Ù.

25-2-4.Æнº °ü¸®

´ÙÀ½ ¸Þ¼­µå´Â Æнº ÀÚü¸¦ °ü¸®ÇÑ´Ù. À̸§ÀÌ ¹«Ã´ Á÷°üÀûÀε¥´Ù º°´Ù¸¥ Àμö°¡ ¾ø¾î »ç¿ëÇϱâ´Â ¾ÆÁÖ ½±´Ù. ÇÊ¿äÇÒ ¶§ È£Ã⸸ ÇÏ¸é µÈ´Ù.

 

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 µµ¸é¿¡ ÀÌ·± ±â¹ýÀÌ ÀûÀýÇÏ´Ù.

25-2-5.ÆнºÀÇ º¯Çü

Æнº´Â ÀÏ´Ü ¸¸µé¾îÁö¸é ¿©·¯ °¡Áö ÇüÅ·Πº¯ÇüÇÒ ¼ö ÀÖ´Ù. º¯Çü¿¡ ÀÇÇØ ´õ ´Ù¾çÇÑ ÇüÅÂÀÇ Æнº¸¦ ¸¸µé ¼ö ÀÖÀ¸¸ç º¯ÇüÇϱ⿡ µû¶ó ÆнºÀÇ È°¿ë¼ºÀÌ ³ô¾ÆÁø´Ù. ´ÙÀ½ÀÌ 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ºÎÇÑ °ø°£Àû »ó»ó·ÂÀÌ ¿ä±¸µÇ´Âµ¥ Àß È°¿ëÇϸé ÀÔüÀûÀÎ È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù. È®½ÇÈ÷ º¯È¯Àº ÀÀ¿ëÀÇ ¹¦¹Ì°¡ ÀÖ´Ù.