Exemplo n.º 1
0
        private void DrawAll()
        {
            g.Clear(Color.White);

            foreach (DrawingData sd in lineSaveData)
            {
                g.DrawLine(new Pen(Color.Aquamarine), sd.startPoint, sd.endPoint);
            }

            foreach (CurveData pt in curveSaveData)
            {
                if (pt.point != null)
                {
                    pt.Drawing(g);
                }
            }

            foreach (Rectangle rec in recSaveData)
            {
                g.DrawRectangle(new Pen(Color.Aquamarine), rec);
            }

            foreach (Rectangle rec in circleSaveSData)
            {
                g.DrawEllipse(new Pen(Color.Aquamarine), rec);
            }

            foreach (DrawingData dd in drawingSaveData)
            {
                g.DrawEllipse(dd.pen, dd.startPoint.X, dd.startPoint.Y, dd.pen.Width, dd.pen.Width);
            }

            foreach (CloudMark cm in cloudMarkSaveData)
            {
                cloudMark.Drawing(g, cm.rec, new Pen(Color.Aquamarine), cm.message);
            }

            foreach (Heart heart in heartSaveData)
            {
                heart.Drawing(g, heart.rec, new Pen(Color.Aquamarine), heart.message);
            }

            pictureBox1.Image = picBmp;

            //직사각형, cloudMark에 사용하기 위해 ClickPos, CurPos 포인트를 담는 변수
            int clickpos_X = ClickPos.X;
            int curpos_x   = CurPos.X;
            int clickpos_y = ClickPos.Y;
            int curpos_y   = CurPos.Y;

            switch (drawMode)
            {
            case DrawMode.line:     //선 그리기
                g.DrawLine(new Pen(Color.Aquamarine), ClickPos, CurPos);
                break;

            case DrawMode.curve:     //곡선 그리기
                g.DrawLine(new Pen(Color.Aquamarine), ClickPos, CurPos);
                break;

            case DrawMode.rect:            //직사각형 그리기
                if (ClickPos.X > CurPos.X) //left가 right보다 클 경우
                {
                    Swap(ref clickpos_X, ref curpos_x);
                }

                if (ClickPos.Y > CurPos.Y)     //top이 bottom보다 클 경우
                {
                    Swap(ref clickpos_y, ref curpos_y);
                }

                rec = new Rectangle(clickpos_X, clickpos_y, curpos_x - clickpos_X, curpos_y - clickpos_y);
                g.DrawRectangle(new Pen(Color.Aquamarine), rec);
                break;

            case DrawMode.circle:     //타원형 그리기
                rec = new Rectangle(ClickPos.X, ClickPos.Y, CurPos.X - ClickPos.X, CurPos.Y - ClickPos.Y);
                g.DrawEllipse(new Pen(Color.Aquamarine), rec);
                break;

            case DrawMode.cloudMark:     //클라우드마크
                if (ClickPos.X > CurPos.X)
                {
                    Swap(ref clickpos_X, ref curpos_x);
                }

                if (ClickPos.Y > CurPos.Y)
                {
                    Swap(ref clickpos_y, ref curpos_y);
                }
                rec = new Rectangle(clickpos_X, clickpos_y, curpos_x - clickpos_X, curpos_y - clickpos_y);

                if (text == "")     //텍스트가 없을 경우
                {
                    cloudMark.Drawing(g, rec, new Pen(Color.Aquamarine), "");
                }
                else     //텍스트가 있을 경우
                {
                    cloudMark.Drawing(g, rec, new Pen(Color.Aquamarine), text);
                }
                break;

            case DrawMode.heart:     //하트
                Heart heart = new Heart();
                rec = new Rectangle(ClickPos.X, ClickPos.Y, CurPos.X - ClickPos.X, CurPos.Y - ClickPos.Y);

                if (text == "")     //텍스트가 없을 경우
                {
                    heart.Drawing(g, rec, new Pen(Color.Aquamarine), "");
                }
                else     //텍스트가 있을 경우
                {
                    heart.Drawing(g, rec, new Pen(Color.Aquamarine), text);
                }
                break;
            }
        }