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

📄 arcattr.cpp

📁 这是书上的代码
💻 CPP
字号:
// Arcattr.cpp : implementation file
//

#include "stdafx.h"
#include "const.h"
#include "painted.h"
#include "paintobj.h"
#include "paintdoc.h"
#include "Arcattr.h"
#include "Nodeattr.h"
#include "ObstacleDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CArcattr dialog


CArcattr::CArcattr(CWnd* pParent /*=NULL*/)
	: CDialog(CArcattr::IDD, pParent)
{
	//{{AFX_DATA_INIT(CArcattr)
	m_ncirclecenterx = 0.0f;
	m_ncirclecentery = 0.0f;
	m_nradius = 0.0f;
	m_uArcPathId = 0;
	m_fArcPathLimit = 0.0f;
	m_uEndId = 0;
	m_uStartId = 0;
	m_fEndAngle = 0.0;
	m_fStartAngle = 0.0;
	m_Guidance = -1;
	m_ArcPathHead = -1;
	m_ArcPathDirection = -1;
	m_nArcType = -1;
	//}}AFX_DATA_INIT
}


void CArcattr::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CArcattr)
	DDX_Text(pDX, IDC_CIRCLECENTERX, m_ncirclecenterx);
	DDX_Text(pDX, IDC_CIRCLECENTERY, m_ncirclecentery);
	DDX_Text(pDX, IDC_RADIUS, m_nradius);
	DDX_Text(pDX, IDC_ARCPATHID, m_uArcPathId);
	DDX_Text(pDX, IDC_ARCPATHLIMIT, m_fArcPathLimit);
	DDX_Text(pDX, IDC_ENDID, m_uEndId);
	DDX_Text(pDX, IDC_STARTID, m_uStartId);
	DDX_Text(pDX, IDC_ENDANGLE, m_fEndAngle);
	DDX_Text(pDX, IDC_STARTANGLE, m_fStartAngle);
	DDX_Radio(pDX, IDC_RADIO1, m_Guidance);
	DDX_Radio(pDX, IDC_RADIO4, m_ArcPathHead);
	DDX_Radio(pDX, IDC_RADIO6, m_ArcPathDirection);
	DDX_Radio(pDX, IDC_RADIO8, m_nArcType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CArcattr, CDialog)
	//{{AFX_MSG_MAP(CArcattr)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CArcattr message handlers

void CArcattr::OnButton1() //起点属性
{
	// TODO: Add your control notification handler code here
loop2:
	CPnt point1;
	CNodeattr  Nodeattr;	
			
	point1=m_pActive1->returnattr1();
	Nodeattr.m_fNodex=point1.x;
	Nodeattr.m_fNodey=point1.y;				
	Nodeattr.m_uNodeId=m_pActive1->m_uStartNodeId;
	UINT id=m_pActive1->m_uStartNodeId;
	Nodeattr.m_fHeading=m_pActive1->m_fStartHeading;
	UINT type=m_pActive1->m_uStartNodeType;				
	if(type&0x01) Nodeattr.m_bCheck1=TRUE;
	if(type&0x02) Nodeattr.m_bCheck2=TRUE;
	if(type&0x04) Nodeattr.m_bCheck3=TRUE;
	if(type&0x08) Nodeattr.m_bCheck4=TRUE;				
	int result=Nodeattr.DoModal();				
	if(result==IDOK)
	{	
		//如果更改了节点号,不能与某存在的节点号相同
		//必须定义新的节点号
		CPainted*	pPainter;
		if(id!=Nodeattr.m_uNodeId)
		{
			BOOL breturn=FALSE;
			int nShapes = m_pDoc->NumShapes();
			for (int index = 0; index < nShapes; index++)
			{
				pPainter =m_pDoc->GetShape(index);
				if(pPainter->m_uStartNodeId==Nodeattr.m_uNodeId||pPainter->m_uEndNodeId==Nodeattr.m_uNodeId)
				{
					CString str="更改后的节点号不能与某存在的节点号相同,必须重新定义新的节点号!";
					AfxMessageBox(str);
					breturn=TRUE;
					break;
				}
			}
			if(breturn)	{goto loop2;}
		}
		//节点编号更改了以后,应与m_uCurNodeIdMax
		//比较,大则要更新m_uCurNodeIdMax
		int nShapes = m_pDoc->NumShapes();
		for (int index = 0; index < nShapes; index++)
		{
			pPainter =m_pDoc->GetShape(index);
			if(pPainter->m_uStartNodeId==id)
			{ 
				pPainter->m_uStartNodeId=Nodeattr.m_uNodeId;
				pPainter->m_fStartHeading=Nodeattr.m_fHeading;					
				type=0;
				if(Nodeattr.m_bCheck1) type|=0x01;
				if(Nodeattr.m_bCheck2) type|=0x02;
				if(Nodeattr.m_bCheck3) type|=0x04;
				if(Nodeattr.m_bCheck4) type|=0x08;
				pPainter->m_uStartNodeType=type;							
			}
			else if(pPainter->m_uEndNodeId==id)
			{
				pPainter->m_uEndNodeId=Nodeattr.m_uNodeId;
				pPainter->m_fEndHeading=Nodeattr.m_fHeading;					
				type=0;
				if(Nodeattr.m_bCheck1) type|=0x01;
				if(Nodeattr.m_bCheck2) type|=0x02;
				if(Nodeattr.m_bCheck3) type|=0x04;
				if(Nodeattr.m_bCheck4) type|=0x08;
				pPainter->m_uEndNodeType=type;
			}
		}
		m_pDoc->GetNodeIdMax();//更新m_uCurNodeIdMax
	}
	m_uStartId=Nodeattr.m_uNodeId;
	UpdateData(FALSE);
}

void CArcattr::OnButton2() //终点属性
{
	// TODO: Add your control notification handler code here
loop3:
	CPnt point1;
	CNodeattr  Nodeattr;	
			
	point1=m_pActive1->returnattr2();
	Nodeattr.m_fNodex=point1.x;
	Nodeattr.m_fNodey=point1.y;				
	Nodeattr.m_uNodeId=m_pActive1->m_uEndNodeId;
	UINT id=m_pActive1->m_uEndNodeId;
	Nodeattr.m_fHeading=m_pActive1->m_fEndHeading;
	UINT type=m_pActive1->m_uEndNodeType;				
	if(type&0x01) Nodeattr.m_bCheck1=TRUE;
	if(type&0x02) Nodeattr.m_bCheck2=TRUE;
	if(type&0x04) Nodeattr.m_bCheck3=TRUE;
	if(type&0x08) Nodeattr.m_bCheck4=TRUE;				
	int result=Nodeattr.DoModal();				
	if(result==IDOK)
	{	
		//如果更改了节点号,不能与某存在的节点号相同
		//必须定义新的节点号
		CPainted*	pPainter;
		if(id!=Nodeattr.m_uNodeId)
		{
			BOOL breturn=FALSE;
			int nShapes = m_pDoc->NumShapes();
			for (int index = 0; index < nShapes; index++)
			{
				pPainter =m_pDoc->GetShape(index);
				if(pPainter->m_uStartNodeId==Nodeattr.m_uNodeId||pPainter->m_uEndNodeId==Nodeattr.m_uNodeId)
				{
					CString str="更改后的节点号不能与某存在的节点号相同,必须重新定义新的节点号!";
					AfxMessageBox(str);
					breturn=TRUE;
					break;
				}
			}
			if(breturn)	{goto loop3;}
		}
		//节点编号更改了以后,应与m_uCurNodeIdMax
		//比较,大则要更新m_uCurNodeIdMax
		int nShapes = m_pDoc->NumShapes();
		for (int index = 0; index < nShapes; index++)
		{
			pPainter =m_pDoc->GetShape(index);
			if(pPainter->m_uStartNodeId==id)
			{ 
				pPainter->m_uStartNodeId=Nodeattr.m_uNodeId;
				pPainter->m_fStartHeading=Nodeattr.m_fHeading;					
				type=0;
				if(Nodeattr.m_bCheck1) type|=0x01;
				if(Nodeattr.m_bCheck2) type|=0x02;
				if(Nodeattr.m_bCheck3) type|=0x04;
				if(Nodeattr.m_bCheck4) type|=0x08;
				pPainter->m_uStartNodeType=type;							
			}
			else if(pPainter->m_uEndNodeId==id)
			{
				pPainter->m_uEndNodeId=Nodeattr.m_uNodeId;
				pPainter->m_fEndHeading=Nodeattr.m_fHeading;					
				type=0;
				if(Nodeattr.m_bCheck1) type|=0x01;
				if(Nodeattr.m_bCheck2) type|=0x02;
				if(Nodeattr.m_bCheck3) type|=0x04;
				if(Nodeattr.m_bCheck4) type|=0x08;
				pPainter->m_uEndNodeType=type;
			}
		}
		m_pDoc->GetNodeIdMax();//更新m_uCurNodeIdMax
	}
	m_uEndId=Nodeattr.m_uNodeId;
	UpdateData(FALSE);
}

void CArcattr::OnButton3() //障碍模式
{
	// TODO: Add your control notification handler code here
	CObstacleDlg ObsDlg;
	UINT ObsMode;
	ObsMode=m_pActive1->m_uPathObstacle;
	ObsDlg.m_nObstMode=ObsMode;
	int result=ObsDlg.DoModal();				
	if(result==IDOK)
	{
		m_pActive1->m_uPathObstacle=ObsDlg.m_nObstMode;
	}
}
/*
void CArcattr::OnChecktypr() 
{
	// TODO: Add your control notification handler code here
	if(m_ctlCheckType.GetCheck())//m_nArcType
	{
		m_bCheckType=TRUE;
		GetDlgItem(IDC_RADIO8)->EnableWindow(FALSE);
		GetDlgItem(IDC_RADIO9)->EnableWindow(FALSE);
		GetDlgItem(IDC_RADIO10)->EnableWindow(FALSE);
	}
	else
	{
		m_bCheckType=FALSE;
		GetDlgItem(IDC_RADIO8)->EnableWindow(TRUE);
		GetDlgItem(IDC_RADIO9)->EnableWindow(TRUE);
		GetDlgItem(IDC_RADIO10)->EnableWindow(TRUE);
	}
}
*/

⌨️ 快捷键说明

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