Files
envi-code/SourceCode/Code2026/tg_shs/shs_annotate/ManualDimAxisDlg.cpp
T
2026-09-28 15:28:50 +08:00

477 lines
9.8 KiB
C++
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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;
}