319 lines
10 KiB
C++
319 lines
10 KiB
C++
// 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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |