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

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);
}

转载于:https://www.cnblogs.com/lizhengjin/archive/2008/09/12/1289738.html

(9)一步一步开发一个简单CAD之镱像和平移相关推荐

  1. Python开发第一步:如何制作一个简单的桌面应用

    Python开发第一步:如何制作一个简单的桌面应用 前言 大家好,我是baifagg, 一个热爱Python的编程爱好者. 今天我们来学习一下, 如何用Python制作一个简单的桌面应用程序. 虽然桌 ...

  2. [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析

    原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...

  3. python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...

    文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面,然后引入所谓的"mvc框架". 一.设计登录界面 下面开始第一个话题,使用pycharm的 PyQt5 ...

  4. django之十一--开发一个简单的醉得意菜单和人均支付金额查询页面

    一.前言 针对搭伙吃饭的点菜,我们时常会从人数和人均金额去考虑一家餐厅的菜单,所以点菜对于大锅饭的伙伴也成了一门学问和难题,本篇文章巧妙的应用代码思想,将实际问题转化为代码问题,例如如下是一个醉得意的 ...

  5. 如何利用spring框架来开发一个简单的小项目——书店项目

    这里我将用spring来开发一个简单的书店项目 Step1:所用到的开发软件为 idea , 所用到的jar包为 这些jar的下载可在 官网 下载,选择5.2.6版本下载,不会的在下面评论私信 Ste ...

  6. 利用WCF的callback机制开发一个简单的多人游戏模型

    本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...

  7. php开发mvc教程,php开发一个简单的MVC

    本文通过实例为大家介绍用php开发一个简单mvc的方法,起到势砖引玉的作用,本文比较适合刚接触mvc的朋友. MVC其实就是三个Model,Contraller,View单词的简称. Model,主要 ...

  8. Nginx开发一个简单的HTTP过滤模块

    本文将学些开发一个简单的HTTP过滤模块,它能够对Content-Type为text/plain的包体前加上前缀字符串prefix. <一> 过滤模块的调用顺序 过滤模块可以叠加,也就是说 ...

  9. 开发一个简单的WebPart

    开发一个简单的WebPart,首先我们需要对Visual Studio .NET 2003进行相应功能的扩展,我们可以在微软的网站下载到一个扩展功能包,名字叫:WebPartTemplatesforV ...

最新文章

  1. oracle批量加载,Oracle教程:使用SQL*Loader高速批量数据加载工具
  2. c4d打开没反应_掌握这3种C4D技巧,线框渲染效果图也就几秒的事
  3. gitbook 入门教程之解决windows热加载失败问题
  4. 5_Windows下利用批处理切换IP地址
  5. 使用telnet进行Dubbo接口测试
  6. MySQL定时备份数据库方案(全库备份)
  7. 正则表达式去除括号的问题
  8. Android 开发高效工具之道
  9. excel和html互相转换,Excel2016与Html格式之间的互相转换
  10. 1.3 n-gram平滑算法:Good-Turning、拉普拉斯平滑
  11. 我们学校有一个计算机室英文,深圳朗文版小学二年级下册Unit 2 At school练习题...
  12. cmd 实用快捷键。。
  13. windows下桌面便签小工具简单使用技巧
  14. HDU1814 求2-sat字典序最小的解
  15. Linux静态库与动态库的概念及制作
  16. OpenCV学习第十三篇:提取水平和垂直线(去除干扰线)
  17. 拼多多求变 200 天:撒钱百亿元,江湖人称拼爹爹?
  18. fabric.js学习
  19. python作业:有一个学生成绩表,包括学号、姓名、高数、英语,计算机。 录入若干个学生学号、姓名、高数、英语,计算机5项数据。 将学生成绩表数据写入文件,文件名为“学生成绩表.txt
  20. 如何使用 PyTorch 进行图像分类

热门文章

  1. java数据结构与算法之双链表设计与实现
  2. 如果在做项目时,发现自己在规定的时间内肯定完成不了时,你会怎么办
  3. JAVA小项目(1)——租车系统
  4. 智能合约(Smart contract)
  5. @Contract注解
  6. 计算机网络ieee802.3标准,计算机网络实验四IEEE 802.3协议分析和以太网
  7. O’Shea基于深度学习调制识别代码
  8. 2021寒假——洛谷刷题计划(35题)
  9. python怎么加油_使用 Python 为你的油箱加油
  10. 毕设分享:基于STM32两轮自平衡小车 含源码、原理图及PCB文件