Files
envi-code/SourceCode/Code2026/tg_shs/shs_annotate/ManualDimAxisDlg.cpp
T

477 lines
9.8 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
// ManualDimAxisDlg.cpp : implementation file
//
#include "stdafx.h"
#include "ManualDimAxisDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// 初始化对话框中的全局变量
BOOL CManualDimAxisDlg::m_bButCon = false;
int CManualDimAxisDlg::m_iWhichSlected = 0;
int CManualDimAxisDlg::m_iTxtorGrap = 0;
CString CManualDimAxisDlg::m_sOneAxis = _T("");
CString CManualDimAxisDlg::m_sMutiAxis = _T("");
CString CManualDimAxisDlg::m_csStartAxis = _T("");
CString CManualDimAxisDlg::m_csEndAxis = _T("");
// add by xly on100826 引线长度控件的变量的初始值
double CManualDimAxisDlg::m_dLeaderLen = 10;
IMPLEMENT_DYNAMIC(CManualDimAxisDlg, CModelessDialog)
CManualDimAxisDlg::CManualDimAxisDlg(CWnd* pParent /*=NULL*/)
: CModelessDialog(CManualDimAxisDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CManualDimAxisDlg)
//}}AFX_DATA_INIT
}
void CManualDimAxisDlg::DoDataExchange(CDataExchange* pDX)
{
CModelessDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CManualDimAxisDlg)
DDX_Check(pDX, IDC_CHK_CONTINUE, m_bButCon);
DDX_Radio(pDX, IDC_RAD_SINGLE, m_iWhichSlected);
DDX_Radio(pDX, IDC_RAD_TEXT, m_iTxtorGrap);
DDX_Text(pDX, IDC_EDI_NUMAXIS, m_csAxis);
DDX_Text(pDX, IDC_EDT_STNUM, m_csStartAxis);
DDX_Text(pDX, IDC_EDT_ENDNUM, m_csEndAxis);
// add by xly on100826 增加引线长度控件的变量关联
DDX_Text(pDX, IDC_CMB_LEADERLEN, m_dLeaderLen);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CManualDimAxisDlg, CModelessDialog)
//{{AFX_MSG_MAP(CModelessDialog)
ON_BN_CLICKED(IDC_RAD_SINGLE,OnBnClickedRadSingle)
ON_BN_CLICKED(IDC_RAD_MUTI,OnBnClickedRadMuti)
ON_BN_CLICKED(IDC_RAD_TEXT,OnBnClickedRadText)
ON_BN_CLICKED(IDC_RAD_GRAPH,OnBnClickedRadGraph)
ON_BN_CLICKED(IDC_CHK_CONTINUE, OnBnClickedChkContinue)
ON_EN_KILLFOCUS(IDC_EDI_NUMAXIS, OnEnKillfocusEditAxisDim)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CManualDimAxisDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
if (m_iWhichSlected == 0) // 单轴号
{
m_csAxis = m_sOneAxis;
}
else // 多轴号
{
m_csAxis = m_sMutiAxis;
}
// 设置控件显示
SetCWndShowOrHide();
// 设置连续按钮是否可编辑
GetDlgItem(IDC_CHK_CONTINUE)->EnableWindow(m_iWhichSlected==1);
// 设置幻灯片
SetPicture();
// 控件提示工具
AddTip(IDC_STC_NUM, _T("输入多个轴号, 以逗号或空格做为分隔。"));
UpdateData(FALSE);
return TRUE;
}
// 设置控件显示或隐藏
void CManualDimAxisDlg::SetCWndShowOrHide()
{
int nShow1 = SW_SHOW, // 控制轴号文本框和轴号编辑框
nShow2 = SW_SHOW, // 控制文本和图形按钮
nShow3 = SW_SHOW; // 控制起始、终止文本框和编辑框
if (m_iWhichSlected == 0) // 单轴号
{
nShow2 = SW_HIDE;
nShow3 = SW_HIDE;
}
else if (m_bButCon) // 多轴号,连续
{
nShow1 = SW_HIDE;
nShow2 = SW_HIDE;
}
else // 多轴号,不连续
{
nShow3 = SW_HIDE;
}
GetDlgItem(IDC_STC_NUM)->ShowWindow(nShow1);
GetDlgItem(IDC_EDI_NUMAXIS)->ShowWindow(nShow1);
GetDlgItem(IDC_RAD_TEXT)->ShowWindow(nShow2);
GetDlgItem(IDC_RAD_GRAPH)->ShowWindow(nShow2);
GetDlgItem(IDC_EDT_STNUM)->ShowWindow(nShow3);
GetDlgItem(IDC_EDT_ENDNUM)->ShowWindow(nShow3);
GetDlgItem(IDC_STC_ST)->ShowWindow(nShow3);
GetDlgItem(IDC_STC_ENT)->ShowWindow(nShow3);
}
// 设置幻灯片显示
void CManualDimAxisDlg::SetPicture()
{
XString sFilePath(256);
if (m_iWhichSlected == 0) // 单轴号
{
sFilePath << _T("TArch(manualdim01)");
}
else if (m_bButCon) // 多轴号,连续
{
sFilePath << _T("TArch(manualdim04)");
}
else // 多轴号,不连续
{
if (m_iTxtorGrap == 0) // 文字
{
sFilePath << _T("TArch(manualdim02)");
}
else // 图形
{
sFilePath << _T("TArch(manualdim03)");
}
}
// 获得图片控件
CWnd* pWndBmp = GetDlgItem(IDC_STC_BMP);
ASSERT(pWndBmp);
// 获得图片区域
CDC *pDC = pWndBmp->GetDC();
CRect rect;
pWndBmp->GetClientRect(rect);
m_imgPreview.InitDC(pDC, rect, GetAcadBackColor());
m_imgPreview.PaintSlide(sFilePath);
m_imgPreview.SetDC(NULL);
pWndBmp->ReleaseDC(pDC);
}
// 单轴号
void CManualDimAxisDlg::OnBnClickedRadSingle()
{
UpdateData(TRUE);
if (m_iWhichSlected == 0) // 单轴号
{
m_csAxis = m_sOneAxis;
}
else // 多轴号
{
m_csAxis = m_sMutiAxis;
}
// 设置连续按钮是否可编辑
GetDlgItem(IDC_CHK_CONTINUE)->EnableWindow(m_iWhichSlected == 1);
// 设置控件显示
SetCWndShowOrHide();
// 设置幻灯片
SetPicture();
UpdateData(FALSE);
}
// 多轴号
void CManualDimAxisDlg::OnBnClickedRadMuti()
{
UpdateData(TRUE);
if (m_iWhichSlected == 0) // 单轴号
{
m_csAxis = m_sOneAxis;
}
else // 多轴号
{
m_csAxis = m_sMutiAxis;
}
// 设置连续按钮是否可编辑
GetDlgItem(IDC_CHK_CONTINUE)->EnableWindow(m_iWhichSlected == 1);
// 设置控件显示
SetCWndShowOrHide();
// 设置幻灯片
SetPicture();
UpdateData(FALSE);
}
// 连续
void CManualDimAxisDlg::OnBnClickedChkContinue()
{
UpdateData(TRUE);
// 设置控件显示
SetCWndShowOrHide();
// 设置幻灯片
SetPicture();
UpdateData(FALSE);
}
// 文字
void CManualDimAxisDlg::OnBnClickedRadText()
{
UpdateData(TRUE);
// 设置幻灯片
SetPicture();
UpdateData(FALSE);
}
// 图形
void CManualDimAxisDlg::OnBnClickedRadGraph()
{
UpdateData(TRUE);
// 设置幻灯片
SetPicture();
UpdateData(FALSE);
}
// 窗口重绘消息
void CManualDimAxisDlg::OnPaint()
{
CPaintDC dc(this);
CRect rcClip, rcImage;
dc.GetClipBox(&rcClip);
CWnd *pImageBox = GetDlgItem(IDC_STC_BMP);
if (pImageBox)
{
pImageBox->GetWindowRect(&rcImage);
ScreenToClient(&rcImage);
if (!rcImage.IntersectRect(&rcImage, &rcClip))
return;
CDC *pDC = pImageBox->GetDC();
m_imgPreview.SetDC(pDC);
m_imgPreview.Redraw();
m_imgPreview.SetDC(NULL);
pImageBox->ReleaseDC(pDC);
}
}
// 改变标注内容
void CManualDimAxisDlg::OnEnKillfocusEditAxisDim()
{
UpdateData(TRUE);
m_csAxis.TrimLeft();
m_csAxis.TrimRight();
if (m_iWhichSlected == 0) // 单轴号
{
m_sOneAxis = m_csAxis;
}
else // 多轴号
{
m_sMutiAxis = m_csAxis;
}
UpdateData(FALSE);
}
// 获得首个轴号内容,试用于单轴号,以及文字类多轴号(圈内部分)
CString CManualDimAxisDlg::GetFirstAxis()
{
UpdateData(TRUE);
CString csAxis = m_csAxis;
csAxis.TrimLeft();
csAxis.TrimRight();
if (m_iWhichSlected == 0) // 单轴号
{
return csAxis;
}
// 多轴号圈内部分,拆分输入的字符串
CStringArray csAry;
SeparatorNum(csAxis, _T(","), csAry);
if (csAry.GetSize() == 2) // 以","为分隔,拆分成功
{
csAxis = csAry.GetAt(0);
return csAxis;
}
csAry.RemoveAll();
SeparatorNum(csAxis, _T(" "), csAry);
if (csAry.GetSize() == 2) // 以" "为分隔,拆分成功
{
csAxis = csAry.GetAt(0);
return csAxis;
}
csAry.RemoveAll();
SeparatorNum(csAxis, _T(" "), csAry);
if (csAry.GetSize() == 2) // 以全角空格为分隔,拆分成功
{
csAxis = csAry.GetAt(0);
return csAxis;
}
csAry.RemoveAll();
SeparatorNum(csAxis, _T(","), csAry);
if (csAry.GetSize() == 2) // 以全角逗号为分隔,拆分成功
{
csAxis = csAry.GetAt(0);
return csAxis;
}
// 各种连字符拆分均不成功,输出单文本形式
return csAxis;
}
// 获得其他轴号内容,试用于文字类多轴号(圈外部分)
CString CManualDimAxisDlg::GetOtherAxis()
{
UpdateData(TRUE);
CString csAxis = m_csAxis;
// 文字类多轴号圈外部分拆分输入的字符串
CStringArray csAry;
SeparatorNum(csAxis, _T(","), csAry);
if(csAry.GetSize() == 2) // 以","为分隔,拆分成功
{
csAxis = csAry.GetAt(1);
return csAxis;
}
csAry.RemoveAll();
SeparatorNum(csAxis, _T(" "), csAry);
if (csAry.GetSize() == 2) // 以" "为分隔,拆分成功
{
csAxis = csAry.GetAt(1);
return csAxis;
}
csAry.RemoveAll();
SeparatorNum(csAxis, _T(" "), csAry);
if (csAry.GetSize() == 2) // 以全角空格为分隔,拆分成功
{
csAxis = csAry.GetAt(1);
return csAxis;
}
csAry.RemoveAll();
SeparatorNum(csAxis, _T(","), csAry);
if (csAry.GetSize() == 2) // 以全角逗号为分隔,拆分成功
{
csAxis = csAry.GetAt(1);
return csAxis;
}
csAxis = _T(" "); // 没有文字部分
return csAxis;
}
// 获得全部轴号内容,试用于图形类多轴号,包括首个轴号
void CManualDimAxisDlg::GetAllAxis(CStringArray &aryAxis)
{
UpdateData(TRUE);
CString csAxis = m_csAxis;
aryAxis.RemoveAll();
// 图形类多轴号拆分输入的字符串
SeparatorNum(csAxis, _T(","), aryAxis);
INT_PTR iLenAry = aryAxis.GetSize();
if (iLenAry > 1) // 以","为分隔,拆分成功
{
return;
}
aryAxis.RemoveAll();
SeparatorNum(csAxis, _T(" "), aryAxis);
iLenAry = aryAxis.GetSize();
if (iLenAry > 1) // 以" "为分隔,拆分成功
{
return;
}
aryAxis.RemoveAll();
SeparatorNum(csAxis, _T(" "), aryAxis);
iLenAry = aryAxis.GetSize();
if (iLenAry > 1) // 以全角空格为分隔,拆分成功
{
return;
}
aryAxis.RemoveAll();
SeparatorNum(csAxis, _T(","), aryAxis);
iLenAry = aryAxis.GetSize();
if (iLenAry > 1) // 以全角逗号为分隔,拆分成功
{
return;
}
aryAxis.RemoveAll();
aryAxis.Add(csAxis);
}
// 获得起始、终止轴号内容
void CManualDimAxisDlg::GetStartAndEndAxis(CString &csStart, CString &csEnd)
{
UpdateData(TRUE);
csStart = m_csStartAxis;
csEnd = m_csEndAxis;
}
// 对用户输入的字符串进行解析,递归调用实现
// csSymb为分隔符,包括全角和半角的逗号,以及空格(多个空格时,自动合并为1个)
// csText为等待解析的字符串
// aryAxis为返回的字符串数组:若单轴号,长度为1;若文字类多轴号,长度为2;若图形类多轴号,长度为n
void CManualDimAxisDlg::SeparatorNum(CString csText, CString csSymb, CStringArray &aryAxis)
{
csText.TrimLeft(); // 去掉两侧空格
csText.TrimRight();
// 查找是否存在指定符号
int iPos = csText.Find(csSymb);
if (iPos == -1)
{
aryAxis.Add(csText); // 单行字符串
return;
}
aryAxis.Add(csText.Left(iPos));
int iLen = (int)aryAxis.GetSize(),
iSymbLen = csSymb.GetLength();
if (iLen == 1 && (m_iWhichSlected==1 && !m_bButCon && m_iTxtorGrap==0))
{
iLen = csText.GetLength();
csText = csText.Right(iLen - iPos - iSymbLen);
csText.TrimLeft(); // 去掉左侧空格
aryAxis.Add(csText); // 多行字符串,文字形式
return;
}
// 多行字符串,图形形式
iLen = csText.GetLength();
csText = csText.Right(iLen - iPos - iSymbLen);
SeparatorNum(csText, csSymb, aryAxis);
}
// add by xly on 100826 获得引线的长度
double CManualDimAxisDlg::GetLeaderLen()
{
UpdateData(TRUE);
return m_dLeaderLen;
}