(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);
}
转载于:https://www.cnblogs.com/lizhengjin/archive/2008/09/12/1289738.html
(9)一步一步开发一个简单CAD之镱像和平移相关推荐
- Python开发第一步:如何制作一个简单的桌面应用
Python开发第一步:如何制作一个简单的桌面应用 前言 大家好,我是baifagg, 一个热爱Python的编程爱好者. 今天我们来学习一下, 如何用Python制作一个简单的桌面应用程序. 虽然桌 ...
- [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析
原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...
- python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...
文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面,然后引入所谓的"mvc框架". 一.设计登录界面 下面开始第一个话题,使用pycharm的 PyQt5 ...
- django之十一--开发一个简单的醉得意菜单和人均支付金额查询页面
一.前言 针对搭伙吃饭的点菜,我们时常会从人数和人均金额去考虑一家餐厅的菜单,所以点菜对于大锅饭的伙伴也成了一门学问和难题,本篇文章巧妙的应用代码思想,将实际问题转化为代码问题,例如如下是一个醉得意的 ...
- 如何利用spring框架来开发一个简单的小项目——书店项目
这里我将用spring来开发一个简单的书店项目 Step1:所用到的开发软件为 idea , 所用到的jar包为 这些jar的下载可在 官网 下载,选择5.2.6版本下载,不会的在下面评论私信 Ste ...
- 利用WCF的callback机制开发一个简单的多人游戏模型
本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...
- php开发mvc教程,php开发一个简单的MVC
本文通过实例为大家介绍用php开发一个简单mvc的方法,起到势砖引玉的作用,本文比较适合刚接触mvc的朋友. MVC其实就是三个Model,Contraller,View单词的简称. Model,主要 ...
- Nginx开发一个简单的HTTP过滤模块
本文将学些开发一个简单的HTTP过滤模块,它能够对Content-Type为text/plain的包体前加上前缀字符串prefix. <一> 过滤模块的调用顺序 过滤模块可以叠加,也就是说 ...
- 开发一个简单的WebPart
开发一个简单的WebPart,首先我们需要对Visual Studio .NET 2003进行相应功能的扩展,我们可以在微软的网站下载到一个扩展功能包,名字叫:WebPartTemplatesforV ...
最新文章
- oracle批量加载,Oracle教程:使用SQL*Loader高速批量数据加载工具
- c4d打开没反应_掌握这3种C4D技巧,线框渲染效果图也就几秒的事
- gitbook 入门教程之解决windows热加载失败问题
- 5_Windows下利用批处理切换IP地址
- 使用telnet进行Dubbo接口测试
- MySQL定时备份数据库方案(全库备份)
- 正则表达式去除括号的问题
- Android 开发高效工具之道
- excel和html互相转换,Excel2016与Html格式之间的互相转换
- 1.3 n-gram平滑算法:Good-Turning、拉普拉斯平滑
- 我们学校有一个计算机室英文,深圳朗文版小学二年级下册Unit 2 At school练习题...
- cmd 实用快捷键。。
- windows下桌面便签小工具简单使用技巧
- HDU1814 求2-sat字典序最小的解
- Linux静态库与动态库的概念及制作
- OpenCV学习第十三篇:提取水平和垂直线(去除干扰线)
- 拼多多求变 200 天:撒钱百亿元,江湖人称拼爹爹?
- fabric.js学习
- python作业:有一个学生成绩表,包括学号、姓名、高数、英语,计算机。 录入若干个学生学号、姓名、高数、英语,计算机5项数据。 将学生成绩表数据写入文件,文件名为“学生成绩表.txt
- 如何使用 PyTorch 进行图像分类