⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 circletool.cpp

📁 参数化车间设备资源绘制程序
💻 CPP
字号:
#include "StdAfx.h"

#include ".\circletool.h"
#include <math.h>

#include "circleobj.h"
#include "visdrawdoc.h"
#include "visdrawview.h"


CCircleTool::CCircleTool(void)
{
}

CCircleTool::~CCircleTool(void)
{
}

CCircleTool::CCircleTool(DrawShape drawShape)
	: CDrawTool(drawShape)
{
	pObj = NULL;
}

void CCircleTool::OnLButtonDown(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{	
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	double ptx, pty;
	CPoint local = point;

	//把设备坐标转化为逻辑坐标
	pView->ClientToDoc(local);

	pView->ClientToWorld(local, ptx,pty);
	if(!m_LMouseDownStep)
	{		
		pObj = new CCircleObj(CRect(local, CSize(0, 0)));	
		m_LMouseDownStep = 1;
		pView->GetDocument()->Add(pObj);
		//把第一个点指定为圆心
		pObj->SetCenterPoint(ptx,pty);
	}
	else
	{
		CDC* dc=pView->GetDC();
		dc->SetROP2(R2_COPYPEN);		
		dc->SelectStockObject(NULL_BRUSH);

		double radium;
		//计算圆半径
		radium = pObj->CalcRadium(ptx, pty);
		pObj->SetRadium(radium);
		pObj->CalcBounds(pView);

		CRect rect = CalcBounds(point);
		dc->Ellipse(rect);

		dc->SetROP2(R2_NOT);
		dc->MoveTo(lastPoint);
		dc->LineTo(point);

		pObj = NULL;
		m_LMouseDownStep = 0;
		pView->ReleaseDC(dc);
	}	
	lastPoint = point;
	prePoint = point;
}

void CCircleTool::OnLButtonUp(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
}

void CCircleTool::OnMouseMove(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CPoint local = point;

	double ptx, pty;

	//把设备坐标转化为逻辑坐标
	pView->ClientToDoc(local);

	pView->ClientToWorld(local,ptx,pty);

	if(m_LMouseDownStep)
	{
		//申请与视图窗口相关的设备描述表
		CDC* dc=pView->GetDC();

		//用屏幕颜色的反色绘图
		dc->SetROP2(R2_NOT);
		dc->SelectStockObject(NULL_BRUSH);
		switch(m_drawShape)
		{
		default:
		
			break;
		case circleTool:

			
			//绘制前一条直线
			dc->MoveTo(lastPoint);
			dc->LineTo(prePoint);
				
			//绘制起点到当前鼠标点位置的直线
			dc->MoveTo(lastPoint);
			dc->LineTo(point);
           
			double radium;	
			CRect rect;			

			radium = pObj->CalcRadium(ptx,pty);
			pObj->SetRadium(radium);

			rect = CalcBounds(prePoint);
			dc->Ellipse(rect);
			rect = CalcBounds(point);
			dc->Ellipse(rect);

			break;		
		}
		prePoint = point;
		
		pView->ReleaseDC(dc);

	}
}

void CCircleTool::OnLButtonDblClk(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
}

void CCircleTool::CreateObj(CVisDrawView* pView, const CPoint& point)
{
	
}

CRect CCircleTool::CalcBounds(CPoint pt)
{
	CRect rect;
	long dx,dy;
	double r;
	long Radium;
	dx = pt.x - lastPoint.x;
	dy = pt.y - lastPoint.y;
	r = sqrt((double)(dx*dx+dy*dy));

	Radium = (long)r;

	rect.top = (long)(lastPoint.y + Radium);
	rect.left = (long)(lastPoint.x - Radium);
	rect.bottom = (long)(lastPoint.y - Radium);
	rect.right = (long)(lastPoint.x + Radium);

	return rect;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -