// CDialog3DScriptDrawingBoard.cpp : 实现文件 // #include "stdafx.h" #include "GeoMative.h" #include "CDialog3DScriptDrawingBoard.h" #include "afxdialogex.h" // CDialog3DScriptDrawingBoard 对话框 IMPLEMENT_DYNAMIC(CDialog3DScriptDrawingBoard, CDialog) CDialog3DScriptDrawingBoard::CDialog3DScriptDrawingBoard(CWnd* pParent /*=NULL*/) : CDialog(CDialog3DScriptDrawingBoard::IDD, pParent) { m_bZOrder = FALSE; } CDialog3DScriptDrawingBoard::~CDialog3DScriptDrawingBoard() { } void CDialog3DScriptDrawingBoard::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } CDialog3DScriptDrawingBoard* CDialog3DScriptDrawingBoard::GetInstance() { static CDialog3DScriptDrawingBoard dlgDrawingBoard; return &dlgDrawingBoard; } BEGIN_MESSAGE_MAP(CDialog3DScriptDrawingBoard, CDialog) ON_WM_PAINT() END_MESSAGE_MAP() // CDialog3DScriptDrawingBoard 消息处理程序 BOOL CDialog3DScriptDrawingBoard::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 m_uiXElecNumber = 0; m_uiYElecNumber = 0; return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } void CDialog3DScriptDrawingBoard::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialogEx::OnPaint() CRect rcWnd; GetParent()->GetClientRect(&rcWnd); dc.FillSolidRect(rcWnd, RGB(255, 255, 255)); CRect rcBrush; rcBrush.left = rcWnd.left + 50; rcBrush.right = rcWnd.right - 50; rcBrush.top = rcWnd.top + 50; rcBrush.bottom = rcWnd.bottom - 50; //实心圆 CBrush cBlackBrush; cBlackBrush.CreateSolidBrush(RGB(0, 0, 0)); dc.SelectObject(cBlackBrush); CPen pen; pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); dc.SelectObject(pen); float iCellWidth = (rcBrush.right - rcBrush.left)*1.0 / (m_uiXElecNumber*CIRCLE_DIAMETER*1.0); float iCellHeight = (rcBrush.bottom - rcBrush.top)*1.0 / (m_uiYElecNumber * CIRCLE_DIAMETER*1.0); float iStartXPoint = (rcBrush.right - rcBrush.left) / 2 - ((iCellWidth+CIRCLE_DIAMETER)*m_uiXElecNumber / 2); float iStartYPoint = (rcBrush.bottom - rcBrush.top) / 2 - ((iCellHeight + CIRCLE_DIAMETER)*m_uiYElecNumber / 2); if (iStartXPoint < 0) { iStartXPoint = 30; } if (iStartYPoint < 0) { iStartYPoint = 5; } float iCurStartXPoint = 0; float iCurStartYPoint = 0; int i = 0, j = 0; //绘制X、Y标志以及刻度 if (m_uiXElecNumber > 0 && m_uiYElecNumber > 0) { RECT rc; CString strText; //绘制X轴方向刻度 /*for (i = 0; i < DIAL_NUMBER; i++) { //rc.left = iStartXPoint + i*(m_uiYElecNumber * (iCellHeight + CIRCLE_DIAMETER) / (DIAL_NUMBER - 1)); //rc.left = iStartXPoint + i*m_fXElecDistance*m_uiXElecNumber / (DIAL_NUMBER - 1); rc.left = iStartXPoint + i*(iCellWidth-CIRCLE_DIAMETER)*m_uiXElecNumber / (DIAL_NUMBER - 1); rc.right = rc.left + 50; rc.top = iStartYPoint + (m_uiYElecNumber - 1) * (iCellHeight + CIRCLE_DIAMETER) + CIRCLE_DIAMETER; rc.bottom = rc.top + 20; if (0 == i) { dc.DrawText(_T("0.0"), &rc, DT_WORDBREAK | DT_TOP|DT_LEFT); } else { strText.Format(_T("%.1f"), i*m_fXElecDistance*m_uiXElecNumber/(DIAL_NUMBER-1)); dc.DrawText(strText, &rc, DT_WORDBREAK | DT_TOP | DT_LEFT); } }*/ rc.left = iStartXPoint-5; rc.right = rc.left + 50; rc.top = iStartYPoint + (m_uiYElecNumber - 1) * (iCellHeight + CIRCLE_DIAMETER) + CIRCLE_DIAMETER; rc.bottom = rc.top + 20; dc.DrawText(_T("0.0"), &rc, DT_WORDBREAK | DT_TOP | DT_LEFT); //绘制X标志 rc.left = (rcBrush.right - rcBrush.left) / 2 - 10; rc.right = rc.left + 20; rc.top = iStartYPoint + (m_uiYElecNumber - 1) * (iCellHeight + CIRCLE_DIAMETER) + 10; rc.bottom = rc.top + 20; dc.DrawText(_T("X"), &rc, DT_WORDBREAK | DT_TOP); //绘制Y方向刻度 /*for (i = 0; i < DIAL_NUMBER; i++) { rc.left = iStartXPoint - 40; rc.right = rc.left + 40 - CIRCLE_DIAMETER; //rc.top = iStartYPoint + i*(m_uiYElecNumber)* (iCellHeight + CIRCLE_DIAMETER) / (DIAL_NUMBER - 1); rc.top = iStartYPoint + (DIAL_NUMBER - i - 1)*(iCellHeight - CIRCLE_DIAMETER)*m_uiYElecNumber / (DIAL_NUMBER - 1); rc.bottom = rc.top + 20; //strText.Format(_T("%.1f"), (DIAL_NUMBER - i - 1)*(m_uiYElecNumber * (iCellHeight + CIRCLE_DIAMETER) / (DIAL_NUMBER - 1))); if (DIAL_NUMBER-1 == i) { dc.DrawText(_T("0.0"), &rc, DT_WORDBREAK | DT_RIGHT); } else { strText.Format(_T("%.1f"), (DIAL_NUMBER-i-1)*m_fYElecDistance*m_uiYElecNumber / (DIAL_NUMBER - 1)); dc.DrawText(strText, &rc, DT_WORDBREAK | DT_RIGHT); } }*/ //绘制Y标志 rc.right = iStartXPoint - 10; rc.left = rc.right - 20; rc.top = iStartYPoint + (m_uiYElecNumber * (iCellHeight + CIRCLE_DIAMETER)) / 2 - 10; //rc.top = iStartYPoint + (DIAL_NUMBER - i - 1)*(iCellHeight - CIRCLE_DIAMETER)*m_uiYElecNumber / (DIAL_NUMBER - 1); rc.bottom = rc.top + 20; dc.DrawText(_T("Y"), &rc, DT_WORDBREAK | DT_RIGHT); } CString strLog; strLog.Format(_T("总宽%d,总高%d,iCellWidth=%f,iCellHeight=%f,iStartXPoint=%f,iStartYPoint=%f\n"), rcBrush.right - rcBrush.left, rcBrush.bottom - rcBrush.top, iCellWidth, iCellHeight, iStartXPoint, iStartYPoint); OutputDebugString(strLog); //非Z序排列 if (!m_bZOrder) { for (i = 0; i < m_uiXElecNumber; i++) { for (j = 0; j < m_uiYElecNumber; j++) { iCurStartXPoint = iStartXPoint + i * (iCellWidth + CIRCLE_DIAMETER); iCurStartYPoint = iStartYPoint + j * (iCellHeight + CIRCLE_DIAMETER); strLog.Format(_T("left=%f,top=%f,right=%f,bottom=%f\n"), iStartXPoint + i * iCellWidth, iStartYPoint + j * iCellHeight, iStartXPoint + i * iCellWidth + CIRCLE_DIAMETER, iStartYPoint + j * iCellHeight + CIRCLE_DIAMETER); OutputDebugString(strLog); dc.Ellipse(iCurStartXPoint, iCurStartYPoint, iCurStartXPoint + CIRCLE_DIAMETER, iCurStartYPoint + CIRCLE_DIAMETER); switch (m_enCableDirectionType) { case EN_CABLE_X_DIRECTION://电缆X方向 { if (i != m_uiXElecNumber - 1) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER, iCurStartYPoint + CIRCLE_DIAMETER / 2); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER + iCellWidth, iCurStartYPoint + CIRCLE_DIAMETER / 2); } //第一列 if (i == 0 && j != m_uiYElecNumber - 1) { if (m_uiYElecNumber % 2 == 0) { if (j % 2 == 1) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER + iCellHeight); } } else { if (j % 2 == 0) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER + iCellHeight); } } } //最后一列 else if (i == m_uiXElecNumber - 1) { if (m_uiYElecNumber % 2 == 0) { if (j % 2 == 0) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER + iCellHeight); } } else { if (j % 2 == 1) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER + iCellHeight); } } } } break; case EN_CABLE_Y_DIRECTION://电缆Y方向 { if (j != m_uiYElecNumber - 1) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER + iCellHeight); } //第一行 if (j == 0 && i != m_uiXElecNumber - 1) { if (i % 2 == 0) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER / 2); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER + iCellWidth, iCurStartYPoint + CIRCLE_DIAMETER / 2); } } //最后一行 else if ((j == m_uiYElecNumber - 1) && (i != m_uiXElecNumber - 1)) { if (i % 2 == 1) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER / 2); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER + iCellWidth, iCurStartYPoint + CIRCLE_DIAMETER / 2); } } } break; default: break; } } } } //Z序排列 else { for (i = 0; i < m_uiXElecNumber; i++) { for (j = 0; j < m_uiYElecNumber; j++) { iCurStartXPoint = iStartXPoint + i * (iCellWidth + CIRCLE_DIAMETER); iCurStartYPoint = iStartYPoint + j * (iCellHeight + CIRCLE_DIAMETER); strLog.Format(_T("left=%f,top=%f,right=%f,bottom=%f\n"), iStartXPoint + i * iCellWidth, iStartYPoint + j * iCellHeight, iStartXPoint + i * iCellWidth + CIRCLE_DIAMETER, iStartYPoint + j * iCellHeight + CIRCLE_DIAMETER); OutputDebugString(strLog); dc.Ellipse(iCurStartXPoint, iCurStartYPoint, iCurStartXPoint + CIRCLE_DIAMETER, iCurStartYPoint + CIRCLE_DIAMETER); switch (m_enCableDirectionType) { case EN_CABLE_X_DIRECTION://电缆X方向 { if (i != m_uiXElecNumber - 1) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER, iCurStartYPoint + CIRCLE_DIAMETER / 2); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER + iCellWidth, iCurStartYPoint + CIRCLE_DIAMETER / 2); } //最后一列 else { if (j != m_uiYElecNumber - 1) { dc.MoveTo(iStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER + iCellHeight); } } } break; case EN_CABLE_Y_DIRECTION://电缆Y方向 { if (j != m_uiYElecNumber - 1) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iCurStartYPoint + CIRCLE_DIAMETER + iCellHeight); } //第一行 else { if (i != m_uiXElecNumber - 1) { dc.MoveTo(iCurStartXPoint + CIRCLE_DIAMETER / 2, iStartYPoint + CIRCLE_DIAMETER / 2); dc.LineTo(iCurStartXPoint + CIRCLE_DIAMETER + iCellWidth, iStartYPoint + (m_uiYElecNumber - 1)*(iCellHeight + CIRCLE_DIAMETER) + CIRCLE_DIAMETER / 2); } } } break; default: break; } } } } }