477 lines
9.8 KiB
C++
477 lines
9.8 KiB
C++
// 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;
|
||
} |