• (3)一步一步开发一个简单CAD之画线


    (1)为了画线,则必需有一个存储实体的内存,同时为了实现捡选的功能,还必需存储一个捡选用的内存区

    用以下两个模版类实现,做为文档类的成员函数

    public://设定两个集合,选择集和实体集,同一个图形要么在选择集,要么在实体集
      CTypedPtrArray<CObArray, CSolid*>m_solid;
      CTypedPtrArray<CObArray, CSolid*>m_select;

    各种命令实际上是对这两个类的操作

    (2)为了画线,必需一个画线的命令类如下

    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;//这个是像皮筋类

    };

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

    }

    CCreateLine::~CCreateLine()
    {

    }

    void CCreateLine::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++;
         m_erase_line.SetBegin(pos); //八个方向,并且如果在指定范围内,得到按下的点的坐标.实现像皮筋类
         break;
        
       }
        
        case 2:
       {

       CPosition center2 = pos;
        g_pDoc->DrawFlag(TRUE, pos, &center2);//画标记作用,画出矩形标记,center2取出替代值
       
       m_erase_line.SetBegin(pos);
             CDC *pDC = g_pView->GetDC();
           CLine *line = new CLine(m_begin, center2);
             line->DrawSolid(pDC, Normal);
             g_pDoc->m_solid.Add(line);
             m_nStep = 1;
           g_pView->ReleaseDC(pDC);

      }
       default:
          break;
      }
     
      
    }

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


        CPosition center2;
         g_pDoc->DrawFlag(TRUE, pos, &center2);
        m_erase_line.SetEnd(pos);


       
    }

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

     m_erase_line.SetCancle(pos);//取消像皮筋
    }

  • 相关阅读:
    毕业半年,码过5个城市
    Java实现office文档与pdf文档的在线预览功能
    挺过最艰难的2018,我终将长大
    dubbo源码分析(一)-从xml到我们认识的Java对象
    沉淀一年,我想推荐这些书给你
    Java动态代理(一)
    Java工程师成神之路思维导图
    Java
    阿里巴巴Java开发手册思维导图
    Mysql的排他锁和共享锁
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1289210.html
Copyright © 2020-2023  润新知