zoukankan      html  css  js  c++  java
  • (4)一步一步开发一个简单CAD之画圆和矩形

    (1)圆的参数,圆心和圆上一点,即两个参数可以画一个圆

    如下

    class CCreateLine : public CComand
    {
    public:
     CCreateLine();
     virtual ~CCreateLine();
    public:

        void OnLButtonDown(UINT nFlags,  CPosition pos);
        void OnMouseMove(UINT nFlags,  CPosition pos);
        void OnRButtonDown(UINT nFlags,  CPosition pos);

     
    private:
        CPosition m_begin;
     CPosition m_end;
     CEraseLine m_erase_line;//画橡皮筋

    };

    CCreateCircle::CCreateCircle()
    {
        m_nStep = 1;
     c_Refresh = g_Refresh;

    }

    CCreateCircle::~CCreateCircle()
    {

    }

    void CCreateCircle::OnLButtonDown(UINT nFlags,  CPosition pos)
    {
       
     switch(m_nStep)
     {

     case 1://输出提示信息
     {
      m_erase_line.SetBegin(pos);//////

         CPosition center = pos;
    //        g_pDoc->DrawFlag(TRUE, pos, &center);//画标记
      m_end = m_begin = center;


             m_nStep++;
             break;
      
     }
      
      case 2:
     {
      m_erase_line.SetBegin(pos);

             CDC *pDC = g_pView->GetDC();
       CPosition center2 = pos;
    //   g_pDoc->DrawFlag(TRUE, pos, &center2);//画标记
       
       CCircle *ccircel1 = new CCircle(m_begin, center2);
           
       g_pDoc->m_solid.Add(ccircel1);
          
             m_nStep = 1;//重置
          g_pView->ReleaseDC(pDC);
           break;
      
     
     }
      default:
         break;
     }
     
      
    }

    void CCreateCircle::OnMouseMove(UINT nFlags,  CPosition pos)
    {
           CPosition center2;
    //          g_pDoc->DrawFlag(TRUE, pos, &center2);
         switch(m_nStep)
      {
      case 2:
       m_erase_line.SetEnd(pos);
             if (c_Refresh != g_Refresh)
             {
        m_end = m_begin;
        c_Refresh = g_Refresh;
             }
       CDC *pDC = g_pView->GetDC();

       CCircle *ccircel1 = new CCircle(m_begin, m_end);
       ccircel1->DrawSolid(pDC, Drag);
       delete ccircel1;
       
          CCircle *ccircel2 = new CCircle(m_begin, pos);//画像皮线,最后一个
       ccircel2->DrawSolid(pDC,Normal);
       delete ccircel2;

       m_end  = pos;
     
        
          g_pView->ReleaseDC(pDC);
     
       break;
      }
    }

    void CCreateCircle::OnRButtonDown(UINT nFlags,  CPosition pos)
    {
          CDC *pDC = g_pView->GetDC();

             CCircle *ccircel2 = new CCircle(m_begin, pos);//画像皮线,最后一个
       ccircel2->DrawSolid(pDC,Back);
       delete ccircel2;

       g_pView->ReleaseDC(pDC);

       m_nStep = 1;
    }

    (2)画矩形,左上角和右下角两个参数即可确定一个圆

    画圆的命令如下

    class CCreateRect : public CComand
    {
    public:
     CCreateRect();
     virtual ~CCreateRect();
    public:
        void OnLButtonDown(UINT nFlags,  CPosition pos);
        void OnMouseMove(UINT nFlags,  CPosition pos);
        void OnRButtonDown(UINT nFlags,  CPosition pos);
    private:
        CPosition m_begin;
     CPosition m_end;

    };

    CCreateRect::CCreateRect()
    {
        m_nStep = 1;
     c_Refresh = g_Refresh;

    }

    CCreateRect::~CCreateRect()
    {

    }

    void CCreateRect::OnLButtonDown(UINT nFlags,  CPosition pos)
    {
       
     switch(m_nStep)
     {

     case 1://输出提示信息
     {
      
         CPosition center = pos;
    //        g_pDoc->DrawFlag(TRUE, pos, &center);//画标记
      m_end = m_begin = center;


             m_nStep++;
             break;
      
     }
      
      case 2:
     {
             CDC *pDC = g_pView->GetDC();
       CPosition center2 = pos;
    //   g_pDoc->DrawFlag(TRUE, pos, &center2);//画标记
       
       CCRect *ccircel1 = new CCRect(m_begin, m_end);
           
       g_pDoc->m_solid.Add(ccircel1);
          
             m_nStep = 1;//重置
          g_pView->ReleaseDC(pDC);
           break;
      
     
     }
      default:
         break;
     }
     
      
    }

    void CCreateRect::OnMouseMove(UINT nFlags,  CPosition pos)
    {
         
         switch(m_nStep)
      {
      case 2:
      
             if (c_Refresh != g_Refresh)
             {
        m_end = m_begin;
        c_Refresh = g_Refresh;
             }
       CDC *pDC = g_pView->GetDC();

       CCRect *ccircel1 = new CCRect(m_begin, m_end);
       ccircel1->DrawSolid(pDC, Drag);
       delete ccircel1;
       
          CCRect *ccircel2 = new CCRect(m_begin, pos);//画像皮线,最后一个
       ccircel2->DrawSolid(pDC,Normal);
       delete ccircel2;

       m_end  = pos;
     
        
          g_pView->ReleaseDC(pDC);
     
       break;
      }
    }

    void CCreateRect::OnRButtonDown(UINT nFlags,  CPosition pos)
    {
          CDC *pDC = g_pView->GetDC();

             CCRect *ccircel2 = new CCRect(m_begin, pos);//画像皮线,最后一个
       ccircel2->DrawSolid(pDC,Back);
       delete ccircel2;

       g_pView->ReleaseDC(pDC);

       m_nStep = 1;
    }

  • 相关阅读:
    学习ActiveMQ(七):JMS消息的事务管理
    2020杭电多校第三场题解
    2020牛客暑期多校训练营第六场题解
    2020杭电多校第二场题解
    2020 Petrozavodsk Winter Camp, Jagiellonian U Contest 部分题解
    Educational Codeforces Round 86 (Rated for Div. 2) 部分题解
    2020, XIII Samara Regional Intercollegiate Programming Contest 题解
    2019 JUST Programming Contest题解
    2019-2020 ICPC Asia Taipei-Hsinchu Regional Contest 部分题解
    2019 ICPC Universidad Nacional de Colombia Programming Contest 题解
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1289218.html
Copyright © 2011-2022 走看看