a
This commit is contained in:
@@ -0,0 +1,319 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user