zoukankan      html  css  js  c++  java
  • (9)一步一步开发一个简单CAD之镱像和平移

    镜像和平移只要使用实体集中相关的函数即可,同时利用镜像类和平移类实现

    class CMirror : public CComand
    {
    public:
     CMirror();
     virtual ~CMirror();
    public:
        void OnLButtonDown(UINT nFlags,  CPosition pos);
        void OnMouseMove(UINT nFlags,  CPosition pos);
        void OnRButtonDown(UINT nFlags,  CPosition pos);
    private:
     CHandleCG* m_hand;
     CEraseLine m_erase_line;//追踪类
     CPosition m_begin;
     CPosition m_end;
     
    };

     

    class CMove : public CComand//全局即时平移命令
    {
    public:
     CMove();
     virtual ~CMove();
    public:
     void OnLButtonDown(UINT nFlags,  CPosition pos);
        void OnMouseMove(UINT nFlags,  CPosition pos);
        void OnRButtonDown(UINT nFlags,  CPosition pos);
        void OnLButtonUp(UINT nFlags,  CPosition pos);
     void OnMButtonDown(UINT nFlags, CPosition pos);
     void OnMButtonUp(UINT nFlags, CPosition pos);
    public:
     CPosition m_begin;
     CPosition m_end;

    };

    CMove::CMove()
    {
        m_nStep = 1;
    }

    CMove::~CMove()
    {

    }
    void CMove::OnLButtonDown(UINT nFlags,  CPosition pos)
    {

    }

    void CMove::OnMouseMove(UINT nFlags,  CPosition pos)

    {
      switch(m_nStep)
     {

      case 2 :
      {
           CDC *pDC = g_pView->GetDC();
       
           for (int i = 0; i < (g_pDoc->m_solid).GetSize(); i++)
           {  
        
         (g_pDoc->m_solid[i])->Move(m_begin, pos)->DrawSolid(pDC, Normal);
           }

         for (i = 0; i < g_pDoc->m_select.GetSize(); i++)
           {  
        
         (g_pDoc->m_select[i])->Move(m_begin, pos)->DrawSolid(pDC, Normal);
           }
       
        m_begin = pos;
           g_pView->Invalidate();
           g_pView->ReleaseDC(pDC);
      }

          
      break;
     default:
      break;

     }
      
    }

    void CMove::OnRButtonDown(UINT nFlags,  CPosition pos)
    {
         
    }

    void CMove::OnLButtonUp(UINT nFlags,  CPosition pos)
    {
         m_nStep = 1;
    }

    void CMove::OnMButtonDown(UINT nFlags, CPosition pos)
    {
          switch(m_nStep)
     {
     case 1 :
      {
      m_begin = m_end = pos;
         m_nStep++;
      break;
      }
     
     case 2 :
      {

           m_nStep = 1;
       break;
      }
     default:
      break;

     }
    }

    void CMove::OnMButtonUp(UINT nFlags, CPosition pos)
    {
          m_nStep = 1;
    }

    CBaseMove::CBaseMove()//带基点的平移类
    {
        m_nStep = 1;
    }

    CBaseMove::~CBaseMove()
    {

    }

    CMirror::CMirror()//镜像
    {
        m_nStep = 1;
     m_hand = new CHandleCG(&g_pDoc->m_solid, &g_pDoc->m_select);

    }

    CMirror::~CMirror()
    {

    }

    void CMirror::OnLButtonDown(UINT nFlags,  CPosition pos)
    {


     
       switch(m_nStep)
       {
     
       case 1://输出提示信息
       {
        
       m_begin = pos;
     

        m_nStep++;
         m_erase_line.SetBegin(pos); //八个方向,并且如果在指定范围内,得到按下的点的坐标
         break;
        
       }
        
        case 2:
       {

       m_erase_line.SetBegin(pos);

             CDC *pDC = g_pView->GetDC();
    //       m_hand->Mirror(m_begin, pos, Normal);
             m_nStep = 1;
           g_pView->ReleaseDC(pDC);

      }
       default:
          break;
      }
     
      
    }

    void CMirror::OnMouseMove(UINT nFlags,  CPosition pos)
    {

        m_erase_line.SetEnd(pos);

    switch(m_nStep)
      {
      case 2:
      
          
       CDC *pDC = g_pView->GetDC();

      

       
             m_hand->Mirror(m_begin, m_end, Drag);
     
        

    //      g_pDoc->DrawSolid(pDC, Normal);//重画


           m_hand->Mirror(m_begin, pos, Normal);

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

    void CMirror::OnRButtonDown(UINT nFlags,  CPosition pos)
    {

     m_erase_line.SetCancle(pos);
    }

  • 相关阅读:
    Ubuntu18.04下更改apt源为阿里云源
    sudo: pip:command not found问题解决
    CentOS8 中文输入法
    PyCharm2019 激活方式
    正则爬取京东商品信息并打包成.exe可执行程序
    学习springcloud bus+springcloud config实现刷新配置
    使用springcloud-config统一管理配置文件
    记录一下今天使用maven构建项目分多个模块时遇到的扫描properties问题
    spring+mybatis+thymeleaf
    回调地狱问题
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1289738.html
Copyright © 2011-2022 走看看