Files
geomative/GeomativeStudio/cpp/Views/CDialog3DScriptDrawingBoard.cpp
coco df489d5640 a
2026-07-03 16:05:30 +08:00

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;
}
}
}
}
}