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

📄 pointobj.cpp

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

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


IMPLEMENT_SERIAL(CPointObj, CFigureObj, 0)
CPointObj::CPointObj(void)
{
}

CPointObj::~CPointObj(void)
{
}

CPointObj::CPointObj(const CRect& position)
		: CFigureObj(position)
{
	ASSERT_VALID(this);	

	m_pointx = 0.0;
	m_pointy = 0.0;
	
}

void CPointObj::Draw(CVisDrawView* pView, CDC* pDC)
{
	ASSERT_VALID(this);

	CBrush brush;
	if (!brush.CreateBrushIndirect(&m_logbrush))
		return;
	CPen pen;
	if (!pen.CreatePenIndirect(&m_logpen))
		return;

	CBrush* pOldBrush;
	CPen* pOldPen;

	if (m_bBrush)
		pOldBrush = pDC->SelectObject(&brush);
	else
		pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);

	if (m_bPen)
		pOldPen = pDC->SelectObject(&pen);
	else
		pOldPen = (CPen*)pDC->SelectStockObject(NULL_PEN);

	//把点的世界坐标转化为逻辑坐标
	CPoint nPoint;
	pView->WorldToClient(nPoint,m_pointx,m_pointy);

	pDC->SetPixel(nPoint.x,nPoint.y,m_logpen.lopnColor);

	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
}

void CPointObj::Serialize(CArchive& ar)
{
	ASSERT_VALID(this);
	//调用基类串行化
	CFigureObj::Serialize(ar);

	if (ar.IsStoring())
	{
		ar << m_pointx << m_pointy;		
	}
	else
	{
		ar >> m_pointx >> m_pointy;
	}
}

void CPointObj::SetPoint(double pointx, double pointy)
{
	m_pointx = pointx;
	m_pointy = pointy;
}
	
void CPointObj::GetPoint(double& pointx, double& pointy)
{
	pointx = m_pointx;
	pointy = m_pointy;
}

//计算外接矩形,以逻辑坐标表示
CRect CPointObj::CalcBounds(CVisDrawView* pView)
{
	CPoint nPoint;

	pView->WorldToClient(nPoint,m_pointx,m_pointy);

	m_position = CRect(nPoint, CSize(1, 1));

	return m_position;
}

//图元拾取判断函数
BOOL CPointObj::IsSelected(CVisDrawView* pView, const CPoint& point)
{
	//参数point是鼠标的逻辑坐标
	int distance, nSelectDistance;
	
	CPoint local;
	local = point;
	//鼠标点的设备坐标
	pView->DocToClient(local);

	//识别精度值
	nSelectDistance = pView->GetDocument()->GetSetectDistance()/2;
	
	CPoint pt;
	//把点的坐标转化为逻辑坐标
	pView->WorldToClient(pt, m_pointx, m_pointy);

	//把点的坐标由逻辑坐标转化为设备坐标
	pView->DocToClient(pt);

	//计算鼠标点point与点pt之间的像素距离

	distance = (int)PointToPoint(pt,local);

	//根据拾取条件判断图元是否被拾取
	return (distance < nSelectDistance);
	
}

//返回手柄个数
int CPointObj::GetHandleCount()
{
	ASSERT_VALID(this);

	return 1;
}

// 返回手柄中心逻辑坐标
CPoint CPointObj::GetHandle(CVisDrawView* pView, int nHandle)
{
	ASSERT_VALID(this);
	
	return CFigureObj::GetHandle(pView, nHandle);
}

// delta为逻辑坐标
void CPointObj::MoveTo(CPoint delta, CVisDrawView* pView)
{
	ASSERT_VALID(this);	
	//把delta转化为世界坐标
	double pointx,pointy;
	pointx = pView->ClientToWorld(delta.x);
	pointy = -pView->ClientToWorld(delta.y);


	//修改点坐标
	m_pointx += pointx;
	m_pointy += pointy;   

	//重新计算边界矩形
	CalcBounds(pView);

	//修改文档标志	
	m_pDocument->SetModifiedFlag();
}

⌨️ 快捷键说明

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