📄 arcattr.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 + -