资源简介
经典多边形裁剪算法 Sutherland-Hodgman的VC++实现
代码片段和文件信息
// ChildView.cpp
//
#include “stdafx.h“
#include “PolygonClipDemo.h“
#include “ChildView.h“
#include “SutherlandHodgman.h“
#include
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
inline int Int(REAL r) { return (int) floor(r + 0.5f); }
CChildView::CChildView()
: m_bDrawing(false)
{
m_hCursorClose = ::LoadCursor(::AfxGetInstanceHandle() MAKEINTRESOURCE(IDC_CLOSEPOLYGON));
}
CChildView::~CChildView()
{
}
BEGIN_MESSAGE_MAP(CChildView CWnd)
ON_WM_PAINT()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_SETCURSOR()
ON_WM_SIZE()
ON_UPDATE_COMMAND_UI(IDS_STATISTICS OnUpdateStatistics)
END_MESSAGE_MAP()
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExstyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS
::LoadCursor(NULL IDC_ARROW) reinterpret_cast(COLOR_WINDOW+1) NULL);
return TRUE;
}
void CChildView::PrepareDC(CDC& dc)
{
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(800 800);
dc.SetViewportExt(m_WindowSize);
dc.SetViewportOrg(m_WindowSize.cx / 2 m_WindowSize.cy / 2);
}
void CChildView::OnSize(UINT nType int cx int cy)
{
CWnd::OnSize(nType cx cy);
m_WindowSize.SetSize(cx cy);
}
void CChildView::OnPaint()
{
CPaintDC dc(this);
PrepareDC(dc);
CRect rc(-100 -100 100 100);
CBrush brush(RGB(240 240 240));
CGdiobject * pOldBrush = dc.Selectobject(& brush);
dc.Rectangle(rc);
if (pOldBrush) dc.Selectobject(pOldBrush);
DrawPolygon(dc m_InputPolygon);
CPen pen(PS_SOLID 2 RGB(255 0 0));
CGdiobject * pOldPen = dc.Selectobject(& pen);
DrawPolygon(dc m_ClippedPolygon);
if (pOldPen) dc.Selectobject(pOldPen);
}
void CChildView::DrawPolygon(CDC& dc const vector& v)
{
int s = (int) v.size();
if (s > 0)
{
POINT * pPoints = new POINT[s];
POINT * p(pPoints);
copy(v.begin() v.end() p);
dc.MoveTo(pPoints[s - 1]);
dc.PolylineTo(pPoints s);
delete[] pPoints;
}
}
void CChildView::OnLButtonUp(UINT nFlags CPoint point)
{
CClientDC dc(this);
PrepareDC(dc);
dc.DPtoLP(& point);
if (nFlags & MK_SHIFT) RestrictPoint(point);
if (m_bDrawing)
{
dc.MoveTo(m_PrevPoint);
dc.LineTo(point);
if (m_StartPoint.PtInRect(point))
{
m_bDrawing = false;
Clip();
Invalidate();
return;
}
}
else
{
m_bDrawing = true;
m_CurrentPoint = point;
m_StartPoint.SetRectEmpty();
m_StartPoint.InflateRect(::GetSystemMetrics(SM_CXDRAG) ::GetSystemMetrics(SM_CYDRAG));
m_StartPoint.OffsetRect(point);
m_InputPolygon.clear();
m_ClippedPolygon.clear();
Invalidate();
}
m_InputPolygon.push_back(point);
m_PrevPoint = point;
}
void CChildView::onmousemove(UINT nFlags CPoint point)
{
if (m_bDrawing)
{
CClientDC dc(this);
PrepareDC(dc);
dc.DPtoLP(& point);
if (nFlags & MK_SHIFT) Rest
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4634 2004-12-29 11:55 PolygonClipDemo.vcproj
文件 771 2004-12-26 15:21 resource.h
文件 215 2004-12-20 11:09 stdafx.cpp
文件 1873 2004-12-28 12:20 stdafx.h
文件 8269 2004-12-29 11:44 SutherlandHodgman.h
文件 326 2004-12-26 22:07 res\closepoly.cur
文件 21630 2001-04-20 08:48 res\PolygonClipDemo.ico
文件 705 2004-12-20 11:09 res\PolygonClipDemo.manifest
文件 406 2004-12-20 11:09 res\PolygonClipDemo.rc2
目录 0 2004-12-26 22:07 res\
文件 4703 2005-08-03 13:58 ChildView.cpp
文件 862 2004-12-26 17:17 ChildView.h
文件 18349 2003-12-09 15:06 COPYING.txt
文件 2211 2004-12-26 17:03 MainFrm.cpp
文件 872 2004-12-26 16:54 MainFrm.h
文件 2779 2004-12-20 11:09 PolygonClipDemo.cpp
文件 65536 2004-12-29 11:55 PolygonClipDemo.exe
文件 601 2004-12-20 11:09 PolygonClipDemo.h
文件 9216 2004-12-26 22:07 PolygonClipDemo.rc
- 上一篇:使用opengl的图形学大作业
- 下一篇:一个判断字符串编码类型的类,支持多种编码
相关资源
- FTP客户端程序设计(基于visual c++)
- C++MFC物资管理系统源码.zip
- 课程设计报告+源码--计算器(C++)
- 用C++实现的CURE算法的源码
- 《c语言代码大全》源代码
- C++写的餐厅管理系统(含源代码和运
- 读取SysListView32.rar源码
- 六种排序算法C语言实现源代码
- C语言100个经典算法题目+源码
- Ftp服务器与客户端VC++完整版源码
- 模仿系统画图的程序源码
- 图像连续拼接算法源码
- 自动寻路贪吃蛇C++源码
- 红外避障小车程序C语言源码.rar
- C语言的小型通用数据库.rar
- QT录屏源码 ,无BUG
- segy文件读取C++源码
- VC++五子棋程序源码VC6.0控制台下运行
- C语言课程设计学生成绩管理系统源码
- JPEG源码(C语言实现)
- c++ 记事本 源码
- VC HOSTS 修改工具源码(MFC工程)
- netstat -an 实现的源码
- QT编写的电子时钟 c++源码
- 操作系统银行家算法源码
- 基于颜色的目标追踪源码
- 远程仓库湿度监测系统设计-Proteus仿真
- 黄金矿工游戏源码c++
- 大富翁游戏源码
- opengl绘制花瓶源码基于glut库
评论
共有 条评论