2188 lines
61 KiB
C++
2188 lines
61 KiB
C++
#include "stdafx.h"
|
||
#include "ElevDlg.h"
|
||
|
||
CString CEditMutiElevDlg::m_csLHeight = _T("当前层高");
|
||
CString CEditMutiElevDlg::m_csLNum = _T("1");
|
||
int g_iPrecision = 1; // 当前精度
|
||
CEditMutiElevDlg::CEditMutiElevDlg(CWnd* pParent)
|
||
: CModelessDialog(CEditMutiElevDlg::IDD, pParent)
|
||
{
|
||
//{{AFX_DATA_INIT(CEditMutiElevDlg)
|
||
//}}AFX_DATA_INIT
|
||
m_grid.SetColFixLength(); // 设置表格
|
||
m_grid.SetColNum(1);
|
||
m_grid.SetColSel(false);
|
||
m_grid.SetRowNum(1);
|
||
|
||
m_bPrec3 = TRUE; // 默认为显示三位有效数字
|
||
m_csFirstFloor = _T("1"); // 默认首层层号为1
|
||
}
|
||
|
||
void CEditMutiElevDlg::SetPrecision(BOOL bPrec3) // 精确度设置
|
||
{
|
||
m_bPrec3 = bPrec3;
|
||
m_grid.m_bPrec3 = bPrec3;
|
||
}
|
||
|
||
void CEditMutiElevDlg::SetCell01(CString csCell01) // 首层楼层号/解释
|
||
{
|
||
m_csCell01 = csCell01;
|
||
AnalysisCell01(); // 填充m_bAutoFloorInfo、m_csFirstFloor
|
||
}
|
||
|
||
// 解析楼层号/解释,填充m_bAutoFloorInfo、m_csFirstFloor
|
||
void CEditMutiElevDlg::AnalysisCell01()
|
||
{
|
||
XString csRet;
|
||
int nLen = m_csCell01.GetLength();
|
||
BOOL bRet = m_csCell01.IsEmpty()?FALSE:TRUE;
|
||
for (int i=0; i<nLen; i++)
|
||
{
|
||
if (_istdigit(m_csCell01[i])) // 数字,认为自动标注楼号
|
||
{
|
||
if (i == nLen-1) // 全部是数字
|
||
csRet = m_csCell01;
|
||
continue;
|
||
}
|
||
|
||
// sg add 090410,首位可以是负号
|
||
if (i==0 && nLen!=1 && m_csCell01[i]==_T('-')) // 负号,认为自动标注楼号
|
||
continue;
|
||
|
||
// 此位之前为数字,可认为是纯数字,认为自动标注楼号
|
||
if (i!=0 && (m_csCell01[i]==_T('F') || m_csCell01[i]==_T('f')))
|
||
{
|
||
csRet = m_csCell01.Left(i); // 1F、2F
|
||
break;
|
||
}
|
||
|
||
bRet = FALSE; // 含有非数字部分,认为不自动标注楼号
|
||
break;
|
||
}
|
||
|
||
m_bAutoFloorInfo = bRet;
|
||
if (bRet)
|
||
m_csFirstFloor = csRet;
|
||
}
|
||
|
||
void CEditMutiElevDlg::SetKnownElev(XStringList &lstElevs) // 已知的楼层号
|
||
{
|
||
m_grid.Clear();
|
||
|
||
int nLen = lstElevs.Length();
|
||
if (nLen == 0) // 标高表格为空
|
||
{
|
||
m_grid.SetRowNum(1l);
|
||
CString csText = GetFormatText(0); // 按格式输出
|
||
m_grid[0l][0l].SetText(csText);
|
||
return;
|
||
}
|
||
|
||
for (long l=0; l<nLen; l++)
|
||
{
|
||
CString csText = GetFormatText(lstElevs[l]); // 按格式输出
|
||
m_grid.InsertRow(0l);
|
||
m_grid[0l][0l].SetText(csText);
|
||
}
|
||
}
|
||
|
||
CString CEditMutiElevDlg::GetFormatText(double dElev) // 按照传进来的精度显示标高
|
||
{
|
||
CString csFormat = m_bPrec3?_T("%.3f"):_T("%.2f"),
|
||
csRet;
|
||
csRet.Format(csFormat, dElev);
|
||
return csRet;
|
||
}
|
||
|
||
// 按照传进来的精度显示标高,非数字不做处理
|
||
CString CEditMutiElevDlg::GetFormatText(XString szText)
|
||
{
|
||
BOOL bRet = TRUE;
|
||
CString csRet = szText.cs();
|
||
int nLen = csRet.GetLength();
|
||
for (int i = 0; i < nLen; i++)
|
||
{
|
||
if (_istdigit(csRet[i]) || csRet[i]==_T('.')) // 数字、小数点
|
||
continue;
|
||
if (i==0 && csRet[i]==_T('-')) // 负号
|
||
continue;
|
||
bRet = FALSE;
|
||
break;
|
||
}
|
||
|
||
if (bRet) // 如果全部是数字,则按照精度,控制显示
|
||
{
|
||
double dNum = _tstof(csRet);
|
||
csRet = GetFormatText(dNum);
|
||
}
|
||
return csRet;
|
||
}
|
||
|
||
// 返回给标高对话框的表格内容
|
||
void CEditMutiElevDlg::GetGridTexts(XStringList &lstElevs, XStringList &lstFloors)
|
||
{
|
||
lstElevs.Reset();
|
||
lstFloors.Reset();
|
||
|
||
int nLen = m_grid.GetRowNum(),
|
||
nFirst = _ttoi(m_csFirstFloor);
|
||
for (long l=nLen-1; l>=0; l--)
|
||
{
|
||
TString sCell = m_grid[l][0].GetText();
|
||
lstElevs.Append(tstrnew(sCell));
|
||
|
||
CString csFloor = _T("");
|
||
if (m_bAutoFloorInfo) // 自动标注
|
||
{
|
||
if (nFirst == 0) // sg add 090410,不会有0F
|
||
nFirst++;
|
||
csFloor.Format(_T("%dF"), nFirst);
|
||
nFirst++;
|
||
}
|
||
lstFloors.Append(tstrnew(csFloor));
|
||
}
|
||
}
|
||
|
||
double CEditMutiElevDlg::GetLHeight() // 获取层高,已换算到M单位
|
||
{
|
||
UpdateData(TRUE);
|
||
CString csLHeight;
|
||
m_cmbLHeight.GetWindowText(csLHeight);
|
||
|
||
double dRet = _tstof(csLHeight);
|
||
if (csLHeight == _T("当前层高"))
|
||
{
|
||
dRet = DocGetLHeight(); // 从TDbConfig中获取
|
||
}
|
||
return (dRet/1000.0); // 换算到M单位
|
||
}
|
||
|
||
void CEditMutiElevDlg::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialog::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(CEditMutiElevDlg)
|
||
DDX_Control(pDX, IDC_COMBO_LHEIGHT, m_cmbLHeight); // 层高
|
||
DDX_CBString(pDX, IDC_COMBO_LHEIGHT, m_csLHeight);
|
||
DDX_Control(pDX, IDC_COMBO_LNUM, m_cmbLNum); // 层数
|
||
DDX_CBString(pDX, IDC_COMBO_LNUM, m_csLNum);
|
||
DDX_Check(pDX, IDC_CHECK_AUTOCOL2, m_bAutoFloorInfo); // 自动添充楼层
|
||
DDX_Text(pDX, IDC_EDIT_FIRSTFLOOR, m_csFirstFloor); // 首层楼层号
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
BEGIN_MESSAGE_MAP(CEditMutiElevDlg, CModelessDialog)
|
||
//{{AFX_MSG_MAP(CEditMutiElevDlg)
|
||
ON_BN_CLICKED(IDC_BUTTON_ADDELEV, OnButtonAddElev)
|
||
ON_BN_CLICKED(IDC_BUTTON_CLEARLIST, OnButtonClearList)
|
||
ON_EN_CHANGE(IDC_EDIT_FIRSTFLOOR, OnChangeEditFirstFloor)
|
||
ON_BN_CLICKED(IDC_CHECK_AUTOCOL2, OnBnClickedAutoFloor) // sg add 090407
|
||
ON_MESSAGE (WM_GRID_CHANGED, OnGridChanged) // sg add 090410
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CEditMutiElevDlg message handlers
|
||
BOOL CEditMutiElevDlg::OnInitDialog()
|
||
{
|
||
CDialog::OnInitDialog();
|
||
m_grid.Create(this, IDC_LIST_MUTIELEV);
|
||
m_grid.FitLastCol();
|
||
m_grid.SetNoAppendButton(); // 本表格不支持向下的自动增加的箭头
|
||
m_grid.RecalcLayout(); // sg add 090511,解决了纵向滚动条的问题
|
||
|
||
int nRet = m_cmbLHeight.FindStringExact(0, m_csLHeight);
|
||
if (nRet < 0) // 没有找到
|
||
{
|
||
m_cmbLHeight.AddString(m_csLHeight);
|
||
nRet = m_cmbLHeight.FindStringExact(0, m_csLHeight);
|
||
}
|
||
m_cmbLHeight.SetCurSel(nRet);
|
||
|
||
nRet = m_cmbLNum.FindStringExact(0, m_csLNum);
|
||
if (nRet < 0) // 没有找到
|
||
{
|
||
m_cmbLNum.AddString(m_csLNum);
|
||
nRet = m_cmbLNum.FindStringExact(0, m_csLNum);
|
||
}
|
||
m_cmbLNum.SetCurSel(nRet);
|
||
|
||
GetDlgItem(IDC_EDIT_FIRSTFLOOR)->EnableWindow(m_bAutoFloorInfo);
|
||
return FALSE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
void CEditMutiElevDlg::OnButtonAddElev()
|
||
{
|
||
UpdateData(TRUE);
|
||
if (m_grid.IsEmpty())
|
||
return;
|
||
|
||
TString sText = m_grid[0l][0l].GetText();
|
||
double dElev = _tstof(sText); // 操作起始层
|
||
|
||
int nLNum = _ttoi(m_csLNum); // 层数
|
||
double dLHeight = GetLHeight(); // 层高,已经换算到了M单位
|
||
while (nLNum > 0)
|
||
{
|
||
dElev = dElev + dLHeight;
|
||
CString csRet = GetFormatText(dElev); // 按照格式输出
|
||
|
||
m_grid.InsertRow(0l);
|
||
m_grid[0l][0l].SetText(csRet);
|
||
nLNum--;
|
||
}
|
||
}
|
||
|
||
void CEditMutiElevDlg::OnButtonClearList()
|
||
{
|
||
m_grid.Clear(); // 清空
|
||
|
||
m_grid.SetRowNum(1); // 自动补0
|
||
CString csText = GetFormatText(0);
|
||
m_grid[0l][0l].SetText(csText);
|
||
}
|
||
|
||
void CEditMutiElevDlg::OnBnClickedAutoFloor() // 是否自动填充标高
|
||
{
|
||
UpdateData(TRUE);
|
||
GetDlgItem(IDC_EDIT_FIRSTFLOOR)->EnableWindow(m_bAutoFloorInfo);
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CEditMutiElevDlg::OnChangeEditFirstFloor()
|
||
{
|
||
CString csTmp = m_csFirstFloor; // 保留旧值,防止输入错误,只允许输入数字,负号
|
||
|
||
UpdateData(TRUE);
|
||
BOOL bRet = TRUE;
|
||
int nLen = m_csFirstFloor.GetLength();
|
||
for (int i = 0; i < nLen; i++)
|
||
{
|
||
if (_istdigit(m_csFirstFloor[i])) // 数字
|
||
continue;
|
||
if (i==0 && m_csFirstFloor[i]==_T('-')) // 负号
|
||
continue;
|
||
|
||
bRet = FALSE;
|
||
break;
|
||
}
|
||
|
||
if (!bRet) // 出现输入错误
|
||
m_csFirstFloor = csTmp;
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
LRESULT CEditMutiElevDlg::OnGridChanged(WPARAM wParam, LPARAM lParam)
|
||
{
|
||
m_grid.ArrangeDouble();
|
||
return (0L);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
CElevDlg *CElevDlg::g_pElevDlg = NULL;
|
||
CElevDlg::CElevDlg(TDbSymbElevation*pElev): CModelessDialog(IDD_ELEV, acedGetAcadFrame())
|
||
, m_pElev(pElev) , m_bSitePlanDlg(FALSE)
|
||
{
|
||
m_bDlgType = FALSE; // 对象编辑对话框为FALSE
|
||
g_nElevType = pElev->IsArchElev()?0:1; // 标高类型:建筑为0,总图为1
|
||
SetArchElevGrid(); // 设置表格行数、表头
|
||
|
||
// sg delete 090222,表格的设置,放到SetArchElevGrid函数中
|
||
// m_grid.SetColFixLength();
|
||
// m_grid.SetColNum(1);
|
||
// m_grid.SetColSel(false);
|
||
|
||
// sg delete 090222,从对象中读文字填表,放到InitGridAndTextFromEnt函数中
|
||
// XStringList sList; // 标高
|
||
// XString sText1 = pElev->GetText();
|
||
// TCHAR *p1 = (TCHAR *)sText1,
|
||
// *p2 = NULL;
|
||
// TCHAR szWord[256] = _T("");
|
||
// while(p2 = _tcschr(p1, _T('/')))
|
||
// {
|
||
// StrCpy(szWord, p1, p2);
|
||
// sList.Append(tstrnew(szWord));
|
||
// p1 = p2 + 1;
|
||
// }
|
||
// StrCpy(szWord, p1, p2);
|
||
//
|
||
// sList.Append(tstrnew(szWord));
|
||
// m_grid.SetRowNum(sList.Length());
|
||
// for (long i=0; i<sList.Length(); i++)
|
||
// m_grid[i][0].SetText(sList[i]);
|
||
|
||
g_bHatch = pElev->IsFilled(); // 符号样式
|
||
g_bDote = pElev->IsDote(); // sg add 090212,圆点样式
|
||
g_bHollow = pElev->IsHollowTriangle(); // sg add 120608,是否是三角形空心标高符号
|
||
g_bHasBase = pElev->HasBaseLine();
|
||
g_bHasLeader = pElev->HasLeader();
|
||
g_bElevCross = pElev->IsCross();
|
||
// if (g_bHatch || g_bDote || g_bHasBase || g_bHasLeader)
|
||
if (g_bHatch || g_bDote || g_bHollow || g_bHasBase || g_bHasLeader || g_bElevCross) // sg add 090226,普通样式
|
||
g_bCommonElev = FALSE;
|
||
else
|
||
g_bCommonElev = TRUE;
|
||
|
||
// m_ComBox.SetCurSel(1); // sg delete 090312
|
||
g_iPrecision = pElev->IsPrec2()?0:1; // 当前精度
|
||
g_bElevSideText = pElev->IsAtLineSide(); // 文字是否齐线端
|
||
|
||
// if (g_bHatch || g_bDote) // 文字是否居中
|
||
if (g_bHatch && g_nElevType==0) // 修改后,只有建筑标高才用该数据,文字是否居中
|
||
g_bElevMidText = pElev->IsUpDownTextElev();
|
||
else if (g_nElevType==1 && g_bCommonElev) // 总图,普通标高,对齐方式
|
||
g_nElevTextAlign = (pElev->IsUpDownTextElev())?0:1;
|
||
|
||
// sg add 120608,从对象中获得总图标高默认文字位置,不包含普通标高样式
|
||
if (g_bHatch || g_bDote || g_bElevCross)
|
||
{
|
||
if ((g_bHatch || g_bElevCross)&& pElev->IsNewSitePlanElev())
|
||
m_csTextLoc = _T("右上");
|
||
else if (pElev->IsUpDownTextElev())
|
||
m_csTextLoc = _T("上部");
|
||
else
|
||
m_csTextLoc = _T("右侧");
|
||
}
|
||
else if (g_bHollow)
|
||
m_csTextLoc = _T("上部");
|
||
else
|
||
m_csTextLoc = g_csTextLoc;
|
||
g_csTextLoc = m_csTextLoc;
|
||
|
||
InitGridAndTextFromEnt(); // 添写表格、编辑框内容
|
||
|
||
g_bOrder = FALSE; // 是否对齐标注
|
||
g_bHightWrite = TRUE; // 是否手工输入
|
||
g_bStandard = pElev->IsStandard(); // 是否规范样式
|
||
g_bParentheses = pElev->IsParentheses(); // 是否加括号
|
||
|
||
double dTextHeight = pElev->GetTextHeight(); // sg add 090209,字高
|
||
m_csTextHeight.Format(_T("%.1f"), dTextHeight);
|
||
|
||
AcDbObjectId idTextStyle = pElev->GetTextStyleId(); // sg add 090209,文字样式
|
||
OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
|
||
ASSERT(pStyle);
|
||
const TCHAR* pName = NULL;
|
||
if (pStyle->getName(pName) == Acad::eOk && pName != NULL)
|
||
m_csFontStyle = pName;
|
||
else
|
||
AfxMessageBox(_T("文字风格已删除!"));
|
||
OPENOBJ_END();
|
||
}
|
||
|
||
CElevDlg::CElevDlg(CWnd *pParent)
|
||
: CModelessDialog(IDD_ELEV, pParent)
|
||
{
|
||
// sg delete 090222,表格的设置,放到SetArchElevGrid函数中
|
||
// m_grid.SetColFixLength();
|
||
// m_grid.SetColNum(1);
|
||
// m_grid.SetColSel(false);
|
||
// m_grid.SetRowNum(1);
|
||
|
||
m_bDlgType = TRUE; // 绘制对话框为TRUE
|
||
SetArchElevGrid(); // 设置表格行数、表头
|
||
|
||
m_grid.Clear(); // sg add 090313,读取表格内容记忆值
|
||
m_grid.AppendRow();
|
||
|
||
CString csTexts = g_szGridText.cs();
|
||
// sg add 090505,根据表格内容,重新修正,初次显示对话框时,是否手工输入
|
||
BOOL bHandWrite = g_bHightWrite;
|
||
while (!csTexts.IsEmpty())
|
||
{
|
||
// sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$”
|
||
// int nResult = csTexts.Find(_T("/")),
|
||
int nResult = csTexts.Find(_T("$")),
|
||
nLength = csTexts.GetLength();
|
||
nResult = (nResult<0)?nLength:nResult;
|
||
|
||
CString csCell0 = csTexts.Left(nResult),
|
||
csCell1 = _T("");
|
||
int nNext = nLength - nResult - 1;
|
||
if (nNext > 0)
|
||
csTexts = csTexts.Right(nNext);
|
||
else
|
||
csTexts = _T("");
|
||
|
||
int nRet = csCell0.Find(_T("&"));
|
||
if (nRet > 0) // 解析表格第二行
|
||
{
|
||
csCell1 = csCell0.Right(csCell0.GetLength() - nRet - 1);
|
||
csCell0 = csCell0.Left(nRet);
|
||
bHandWrite = TRUE; // sg add 090505,有楼号,手工输入
|
||
}
|
||
|
||
long lRowNum = m_grid.GetRowNum() - 1;
|
||
m_grid[lRowNum][0].SetText(csCell0);
|
||
m_grid[lRowNum][1].SetText(csCell1);
|
||
if (!csTexts.IsEmpty())
|
||
{
|
||
m_grid.AppendRow(); // 增加一行,再输入文字
|
||
bHandWrite = TRUE; // sg add 090505,多层,手工输入
|
||
}
|
||
}
|
||
m_grid.FitLastCol();
|
||
|
||
if (fabs(g_dTextHeight) < 1.0E-3) // sg add 090209,字高
|
||
g_dTextHeight = 3.5;
|
||
m_csTextHeight.Format(_T("%.1f"), g_dTextHeight);
|
||
m_csFontStyle = g_csFontStyle; // sg add 090216,文字样式
|
||
g_bHightWrite = bHandWrite; // sg add 090505
|
||
m_csTextLoc = g_csTextLoc; // sg add 120608,总图标高文字位置
|
||
m_bSitePlanDlg = FALSE; // jsx add 160520,总图标高对话框
|
||
}
|
||
|
||
CElevDlg::~CElevDlg()
|
||
{
|
||
if (m_pElev != NULL)
|
||
{
|
||
m_pElev = NULL;
|
||
}
|
||
g_pElevDlg = NULL;
|
||
}
|
||
|
||
void CElevDlg::DoDataExchange(CDataExchange*pDX)
|
||
{
|
||
//{{AFX_DATA_MAP(CElevDlg)
|
||
// DDX_Check(pDX,IDC_HATCH,g_bHatch);
|
||
// DDX_Check(pDX,IDC_BASE_LINE,g_bHasBase);
|
||
// DDX_Check(pDX,IDC_LERDER,g_bHasLeader);
|
||
DDX_Control(pDX, IDC_BUTTON1, m_ButHatch);
|
||
DDX_Control(pDX, IDC_BUTTON2, m_ButBaseLine);
|
||
DDX_Control(pDX, IDC_BUTTON3, m_ButLeadLine);
|
||
DDX_Control(pDX, IDC_BUTTON4, m_ButContinue);
|
||
DDX_Control(pDX, IDC_BUTTON5, m_ButOrder);
|
||
DDX_Control(pDX, IDC_COMBO1, m_ComBox);
|
||
DDX_Control(pDX, IDC_CHECKWRITER, m_Rider);
|
||
DDX_Control(pDX, IDC_BUTTON6, m_ButDote);
|
||
DDX_Control(pDX, IDC_BUTTON_HOLLOW, m_ButHollow);
|
||
DDX_Control(pDX, IDC_BUTTON_ELEV_CROSS, m_ButCross);//十字标高
|
||
DDX_Control(pDX, IDC_COMBO_HEIGHT, m_cmbTextHeight);
|
||
DDX_CBString(pDX, IDC_COMBO_HEIGHT, m_csTextHeight);
|
||
if (pDX->m_bSaveAndValidate && _tstof(m_csTextHeight)<1.0E-3)
|
||
pDX->Fail();
|
||
DDX_Control(pDX, IDC_COMBO_FONGSTYLE, m_cmbStyleName);
|
||
if (pDX->m_bSaveAndValidate)
|
||
DDX_CBString(pDX, IDC_COMBO_FONGSTYLE, m_csFontStyle);
|
||
DDX_Control(pDX, IDC_COMBO_SITEPLAN_TEXTLOC, m_cmbTextLoc);
|
||
if (pDX->m_bSaveAndValidate)
|
||
DDX_CBString(pDX, IDC_COMBO_SITEPLAN_TEXTLOC, m_csTextLoc);
|
||
DDX_Check(pDX, IDC_CHECK_STANDARD, g_bStandard);
|
||
DDX_Check(pDX, IDC_CHECK_PARENTHESES, g_bParentheses);
|
||
DDX_Check(pDX, IDC_CHECK_RIGHTTEXT, g_bElevSideText);
|
||
DDX_Text(pDX, IDC_EDIT_CONVERSION, g_csElevConversion);
|
||
DDX_Check(pDX, IDC_CHECK_DIMZERO, g_bUseConversion);
|
||
DDX_Radio(pDX, IDC_RADIO_UPDOWN, g_nElevTextAlign);
|
||
DDX_Control(pDX, IDC_TAB_ELEVTYPE, m_Tab);
|
||
DDX_Control(pDX, IDC_BUTTON7, m_ButCommon);
|
||
DDX_Text(pDX, IDC_EDIT_ABSOLUTEELEV, g_csAbsoluteElev);
|
||
DDX_Text(pDX, IDC_EDIT_RELATIVEELEV, g_csRelativeElev);
|
||
DDX_Check(pDX, IDC_CHECK_UPTEXT, g_bElevMidText);
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
BOOL CElevDlg::OnInitDialog()
|
||
{
|
||
BOOL bRes = CModelessDialog::OnInitDialog();
|
||
|
||
// 1、文字字高、样式设置
|
||
LoadTextStyle(); // sg add 090209,加载文字样式
|
||
|
||
// sg add 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用上华固定的文字样式
|
||
int nRet = m_cmbStyleName.FindStringExact(0, m_csFontStyle);
|
||
if (nRet < 0) // 当前图纸没有此样式
|
||
{
|
||
nRet = m_cmbStyleName.FindStringExact(0, _T("_TCH_DIM"));
|
||
}
|
||
m_cmbStyleName.SetCurSel(nRet);
|
||
|
||
nRet = m_cmbTextHeight.FindStringExact(0, m_csTextHeight);
|
||
if (nRet > 0) // 根据文字样式,调整字高
|
||
m_cmbTextHeight.SetCurSel(nRet);
|
||
else
|
||
{
|
||
CString sTemp(m_csTextHeight);
|
||
LPTSTR p = sTemp.GetBuffer(100);
|
||
g_dTextHeight = _tstof(p);
|
||
sTemp.ReleaseBuffer();
|
||
m_csTextHeight.Format(_T("%.1f"), g_dTextHeight);
|
||
}
|
||
|
||
// 2、根据对话框类型,设置控件显示状态,add by ZKM
|
||
CWnd *pWnd = NULL;
|
||
if (m_bDlgType) // 绘制对话框
|
||
{
|
||
pWnd = GetDlgItem(IDOK); // OK
|
||
if (pWnd)
|
||
pWnd->ShowWindow(SW_HIDE);
|
||
pWnd = GetDlgItem(IDCANCEL); // CANCEL
|
||
if (pWnd)
|
||
pWnd->ShowWindow(SW_HIDE);
|
||
|
||
CRect rOk; // sg add 090311,处理模式、非模式对话框时,对话框大小变化
|
||
GetDlgItem(IDOK)->GetWindowRect(rOk);
|
||
CRect rect;
|
||
GetWindowRect(rect);
|
||
rect.bottom -= rOk.Height();
|
||
rect.bottom -= 5;
|
||
MoveWindow(rect);
|
||
}
|
||
else // 对象编辑对话框
|
||
{
|
||
pWnd = GetDlgItem(IDC_CHECKWRITER); // 手工输入
|
||
if (pWnd)
|
||
pWnd->ShowWindow(SW_HIDE);
|
||
pWnd = GetDlgItem(IDC_BUTTON5); // 自动对齐
|
||
if (pWnd)
|
||
pWnd->ShowWindow(SW_HIDE);
|
||
// sg delete 090222,按钮的文字解释在8.0中被去掉,并且设置一定是连续标注
|
||
// pWnd = GetDlgItem(IDC_BUTTON4); // 连续标注
|
||
// if (pWnd)
|
||
// pWnd->ShowWindow(SW_HIDE);
|
||
// pWnd = GetDlgItem(IDC_STATICCON);
|
||
// if (pWnd)
|
||
// pWnd->ShowWindow(SW_HIDE);
|
||
// pWnd = GetDlgItem(IDC_STATICORD);
|
||
// if (pWnd)
|
||
// pWnd->ShowWindow(SW_HIDE);
|
||
|
||
// sg delete 090216,绘制、编辑对话框中的表格大小不变
|
||
// pWnd = GetDlgItem(IDC_GRID);
|
||
// if (pWnd)
|
||
// {
|
||
// CRect rect;
|
||
// pWnd->GetWindowRect(rect);
|
||
// rect.bottom += 15;
|
||
// ScreenToClient(rect);
|
||
// pWnd->MoveWindow(rect);
|
||
// }
|
||
}
|
||
pWnd = GetDlgItem(IDC_HATCH); // 注:以下ID未使用
|
||
if (pWnd)
|
||
pWnd->ShowWindow(SW_HIDE);
|
||
pWnd = GetDlgItem(IDC_BASE_LINE);
|
||
if (pWnd)
|
||
pWnd->ShowWindow(SW_HIDE);
|
||
pWnd = GetDlgItem(IDC_LERDER);
|
||
if (pWnd)
|
||
pWnd->ShowWindow(SW_HIDE);
|
||
|
||
InitData(); // 设置按钮图片、精确度
|
||
|
||
// 3、设置内部数据默认值
|
||
g_nLeaderLen = 7.0;
|
||
g_nBaseLen = 7.0;
|
||
m_bUpdateText = FALSE;
|
||
m_bHatchTou = FALSE;
|
||
m_bOrderTou = FALSE;
|
||
|
||
// 4、设置表格
|
||
if (m_bDlgType)
|
||
SetGridEnableWrite(FALSE);
|
||
// modified by whl on 090309
|
||
// m_grid.Create(this, IDC_GRID, WS_VISIBLE|WS_TABSTOP|WS_CHILD|WS_BORDER);
|
||
m_grid.Create(this, IDC_GRID);
|
||
m_grid.FitLastCol();
|
||
if (!m_bDlgType) // 对象编辑对话框
|
||
m_grid.AutoEditCell(&m_grid.GetCell(0, 0));
|
||
// m_Rider.SetCheck(g_bHightWrite); // sg modify 090222
|
||
// if (m_bDlgType) // 绘制对话框
|
||
// SetGridEnableWrite(g_bHightWrite);
|
||
SetGridEnableWrite(g_bHightWrite);
|
||
if (m_bDlgType) // 绘制对话框
|
||
m_Rider.SetCheck(g_bHightWrite);
|
||
|
||
// 5、设置属性页
|
||
TC_ITEM *pTCItem = new TC_ITEM; // sg add 090220,增加总图属性页
|
||
pTCItem->mask = TCIF_TEXT;
|
||
pTCItem->pszText = (LPTSTR)_T("建筑");
|
||
m_Tab.InsertItem(0, pTCItem);
|
||
pTCItem->pszText = (LPTSTR)_T("总图");
|
||
m_Tab.InsertItem(1, pTCItem);
|
||
if (IsSitePlanDlg())
|
||
g_nElevType = 1;
|
||
m_Tab.SetCurSel(g_nElevType);
|
||
SetTabCurPage1(); // 根据标高类型,设置各个控件的显示
|
||
SetTabCurPage2(); // 设置强制规定
|
||
SetTextLocationByStyle(); // 6、设置显示哪种文字与符号的位置关系设置方式
|
||
|
||
bool bTest = m_bSitePlanDlg;
|
||
if (TRUE == IsSitePlanDlg())
|
||
{
|
||
//标题改一下
|
||
SetWindowText(_T("总图标高"));
|
||
m_Tab.DeleteItem(0);
|
||
}
|
||
return bRes;
|
||
}
|
||
|
||
void CElevDlg::LoadTextStyle() // sg add 090209,加载文字样式
|
||
{
|
||
XSymbolList lstStyle(_T("STYLE"));
|
||
for (int m=0; m < lstStyle.Length(); m++)
|
||
m_cmbStyleName.AddString(lstStyle[m]);
|
||
|
||
// sg add 090216,标高标注的默认文字样式应该为_TCH_DIM
|
||
int nRet = m_cmbStyleName.FindStringExact(0, _T("_TCH_DIM"));
|
||
if (nRet < 0)
|
||
m_cmbStyleName.AddString(_T("_TCH_DIM"));
|
||
}
|
||
|
||
void CElevDlg::InitData() // add by zkm
|
||
{
|
||
// 设置按钮上的图片
|
||
m_ButHatch.SetIcon(AfxGetApp()->LoadIcon(IDI_HATCH));
|
||
m_ButDote.SetIcon(AfxGetApp()->LoadIcon(IDI_DOTE)); // sg add 090209,圆点样式
|
||
m_ButCommon.SetIcon(AfxGetApp()->LoadIcon(IDI_COMMONELEV)); // sg add 090226,普通样式
|
||
m_ButHollow.SetIcon(AfxGetApp()->LoadIcon(IDI_HOLLOW)); // sg add 120608,空心三角形地坪标高
|
||
m_ButCross.SetIcon(AfxGetApp()->LoadIcon(IDI_ELEVCROSS)); // jsx add 160513,十字标高
|
||
|
||
m_ButBaseLine.SetIcon(AfxGetApp()->LoadIcon(IDI_BASELINE));
|
||
m_ButLeadLine.SetIcon(AfxGetApp()->LoadIcon(IDI_LEADLINE));
|
||
m_ButOrder.SetIcon(AfxGetApp()->LoadIcon(IDI_ORDER));
|
||
// sg delete 090301,连续标注已被隐藏,8.0起一定是连续标注的
|
||
// m_ButContinue.SetIcon(AfxGetApp()->LoadIcon(IDI_CONTINUE));
|
||
|
||
// sg add 090226,增加符号的文字解释
|
||
AddTip(IDC_BUTTON1, _T("三角形室外地坪标高"));
|
||
AddTip(IDC_BUTTON6, _T("圆点室外地坪标高"));
|
||
AddTip(IDC_BUTTON7, _T("普通标高"));
|
||
AddTip(IDC_BUTTON_HOLLOW, _T("三角形空心室内标高"));
|
||
AddTip(IDC_BUTTON2, _T("带基线"));
|
||
AddTip(IDC_BUTTON3, _T("带引线"));
|
||
AddTip(IDC_BUTTON5, _T("自动对齐"));
|
||
// sg add 090403,给新增按钮“多标高”增加文字解释
|
||
AddTip(IDC_BUTTON_ADDMUTIELEV, _T("多层楼层标高编辑"));
|
||
AddTip(IDC_BUTTON_ELEV_CROSS, _T("十字标高"));
|
||
|
||
|
||
// if (g_bContinue) // sg delete 090227,强制连续标注
|
||
// m_ButContinue.SetCheck(1);
|
||
// else
|
||
// m_ButContinue.SetCheck(0);
|
||
if (g_bOrder)
|
||
m_ButOrder.SetCheck(1);
|
||
else
|
||
m_ButOrder.SetCheck(0);
|
||
if (g_bHasBase)
|
||
m_ButBaseLine.SetCheck(1);
|
||
else
|
||
m_ButBaseLine.SetCheck(0);
|
||
if (g_bHasLeader)
|
||
m_ButLeadLine.SetCheck(1);
|
||
else
|
||
m_ButLeadLine.SetCheck(0);
|
||
if (g_bHatch)
|
||
m_ButHatch.SetCheck(1);
|
||
else
|
||
m_ButHatch.SetCheck(0);
|
||
if (g_bDote) // sg add 090209,圆点样式
|
||
m_ButDote.SetCheck(1);
|
||
else
|
||
m_ButDote.SetCheck(0);
|
||
if (g_bHollow) // sg add 120608,空心三角形地坪标高
|
||
m_ButHollow.SetCheck(1);
|
||
else
|
||
m_ButHollow.SetCheck(0);
|
||
if (g_bElevCross)//十字标高
|
||
m_ButCross.SetCheck(1);
|
||
else
|
||
m_ButCross.SetCheck(0);
|
||
if (g_bCommonElev) // sg add 090226,普通样式
|
||
m_ButCommon.SetCheck(1);
|
||
else
|
||
m_ButCommon.SetCheck(0);
|
||
|
||
m_ComBox.AddString(_T("0.00")); // 设置精确度列表
|
||
m_ComBox.AddString(_T("0.000"));
|
||
m_ComBox.SetCurSel(g_iPrecision);
|
||
if (!m_bDlgType) // 对象编辑对话框
|
||
{
|
||
if (m_pElev->IsPrec2())
|
||
{
|
||
m_ComBox.SetCurSel(0);
|
||
g_iPrecision = 0;
|
||
}
|
||
else
|
||
{
|
||
m_ComBox.SetCurSel(1);
|
||
g_iPrecision = 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
void CElevDlg::SetArchElevGrid() // sg add 090222,设置表格行数、表头
|
||
{
|
||
m_grid.Clear();
|
||
m_grid.SetRowNum(1);
|
||
m_grid.SetColFixLength();
|
||
m_grid.FitLastCol();
|
||
|
||
m_grid.AppendCol(_T("楼层标高"), 80);
|
||
m_grid.AppendCol(_T("楼层号/标高说明"),100);
|
||
}
|
||
|
||
void CElevDlg::SetTabCurPage1() // 设置当前选择页面控件显示情况,sg add 090222
|
||
{
|
||
int nShow1 = SW_HIDE, // 总图标高
|
||
nShow2 = SW_SHOW;
|
||
if (g_nElevType == 0) // 建筑标高
|
||
{
|
||
nShow1 = SW_SHOW;
|
||
nShow2 = SW_HIDE;
|
||
}
|
||
|
||
GetDlgItem(IDC_GRID)->ShowWindow(nShow1); // 建筑
|
||
GetDlgItem(IDC_CHECK_STANDARD)->ShowWindow(nShow1);
|
||
GetDlgItem(IDC_CHECK_PARENTHESES)->ShowWindow(nShow1);
|
||
GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->ShowWindow(nShow1); // sg add 090401
|
||
if (m_bDlgType) // sg add 090320,对象编辑对话框中,这两项总不显示
|
||
{
|
||
GetDlgItem(IDC_CHECKWRITER)->ShowWindow(nShow1);
|
||
GetDlgItem(IDC_BUTTON5)->ShowWindow(nShow1);
|
||
}
|
||
GetDlgItem(IDC_BUTTON2)->ShowWindow(nShow1); // 带基线
|
||
GetDlgItem(IDC_BUTTON3)->ShowWindow(nShow1); // 带引线
|
||
|
||
GetDlgItem(IDC_STATIC_ABSOLUTE)->ShowWindow(nShow2); // 总图
|
||
GetDlgItem(IDC_STATIC_RELATIVE)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_STATIC_CONVERSIONSHIP)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_EDIT_ABSOLUTEELEV)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_STATIC_EQUAL)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_EDIT_RELATIVEELEV)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_STATIC_PLUS)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_EDIT_CONVERSION)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_CHECK_DIMZERO)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_STATIC_ALIGNSHIP)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_RADIO_UPDOWN)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_RADIO_LEFTRIGHT)->ShowWindow(nShow2);
|
||
GetDlgItem(IDC_BUTTON_HOLLOW)->ShowWindow(nShow2); // 空心三角形地坪标高
|
||
GetDlgItem(IDC_BUTTON_ELEV_CROSS)->ShowWindow(nShow2); //十字标高
|
||
|
||
if (g_nElevType == 0) // 建筑,表格置顶
|
||
GetDlgItem(IDC_GRID)->BringWindowToTop();
|
||
else // 总图,根据是否自动换算,控制部分控件是否显示
|
||
SetShowByUseConversion();
|
||
}
|
||
|
||
// 强制对建筑、总图标高进行的默认规定,只作为切换页面的默认设置,可修改
|
||
void CElevDlg::SetTabCurPage2()
|
||
{
|
||
if (g_nElevType == 0) // 建筑标高
|
||
{
|
||
// sg add 090212,规范方式——>添加括号
|
||
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard);
|
||
|
||
GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
|
||
//GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); // 带基线
|
||
//GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE); // 带引线
|
||
if (m_bDlgType) // sg add 090320,对象编辑对话框中,这项总不显示
|
||
GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE); // 自动对齐
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE); // “文字齐线端”可改
|
||
if (g_bDote || g_bElevCross)
|
||
{
|
||
g_bDote = FALSE;
|
||
g_bElevCross = FALSE;
|
||
m_ButDote.SetCheck(0);
|
||
m_ButCross.SetCheck(0);
|
||
g_bCommonElev = TRUE; // 不支持圆点样式,切换到普通样式
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
|
||
if (g_bHollow)
|
||
{
|
||
g_bHollow = FALSE;
|
||
m_ButHollow.SetCheck(0);
|
||
g_bCommonElev = TRUE; // 不支持空心三角形地坪标高,切换到普通样式
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
|
||
if (g_bCommonElev || g_bHasBase || g_bHasLeader) // 建筑标高,必定左右排列
|
||
g_nElevTextAlign = 1;
|
||
SetGridEnableWrite(g_bHightWrite); // 表格是否可写
|
||
}
|
||
else // 总图标高
|
||
{
|
||
g_bOrder = FALSE;
|
||
if (m_bDlgType)
|
||
m_ButOrder.SetCheck(g_bOrder); // 不支持“自动对齐”
|
||
GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
|
||
|
||
if (g_nElevTextAlign == 0) // 上下排列时,“文字齐线端”不可改
|
||
{
|
||
g_bElevSideText = TRUE; // 总图,文字一般齐线端
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE);
|
||
}
|
||
else // “文字齐线端”可改
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE);
|
||
|
||
GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE); // 圆点样式
|
||
//GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
|
||
//GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
|
||
if (g_bHasLeader || g_bHasBase)
|
||
{
|
||
g_bHasLeader = FALSE;
|
||
g_bHasBase = FALSE;
|
||
m_ButLeadLine.SetCheck(0);
|
||
m_ButBaseLine.SetCheck(0);
|
||
g_bCommonElev = TRUE; // 不支持带基线、引线,切换到普通样式
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
if (g_bElevCross)
|
||
{
|
||
m_ButCross.SetCheck(1);
|
||
}
|
||
}
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
// sg add 090311,根据是否自动换算,设置各控件是否显示
|
||
void CElevDlg::SetShowByUseConversion()
|
||
{
|
||
int nShow = g_bUseConversion?SW_SHOW:SW_HIDE;
|
||
GetDlgItem(IDC_STATIC_EQUAL)->ShowWindow(nShow); // =
|
||
GetDlgItem(IDC_STATIC_PLUS)->ShowWindow(nShow); // +
|
||
GetDlgItem(IDC_EDIT_CONVERSION)->ShowWindow(nShow); // 换算值
|
||
GetDlgItem(IDC_STATIC_CONVERSIONSHIP)->ShowWindow(nShow); // 换算关系
|
||
}
|
||
|
||
// sg add 090311,根据标高样式,设置部分控件是否显示、是否可编辑
|
||
void CElevDlg::SetTextLocationByStyle()
|
||
{
|
||
// if (g_bHatch || g_bDote) // 地坪标高
|
||
if (g_nElevType==0 && g_bHatch) // 建筑填充三角形标高
|
||
{
|
||
GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_SHOW); // 文字居中
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(FALSE);
|
||
}
|
||
else if ((g_nElevType==1) && (g_bHatch || g_bDote || g_bHollow ||g_bElevCross)) // 总图的地坪标高
|
||
{
|
||
GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_SHOW); // 文字位置
|
||
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_SHOW);// 文字位置
|
||
GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(FALSE);
|
||
|
||
m_cmbTextLoc.ResetContent();
|
||
if (g_bHatch) // 填充三角形
|
||
{
|
||
m_cmbTextLoc.AddString(_T("上部"));
|
||
m_cmbTextLoc.AddString(_T("右侧"));
|
||
m_cmbTextLoc.AddString(_T("右上"));
|
||
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE);
|
||
}
|
||
else if (g_bDote) // 圆点
|
||
{
|
||
m_cmbTextLoc.AddString(_T("上部"));
|
||
m_cmbTextLoc.AddString(_T("右侧"));
|
||
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE);
|
||
}
|
||
else if (g_bElevCross) // 十字
|
||
{
|
||
m_cmbTextLoc.AddString(_T("上部"));
|
||
m_cmbTextLoc.AddString(_T("右侧"));
|
||
m_cmbTextLoc.AddString(_T("右上"));
|
||
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE);
|
||
}
|
||
else // 空心三角形
|
||
{
|
||
m_cmbTextLoc.AddString(_T("上部"));
|
||
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(FALSE);
|
||
}
|
||
|
||
int nRet = m_cmbTextLoc.FindStringExact(0, m_csTextLoc);
|
||
if (nRet < 0)
|
||
{
|
||
nRet = 0;
|
||
m_csTextLoc = _T("上部");
|
||
g_csTextLoc = m_csTextLoc;
|
||
}
|
||
m_cmbTextLoc.SetCurSel(nRet);
|
||
}
|
||
else // 普通样式
|
||
{
|
||
GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_SHOW); // 文字齐线端
|
||
GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(TRUE); // 上下排列
|
||
GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(TRUE); // 左右排列
|
||
}
|
||
}
|
||
|
||
void CElevDlg::SetGridEnableWrite(BOOL bWrite)
|
||
{
|
||
// sg add 090505,处理多标高相关控件是否可编辑
|
||
if (m_bDlgType) // 绘制对话框
|
||
{
|
||
GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->EnableWindow(bWrite); // 多标高
|
||
GetDlgItem(IDC_CHECK_STANDARD)->EnableWindow(bWrite); // 标高是否加括号
|
||
if (bWrite)
|
||
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard); // 楼号是否加括号
|
||
else
|
||
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(bWrite);
|
||
}
|
||
else // 对象编辑对话框
|
||
{
|
||
GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->EnableWindow(TRUE); // 多标高
|
||
GetDlgItem(IDC_CHECK_STANDARD)->EnableWindow(TRUE); // 标高是否加括号
|
||
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard); // 楼号是否加括号
|
||
}
|
||
|
||
m_grid.SetReadOnly(!bWrite);
|
||
if (bWrite)
|
||
{
|
||
m_grid.GetCol(0).SetBackColor(RGB(255,255,255));
|
||
m_grid.GetCol(1).SetBackColor(RGB(255,255,255)); // sg add 090212
|
||
}
|
||
else
|
||
{
|
||
m_grid.GetCol(0).SetBackColor(GetSysColor(COLOR_3DFACE));
|
||
m_grid.GetCol(1).SetBackColor(GetSysColor(COLOR_3DFACE)); // sg add 090212
|
||
}
|
||
// sg modify 090331,解决无模式对话框下,表格无法完全刷新的问题,丢失左侧向下箭头的问题
|
||
// m_grid.Invalidate();
|
||
m_grid.RecalcLayout();
|
||
}
|
||
|
||
// sg add 090222,根据对象,填充表格内容
|
||
void CElevDlg::InitGridAndTextFromEnt()
|
||
{
|
||
CString csTexts1 = m_pElev->GetText(), // 基线上方文字
|
||
csTexts2 = m_pElev->GetLowText(); // 基线下方文字
|
||
|
||
XStringList lstCol1, // 第一列:标高、绝对标高
|
||
lstCol2; // 第二列:楼层号、相对标高
|
||
while (!csTexts1.IsEmpty())
|
||
{
|
||
// sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$”
|
||
// int nResult = csTexts1.Find(_T('/')),
|
||
int nResult = csTexts1.Find(_T('$')),
|
||
nLength = csTexts1.GetLength();
|
||
nResult = (nResult<0) ? nLength : nResult;
|
||
|
||
CString csRow = csTexts1.Left(nResult); // 获取表格中一行的文字
|
||
int nNext = nLength - nResult - 1;
|
||
if (nNext > 0)
|
||
csTexts1 = csTexts1.Right(nNext);
|
||
else
|
||
csTexts1 = _T("");
|
||
|
||
int nRet = csRow.Find(_T('&'), 0);
|
||
if (nRet > 0) // 含有楼层号/相对标高
|
||
{
|
||
CString csFloor = csRow.Right(csRow.GetLength() - nRet-1);
|
||
csRow = csRow.Left(nRet);
|
||
lstCol2.Append(tstrnew(csFloor)); // 存入lstCol2
|
||
}
|
||
else // 没有楼层号/相对标高
|
||
lstCol2.Append(tstrnew(_T(""))); // 存入空信息,保证两列数量、内容对应
|
||
lstCol1.Append(tstrnew(csRow)); // 楼层标高/绝对标高
|
||
}
|
||
|
||
int nLen1 = lstCol1.Length(),
|
||
nLen2 = lstCol2.Length();
|
||
if (nLen1 == 0) // 没有标注任何内容,表格中,至少会有一行内容
|
||
{
|
||
lstCol1.Append(tstrnew(_T("")));
|
||
lstCol2.Append(tstrnew(_T("")));
|
||
nLen1++;
|
||
nLen2++;
|
||
}
|
||
|
||
if (g_nElevType == 0) // 建筑,填充表格
|
||
{
|
||
m_grid.SetRowNum(nLen1);
|
||
for (long i=0; i<nLen1; i++)
|
||
m_grid[i][0].SetText(lstCol1[i]); // 楼层标高
|
||
for (i=0; i<nLen2; i++)
|
||
m_grid[i][1].SetText(lstCol2[i]); // 楼层号/标高说明
|
||
}
|
||
else // 总图,只取第一行,填充编辑框
|
||
{
|
||
g_csAbsoluteElev = lstCol1[0]; // 绝对标高
|
||
g_csRelativeElev = lstCol2[0]; // 相对标高
|
||
if (g_nElevTextAlign==0 && g_bCommonElev) // 总图标高,上下排列
|
||
{
|
||
g_csRelativeElev = csTexts2;
|
||
}
|
||
}
|
||
}
|
||
|
||
void CElevDlg::OnActivate(UINT nState, CWnd*pWndOther, BOOL bMinimized)
|
||
{
|
||
if (nState==WA_INACTIVE && m_bUpdateText)
|
||
{
|
||
m_grid.EndEditCell(); // 强制更新grid
|
||
UpdateEntText();
|
||
}
|
||
}
|
||
|
||
void CElevDlg::UpdataEnt() // 更新对象中,除文字内容以外的属性
|
||
{
|
||
double dSize = DocGetEleTriangleSize();
|
||
// if (g_bHatch) // 填充样式
|
||
if (g_bHatch || g_bHollow) // sg modify 120608,填充样式、三角形空心标高符号
|
||
// m_pElev->SetTextBaseLen(3); // sg modify 090212,读取全局设置
|
||
m_pElev->SetTextBaseLen(dSize);
|
||
// else // modified by whl on 060110
|
||
else if (m_bModeless)
|
||
m_pElev->SetTextBaseLen(m_pElev->GetDefaultTextBaseLen());
|
||
else // sg add 090320,对象编辑时,只在默认基线≤dSize时,做处理
|
||
{
|
||
double dTextBaseLen = m_pElev->GetTextBaseLen();
|
||
if (dTextBaseLen < dSize + 1.0E-5)
|
||
{
|
||
dTextBaseLen = m_pElev->GetDefaultTextBaseLen();
|
||
m_pElev->SetTextBaseLen(dTextBaseLen);
|
||
}
|
||
}
|
||
|
||
m_pElev->SetFilled(g_bHatch);
|
||
m_pElev->SetDote(g_bDote); // sg add 090209,圆点样式
|
||
m_pElev->SetHollowTriangle(g_bHollow); // // sg add 120608,三角形空心标高符号
|
||
m_pElev->SetBaseLine(g_bHasBase);
|
||
m_pElev->SetLeader(g_bHasLeader);
|
||
m_pElev->SetCross(g_bElevCross);
|
||
if (m_bModeless) // modified by whl on 060110
|
||
{
|
||
m_pElev->SetBaseLen(g_nBaseLen);
|
||
m_pElev->SetLeaderLen(g_nLeaderLen);
|
||
}
|
||
|
||
// sg add 090212,字高、文字样式
|
||
AcDbObjectId idTextStyle = GetTextStyleId(m_csFontStyle);
|
||
if (!idTextStyle)
|
||
return;
|
||
m_pElev->SetTextStyleId(idTextStyle);
|
||
m_pElev->SetTextHeight(_tstof(m_csTextHeight));
|
||
|
||
m_pElev->SetStandard(g_bStandard); // sg add 090212,规范样式、添加括号、文字在线端
|
||
m_pElev->SetParentheses(g_bParentheses);
|
||
m_pElev->SetAtLineSide(g_bElevSideText);
|
||
m_pElev->SetArchElev(g_nElevType==0); // sg add 090311,标高类型,是否上下排列
|
||
|
||
// if (g_bHatch || g_bDote)
|
||
if (g_bHatch && g_nElevType==0) // 只有建筑里的填充标高,才用数据g_bElevMidText
|
||
{
|
||
m_pElev->SetUpDownTextElev(g_bElevMidText);
|
||
m_pElev->SetNewSitePlanElev(FALSE);
|
||
}
|
||
else if ((g_nElevType==1) && (g_bHatch || g_bDote || g_bHollow || g_bElevCross))
|
||
{
|
||
m_pElev->SetUpDownTextElev(g_csTextLoc==_T("上部"));
|
||
m_pElev->SetNewSitePlanElev(g_csTextLoc==_T("右上"));
|
||
}
|
||
else
|
||
m_pElev->SetUpDownTextElev(g_nElevTextAlign==0);
|
||
}
|
||
|
||
void CElevDlg::UpdateEntText() // 根据表格、编辑框内内容更新对象
|
||
{
|
||
UpdateData(TRUE);
|
||
m_grid.EndEditCell(); // 强制更新grid
|
||
|
||
TString sRes; // 基线上方文字
|
||
TString sLowText; // 基线下方文字
|
||
if (g_nElevType == 0) // 建筑,从表格里读取
|
||
{
|
||
if (!m_grid.IsEmpty())
|
||
{
|
||
// sg modify 090222,增加楼层号
|
||
// sRes << m_grid[0L][0].GetText();
|
||
// for (long i=1 ; i<m_grid.GetRowNum() ; i++)
|
||
// {
|
||
// TString sLine = m_grid[i][0].GetText();
|
||
// if (!sLine.IsEmpty())
|
||
// sRes << _T("/")<<sLine;
|
||
// }
|
||
|
||
long nRowNum = m_grid.GetRowNum();
|
||
for (long i=0; i<nRowNum; i++)
|
||
{
|
||
TString sCol1 = m_grid[i][0].GetText(),
|
||
sCol2 = m_grid[i][1].GetText();
|
||
//add tyj 20160826:第一列不许有空格
|
||
int iFindSpace = sCol1.Find(_T(" "));
|
||
while(iFindSpace != -1)
|
||
{
|
||
sCol1.Del(iFindSpace);
|
||
iFindSpace = sCol1.Find(_T(" "));
|
||
}
|
||
m_grid[i][0].SetText(sCol1);
|
||
|
||
if (!sCol1.IsEmpty()) // 第一列不允许为空,否则不判断第二列是否有内容
|
||
{
|
||
if (i != 0)
|
||
// sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$”
|
||
// sRes << _T("/");
|
||
sRes << _T("$");
|
||
sRes << sCol1;
|
||
if (!sCol2.IsEmpty())
|
||
sRes << _T("&") << sCol2;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else // 总图,从编辑框内读取
|
||
{
|
||
sRes << g_csAbsoluteElev; // 绝对标高
|
||
if (!g_csRelativeElev.IsEmpty())
|
||
{
|
||
if (g_bCommonElev && g_nElevTextAlign==0) // 普通标高、上下排列
|
||
sLowText << g_csRelativeElev; // 基线下方文字
|
||
else
|
||
sRes << _T("&") << g_csRelativeElev;
|
||
}
|
||
}
|
||
|
||
m_pElev->SetText(sRes); // 基线上方文字
|
||
m_pElev->SetLowText(sLowText); // sg add 090223,基线下方文字
|
||
if (g_iPrecision == 1) // 精确度
|
||
m_pElev->SetPrec2(FALSE);
|
||
else
|
||
m_pElev->SetPrec2(TRUE);
|
||
}
|
||
|
||
// 动态标注时,更新标高,TElevEdJig::update中调用
|
||
void CElevDlg::UpdateGrid(double newValue)
|
||
{
|
||
// if (g_bHightWrite) // sg modify 090312,只对自动建筑标高有效
|
||
if (g_nElevType==1 || g_bHightWrite)
|
||
return;
|
||
|
||
double hight = newValue;
|
||
CString sPrecision, ss;
|
||
switch(g_iPrecision) {
|
||
case 0:
|
||
sPrecision = _T("%.2f");
|
||
m_pElev->SetPrec2(TRUE);
|
||
break;
|
||
case 1:
|
||
sPrecision = _T("%.3f");
|
||
m_pElev->SetPrec2(FALSE);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
ss.Format(sPrecision, hight);
|
||
m_grid[long(0)][0].SetText(ss);
|
||
m_grid[long(0)][0].Refresh(); // 按精确度给表格刷新
|
||
m_grid.FitLastCol();
|
||
|
||
// 内部数据精度更高一些,原误差很大!
|
||
ss.Format(_T("%.5f"), hight);
|
||
m_grid[long(0)][0].SetText(ss); // 内部修改,不刷新到表格中
|
||
acedGetAcadDwgView()->SetFocus();
|
||
m_pElev->SetText(ss);
|
||
}
|
||
|
||
// 保留第一个标高的首行内容,方便进行连续绘制
|
||
void CElevDlg::UpDateGridToStar()
|
||
{
|
||
// TString ss00, ss01;
|
||
// if (!m_grid.IsEmpty()) // sg add 090310,防止表格行被全部删除
|
||
// {
|
||
// ss00 = m_grid[0L][0].GetText();
|
||
// ss01 = m_grid[0L][1].GetText();
|
||
// }
|
||
//
|
||
// m_grid.Clear();
|
||
// m_grid.SetRowNum(1);
|
||
// m_grid[0L][0].SetText(ss00);
|
||
// m_grid[0L][1].SetText(ss01);
|
||
|
||
g_szGridText.Clear(); // sg add 090313,记忆表格内容
|
||
long lRows = m_grid.GetRowNum();
|
||
for (long l=0; l<lRows; l++)
|
||
{
|
||
TString sCol1 = m_grid[l][0].GetText(),
|
||
sCol2 = m_grid[l][1].GetText();
|
||
if (l != 0)
|
||
// sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$”
|
||
// g_szGridText << _T("/");
|
||
g_szGridText << _T("$");
|
||
g_szGridText << sCol1;
|
||
if (sCol2.Length() > 0)
|
||
g_szGridText << _T("&") << sCol2;
|
||
}
|
||
}
|
||
|
||
void CElevDlg::SetEntPoint(TDbSymbElevation * pElev) // 关联对像
|
||
{
|
||
m_pElev = pElev;
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(CElevDlg, CModelessDialog)
|
||
ON_BN_CLICKED(IDC_HATCH, OnCheckHatch)
|
||
ON_BN_CLICKED(IDC_BASE_LINE, OnCheckBaseLine)
|
||
ON_BN_CLICKED(IDC_LERDER, OnCheckLeader)
|
||
ON_BN_CLICKED(IDC_BUTTON1, OnPickHatch)
|
||
ON_BN_CLICKED(IDC_BUTTON2, OnPickBaseLine)
|
||
ON_BN_CLICKED(IDC_BUTTON3, OnPickLeadLine)
|
||
ON_BN_CLICKED(IDC_BUTTON4, OnContinueDim)
|
||
ON_BN_CLICKED(IDC_BUTTON5, OnOrder)
|
||
ON_BN_CLICKED(IDC_CHECKWRITER, OnPickCheckWriter)
|
||
ON_CBN_SELENDCANCEL(IDC_COMBO1, OnPrecision)
|
||
ON_WM_CLOSE()
|
||
ON_WM_DESTROY()
|
||
ON_WM_ACTIVATE()
|
||
ON_BN_CLICKED(IDC_BUTTON6, OnPickDote)
|
||
ON_BN_CLICKED(IDC_BUTTON_TEXTHEIGHT, OnButtonTextHeight)
|
||
ON_CBN_SELCHANGE(IDC_COMBO_HEIGHT, OnSelchangeComboTextHeight)
|
||
ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE, OnSelchangeComboFongstyle)
|
||
ON_BN_CLICKED(IDC_CHECK_STANDARD, OnBnClickedStandard)
|
||
ON_BN_CLICKED(IDC_CHECK_RIGHTTEXT, OnBnClickedSideText)
|
||
ON_BN_CLICKED(IDC_CHECK_PARENTHESES, OnBnClickedParentheses)
|
||
ON_CBN_EDITCHANGE(IDC_COMBO_HEIGHT, OnEditchangeComboTextHeight)
|
||
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_ELEVTYPE, OnSelchangeTabElevType)
|
||
ON_BN_CLICKED(IDC_CHECK_DIMZERO, OnBnClickedUseConversion)
|
||
ON_EN_CHANGE(IDC_EDIT_CONVERSION, OnChangeEditConversion)
|
||
ON_BN_CLICKED(IDC_RADIO_UPDOWN, OnRadioElevAlignType1)
|
||
ON_BN_CLICKED(IDC_BUTTON7, OnPickCommonElev)
|
||
ON_BN_CLICKED(IDC_RADIO_LEFTRIGHT, OnRadioElevAlignType2)
|
||
ON_BN_CLICKED(IDC_CHECK_UPTEXT, OnBnClickedUpText)
|
||
ON_EN_CHANGE(IDC_EDIT_ABSOLUTEELEV, OnChangeEditAbsoluteElev)
|
||
ON_EN_CHANGE(IDC_EDIT_RELATIVEELEV, OnChangeEditRelativeElev)
|
||
ON_BN_CLICKED(IDC_BUTTON_ADDMUTIELEV, OnButtonAddMutiElev)
|
||
ON_BN_CLICKED(IDC_BUTTON_HOLLOW, OnPickHollow)
|
||
ON_BN_CLICKED(IDC_BUTTON_ELEV_CROSS, OnPickCross)
|
||
ON_CBN_SELCHANGE(IDC_COMBO_SITEPLAN_TEXTLOC, OnSelchangeComboTextLoc)
|
||
END_MESSAGE_MAP()
|
||
|
||
void CElevDlg::OnClose()
|
||
{
|
||
if (m_bDlgType)
|
||
{
|
||
CElevDlg::g_pElevDlg = NULL;
|
||
acedPostCommand(_T("\33\33"));
|
||
DestroyWindow();
|
||
}
|
||
else
|
||
CModelessDialog::OnClose();
|
||
}
|
||
|
||
void CElevDlg::OnDestroy()
|
||
{
|
||
if (m_pElev)
|
||
{
|
||
m_pElev = NULL;
|
||
}
|
||
CModelessDialog::OnDestroy();
|
||
}
|
||
|
||
void CElevDlg::OnOK()
|
||
{
|
||
// sg add 090305,对象编辑时,以只读方式打开;更新数据时,升级到写打开
|
||
m_pElev->upgradeOpen();
|
||
// sg add 090507,防止切换到总图标高、上下排列后,文字基线不够长
|
||
double dOld = m_pElev->GetTextBaseLen(TRUE);
|
||
UpdataEnt(); // 更新其他
|
||
UpdateEntText(); // 更新对象文字
|
||
|
||
XString sText = m_pElev->GetLowText(); // sg add 090507
|
||
//if (!m_pElev->IsArchElev() && !m_pElev->IsFilled() &&
|
||
// !m_pElev->IsDote() && m_pElev->IsUpDownTextElev() && !!sText)
|
||
if (!m_pElev->IsArchElev() && !m_pElev->IsFilled() &&
|
||
!m_pElev->IsDote() && !m_pElev->IsHollowTriangle() && m_pElev->IsUpDownTextElev() && !!sText)
|
||
{
|
||
double dNew = m_pElev->GetDefaultTextBaseLen(TRUE);
|
||
if (dNew > dOld + 1.0E-5)
|
||
m_pElev->SetTextBaseLen(dNew, TRUE);
|
||
}
|
||
m_pElev->downgradeOpen(); // sg add 090305
|
||
CDialog::OnOK();
|
||
}
|
||
|
||
void CElevDlg::OnPickCheckWriter() // 手动输入
|
||
{
|
||
UpdateData(TRUE);
|
||
if (m_bHatchTou) // JIG基线、引线,不可以切换手动输入与否的状态
|
||
{
|
||
m_Rider.SetCheck(g_bHightWrite);
|
||
UpdateData(FALSE);
|
||
acedGetAcadDwgView()->SetFocus();
|
||
return;
|
||
}
|
||
|
||
if (m_Rider.GetCheck() == 0)
|
||
{
|
||
CElevDlg::g_pElevDlg->SetGridEnableWrite(FALSE);
|
||
g_bHightWrite = FALSE;
|
||
|
||
TString ss00;
|
||
if (!m_grid.IsEmpty())
|
||
m_grid[long(0)][0].SetText(ss00);
|
||
m_grid.Clear();
|
||
m_grid.SetRowNum(1);
|
||
m_grid[long(0)][0].SetText(ss00);
|
||
}
|
||
else
|
||
{
|
||
CElevDlg::g_pElevDlg->SetGridEnableWrite(TRUE);
|
||
g_bHightWrite = TRUE;
|
||
}
|
||
}
|
||
|
||
void CElevDlg::OnPrecision() // add by zkm,精确度
|
||
{
|
||
g_iPrecision = m_ComBox.GetCurSel();
|
||
}
|
||
|
||
void CElevDlg::OnPickHatch() // 三角形填充样式
|
||
{
|
||
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
|
||
{
|
||
g_bHatch = FALSE;
|
||
m_ButHatch.SetCheck(0);
|
||
}
|
||
else
|
||
{
|
||
g_bHatch = 1 - g_bHatch;
|
||
if (g_bHatch)
|
||
{
|
||
g_bHasBase = FALSE;
|
||
m_ButBaseLine.SetCheck(0);
|
||
g_bHasLeader = FALSE;
|
||
m_ButLeadLine.SetCheck(0);
|
||
g_bDote = FALSE; // sg add 090209,增加圆点样式
|
||
m_ButDote.SetCheck(0);
|
||
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
|
||
m_ButHollow.SetCheck(0);
|
||
g_bCommonElev = FALSE; // sg add 090226,增加普通样式
|
||
m_ButCommon.SetCheck(0);
|
||
|
||
g_bElevCross = FALSE;// 十字标高符号
|
||
m_ButCross.SetCheck(0);
|
||
}
|
||
else // sg add 090301,所有按钮都不点取时,自动选普通样式
|
||
{
|
||
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
|
||
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
|
||
{
|
||
g_bCommonElev = TRUE;
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
}
|
||
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
|
||
UpdateData(FALSE);
|
||
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
|
||
// sg add 120608,三角形空心标高符号
|
||
void CElevDlg::OnPickHollow()
|
||
{
|
||
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
|
||
{
|
||
g_bHollow = FALSE;
|
||
m_ButHollow.SetCheck(0);
|
||
}
|
||
else if (g_nElevType == 0) // 建筑图不支持该样式
|
||
{
|
||
g_bHollow = FALSE;
|
||
m_ButHollow.SetCheck(0);
|
||
}
|
||
else
|
||
{
|
||
g_bHollow = 1 - g_bHollow;
|
||
if (g_bHollow)
|
||
{
|
||
g_bHatch = FALSE;
|
||
m_ButHatch.SetCheck(0);
|
||
g_bHasBase = FALSE;
|
||
m_ButBaseLine.SetCheck(0);
|
||
g_bHasLeader = FALSE;
|
||
m_ButLeadLine.SetCheck(0);
|
||
g_bDote = FALSE;
|
||
m_ButDote.SetCheck(0);
|
||
g_bCommonElev = FALSE;
|
||
m_ButCommon.SetCheck(0);
|
||
g_bElevCross = FALSE;// 十字标高符号
|
||
m_ButCross.SetCheck(0);
|
||
}
|
||
else
|
||
{
|
||
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
|
||
{
|
||
g_bCommonElev = TRUE;
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
}
|
||
SetTextLocationByStyle();
|
||
UpdateData(FALSE);
|
||
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
|
||
//十字标高符号
|
||
void CElevDlg::OnPickCross()
|
||
{
|
||
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
|
||
{
|
||
g_bElevCross = FALSE;
|
||
m_ButCross.SetCheck(0);
|
||
}
|
||
else if (g_nElevType == 0) // 建筑图不支持该样式
|
||
{
|
||
g_bElevCross = FALSE;
|
||
m_ButCross.SetCheck(0);
|
||
}
|
||
else
|
||
{
|
||
g_bElevCross = 1 - g_bElevCross;
|
||
if (g_bElevCross)
|
||
{
|
||
g_bHatch = FALSE;
|
||
m_ButHatch.SetCheck(0);
|
||
g_bHasBase = FALSE;
|
||
m_ButBaseLine.SetCheck(0);
|
||
g_bHasLeader = FALSE;
|
||
m_ButLeadLine.SetCheck(0);
|
||
g_bDote = FALSE;
|
||
m_ButDote.SetCheck(0);
|
||
g_bCommonElev = FALSE;
|
||
m_ButCommon.SetCheck(0);
|
||
g_bHollow = FALSE;
|
||
m_ButHollow.SetCheck(0);
|
||
|
||
}
|
||
else
|
||
{
|
||
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader && !g_bElevCross)
|
||
{
|
||
g_bCommonElev = TRUE;
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
}
|
||
SetTextLocationByStyle();
|
||
UpdateData(FALSE);
|
||
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
|
||
void CElevDlg::OnPickDote() // sg add 090209,圆点样式
|
||
{
|
||
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
|
||
{
|
||
g_bDote = FALSE;
|
||
m_ButDote.SetCheck(0);
|
||
}
|
||
else if (g_nElevType == 0) // 建筑图不支持该样式
|
||
{
|
||
g_bDote = FALSE;
|
||
m_ButDote.SetCheck(0);
|
||
}
|
||
else
|
||
{
|
||
g_bDote = 1 - g_bDote;
|
||
if (g_bDote)
|
||
{
|
||
g_bHatch = FALSE;
|
||
m_ButHatch.SetCheck(0);
|
||
g_bCommonElev = FALSE;
|
||
m_ButCommon.SetCheck(0);
|
||
g_bHasBase = FALSE;
|
||
m_ButBaseLine.SetCheck(0);
|
||
g_bHasLeader = FALSE;
|
||
m_ButLeadLine.SetCheck(0);
|
||
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
|
||
m_ButHollow.SetCheck(0);
|
||
|
||
g_bElevCross = FALSE;// 十字标高符号
|
||
m_ButCross.SetCheck(0);
|
||
}
|
||
else // sg add 090301,所有按钮都不点取时,自动选普通样式
|
||
{
|
||
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
|
||
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
|
||
{
|
||
g_bCommonElev = TRUE;
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
}
|
||
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
|
||
UpdateData(FALSE);
|
||
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
|
||
void CElevDlg::OnPickCommonElev() // sg add 090226,普通样式
|
||
{
|
||
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
|
||
{
|
||
g_bCommonElev = FALSE;
|
||
m_ButCommon.SetCheck(0);
|
||
}
|
||
else
|
||
{
|
||
g_bCommonElev = 1 - g_bCommonElev;
|
||
if (g_bCommonElev)
|
||
{
|
||
g_bHatch = FALSE;
|
||
m_ButHatch.SetCheck(0);
|
||
g_bDote = FALSE;
|
||
m_ButDote.SetCheck(0);
|
||
g_bHasBase = FALSE;
|
||
m_ButBaseLine.SetCheck(0);
|
||
g_bHasLeader = FALSE;
|
||
m_ButLeadLine.SetCheck(0);
|
||
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
|
||
m_ButHollow.SetCheck(0);
|
||
|
||
g_bElevCross = FALSE;// 十字标高符号
|
||
m_ButCross.SetCheck(0);
|
||
}
|
||
else // sg add 090301,所有按钮都不点取时,自动选普通样式
|
||
{
|
||
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
|
||
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
|
||
{
|
||
g_bCommonElev = TRUE;
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
}
|
||
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
|
||
UpdateData(FALSE);
|
||
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
|
||
void CElevDlg::OnPickBaseLine() // add by zkm,带基线
|
||
{
|
||
if (m_bHatchTou)
|
||
{
|
||
// g_bHasBase = TRUE; // sg modify 090303,JIG引线、基线时,基线按钮不可用
|
||
// m_ButBaseLine.SetCheck(1);
|
||
m_ButBaseLine.SetCheck(g_bHasBase);
|
||
UpdateData(FALSE);
|
||
acedGetAcadDwgView()->SetFocus();
|
||
return;
|
||
}
|
||
|
||
if (g_nElevType == 1) // sg add 090303,总图不支持该样式
|
||
{
|
||
g_bHasBase = FALSE;
|
||
m_ButBaseLine.SetCheck(0);
|
||
acedGetAcadDwgView()->SetFocus();
|
||
return;
|
||
}
|
||
|
||
g_bHasBase = 1 - g_bHasBase;
|
||
if (g_bHasBase)
|
||
{
|
||
g_bHatch = FALSE;
|
||
m_ButHatch.SetCheck(0);
|
||
g_bDote = FALSE; // sg add 090209,增加圆点样式
|
||
m_ButDote.SetCheck(0);
|
||
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
|
||
m_ButHollow.SetCheck(0);
|
||
g_bCommonElev = FALSE; // sg add 090226,增加普通样式
|
||
m_ButCommon.SetCheck(0);
|
||
|
||
g_bElevCross = FALSE;// 十字标高符号
|
||
m_ButCross.SetCheck(0);
|
||
}
|
||
else // sg add 090301,所有按钮都不点取时,自动选普通样式
|
||
{
|
||
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
|
||
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
|
||
{
|
||
g_bCommonElev = TRUE;
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
}
|
||
|
||
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
|
||
acedGetAcadDwgView()->SetFocus();
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnPickLeadLine() // add by zkm,带引线
|
||
{
|
||
if (m_bHatchTou)
|
||
{
|
||
// g_bHasLeader = TRUE; // sg modify 090303,JIG引线、基线时,基线按钮不可用
|
||
// m_ButLeadLine.SetCheck(1);
|
||
m_ButLeadLine.SetCheck(g_bHasLeader);
|
||
UpdateData(FALSE);
|
||
acedGetAcadDwgView()->SetFocus();
|
||
return;
|
||
}
|
||
|
||
if (g_nElevType == 1) // sg add 090303,总图不支持该样式
|
||
{
|
||
g_bHasLeader = FALSE;
|
||
m_ButLeadLine.SetCheck(0);
|
||
acedGetAcadDwgView()->SetFocus();
|
||
return;
|
||
}
|
||
|
||
g_bHasLeader = 1 - g_bHasLeader;
|
||
if (g_bHasLeader)
|
||
{
|
||
g_bHatch = FALSE;
|
||
m_ButHatch.SetCheck(0);
|
||
g_bDote = FALSE; // sg add 090209,增加圆点样式
|
||
m_ButDote.SetCheck(0);
|
||
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
|
||
m_ButHollow.SetCheck(0);
|
||
g_bCommonElev = FALSE; // sg add 090226,增加普通样式
|
||
m_ButCommon.SetCheck(0);
|
||
|
||
g_bElevCross = FALSE;// 十字标高符号
|
||
m_ButCross.SetCheck(0);
|
||
}
|
||
else // sg add 090301,所有按钮都不点取时,自动选普通样式
|
||
{
|
||
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
|
||
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
|
||
{
|
||
g_bCommonElev = TRUE;
|
||
m_ButCommon.SetCheck(1);
|
||
}
|
||
}
|
||
|
||
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
|
||
acedGetAcadDwgView()->SetFocus();
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnContinueDim() // add by zkm,连续标注
|
||
{
|
||
// g_bContinue = 1 - g_bContinue; // sg delete 090301,8.0起必须连续标注
|
||
// acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
|
||
void CElevDlg::OnOrder() // add by zkm,自动对齐
|
||
{
|
||
g_bOrder = 1 - g_bOrder;
|
||
acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
|
||
void CElevDlg::SetOrderFa(BOOL bOrder) // 未使用
|
||
{
|
||
m_bOrderTou = bOrder;
|
||
acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
|
||
void CElevDlg::OnCheckHatch() // 未使用
|
||
{
|
||
g_bHatch = 1 - g_bHatch;
|
||
if (g_bHatch)
|
||
{
|
||
g_bHasBase = g_bHasLeader = FALSE;
|
||
UpdateData(FALSE);
|
||
}
|
||
}
|
||
|
||
void CElevDlg::OnCheckBaseLine() // 未使用
|
||
{
|
||
g_bHasBase = 1 - g_bHasBase;
|
||
if (g_bHasBase)
|
||
{
|
||
g_bHatch = FALSE;
|
||
UpdateData(FALSE);
|
||
}
|
||
}
|
||
|
||
void CElevDlg::OnCheckLeader() // 未使用
|
||
{
|
||
g_bHasLeader = 1 - g_bHasLeader;
|
||
if (g_bHasLeader)
|
||
{
|
||
g_bHatch = FALSE;
|
||
UpdateData(FALSE);
|
||
}
|
||
}
|
||
|
||
|
||
void CElevDlg::OnButtonTextHeight() // 字高按钮
|
||
{
|
||
if (m_bModeless)
|
||
{
|
||
PostCommand(_T("` "), false);
|
||
}
|
||
else
|
||
{
|
||
GetTextHeight();
|
||
acedGetAcadDwgView()->SetFocus();
|
||
}
|
||
}
|
||
|
||
void CElevDlg::GetTextHeight()
|
||
{
|
||
XPushAutoHide noAutoHide(this);
|
||
UpdateData(TRUE);
|
||
double nHeight = _tstof(m_csTextHeight)*DocGetPScale();
|
||
BeginEditorCommand();
|
||
if (GetDist(_T("\n字高"), nHeight, RSG_NOZERO|RSG_NONEG) == RTNORM)
|
||
{
|
||
nHeight /= DocGetPScale();
|
||
m_csTextHeight.Format(_T("%.1f"), nHeight);
|
||
}
|
||
CompleteEditorCommand();
|
||
g_dTextHeight = _tstof(m_csTextHeight);
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CElevDlg::OnSelchangeComboTextHeight() // 字高Combo
|
||
{
|
||
UpdateData(TRUE);
|
||
int nIndex = m_cmbTextHeight.GetCurSel();
|
||
if (nIndex >= 0)
|
||
m_cmbTextHeight.GetLBText(nIndex, m_csTextHeight);
|
||
g_dTextHeight = _tstof(m_csTextHeight);
|
||
if (m_bDlgType) // sg add 090305
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnEditchangeComboTextHeight()
|
||
{
|
||
UpdateData(TRUE);
|
||
m_cmbTextHeight.GetWindowText(m_csTextHeight);
|
||
g_dTextHeight = _tstof(m_csTextHeight);
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnSelchangeComboFongstyle() // 字体样式
|
||
{
|
||
UpdateData(TRUE);
|
||
int nRet = m_cmbStyleName.GetCurSel();
|
||
if (nRet >= 0)
|
||
m_cmbStyleName.GetLBText(nRet, m_csFontStyle);
|
||
g_csFontStyle = m_csFontStyle;
|
||
|
||
AcDbObjectId idTextStyle = GetTextStyleId(m_csFontStyle);
|
||
if (!idTextStyle)
|
||
return;
|
||
|
||
OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
|
||
ASSERT(pStyle);
|
||
CString strTemp;
|
||
strTemp.Format(_T("%.1f"), pStyle->textSize()); // 读文字风格的字高
|
||
if (_tstof(strTemp) > 1.0E-3)
|
||
m_csTextHeight = strTemp;
|
||
OPENOBJ_END();
|
||
g_dTextHeight = _tstof(m_csTextHeight);
|
||
UpdateData(FALSE);
|
||
m_cmbStyleName.SetCurSel(m_cmbStyleName.FindStringExact(0, m_csFontStyle));
|
||
if (m_bDlgType) // sg add 090305
|
||
UpdataEnt();
|
||
}
|
||
|
||
|
||
void CElevDlg::OnSelchangeComboTextLoc() // 文字位置
|
||
{
|
||
UpdateData(TRUE);
|
||
int nRet = m_cmbTextLoc.GetCurSel();
|
||
if (nRet >= 0)
|
||
m_cmbTextLoc.GetLBText(nRet, m_csTextLoc);
|
||
g_csTextLoc = m_csTextLoc;
|
||
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnBnClickedSideText() // 文字是否在线端
|
||
{
|
||
UpdateData(TRUE);
|
||
if (m_bDlgType) // sg add 090305
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnBnClickedUpText() // sg add 090311,文字是否居中
|
||
{
|
||
UpdateData(TRUE);
|
||
if (m_bDlgType)
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnBnClickedStandard() // 是否规范样式
|
||
{
|
||
UpdateData(TRUE);
|
||
// 控制“添加括号”是否可改
|
||
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard);
|
||
UpdateData(FALSE);
|
||
|
||
if (m_bDlgType) // sg add 090305
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnBnClickedParentheses() // 是否添加括号
|
||
{
|
||
UpdateData(TRUE);
|
||
if (m_bDlgType) // sg add 090305
|
||
UpdataEnt();
|
||
}
|
||
|
||
|
||
// sg add 090220,切换属性页面
|
||
void CElevDlg::OnSelchangeTabElevType(NMHDR* pNMHDR, LRESULT* pResult)
|
||
{
|
||
if (IsSitePlanDlg())
|
||
{
|
||
return;
|
||
}
|
||
if (m_bHatchTou) // JIG基线、引线,不可以切换到总图页面
|
||
{
|
||
g_nElevType = 0;
|
||
m_Tab.SetCurSel(g_nElevType);
|
||
UpdateData(FALSE);
|
||
acedGetAcadDwgView()->SetFocus();
|
||
return;
|
||
}
|
||
g_nElevType = m_Tab.GetCurSel();
|
||
SetTabCurPage1(); // 调整控件的显示
|
||
SetTabCurPage2(); // 强制规定
|
||
SetTextLocationByStyle(); // 设置显示哪种文字与符号的位置关系设置方式
|
||
|
||
g_iPrecision = 1 - g_nElevType; // 调整默认精确度,建筑.000,总图.00
|
||
m_ComBox.SetCurSel(g_iPrecision);
|
||
if (m_bDlgType) // sg add 090305
|
||
m_pElev->SetPrec2(g_iPrecision==0);
|
||
|
||
if (!m_bDlgType) // 对象编辑对话框,更新表格内容
|
||
InitGridAndTextFromEnt();
|
||
else // sg add 090305,绘制对话框
|
||
UpdataEnt();
|
||
*pResult = 0;
|
||
}
|
||
|
||
|
||
void CElevDlg::OnBnClickedUseConversion() // sg add 090222,是否应用换算关系
|
||
{
|
||
if (g_nElevType == 0) // 只对总图有效,OnSelchangeTabElevType函数中会调用
|
||
return;
|
||
|
||
UpdateData(TRUE);
|
||
SetShowByUseConversion(); // 处理控件显示
|
||
CalAbsoluteElev(); // 根据换算关系、相对标高修改绝对标高
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CElevDlg::OnChangeEditAbsoluteElev() // sg add 090312,改变绝对标高
|
||
{
|
||
// 保留旧值,防止输入错误。绝对标高只允许输入数字,小数点,负号
|
||
CString csTmp = g_csAbsoluteElev;
|
||
UpdateData(TRUE);
|
||
// sg modify 120608,只有在自动换算的时候,才要求绝对标高的地方是数字
|
||
// if (!IsDigitEle(g_csAbsoluteElev))
|
||
|
||
//tyj modify 20160826:绝对标高不能有空格
|
||
if( g_csAbsoluteElev.Find(_T(" ")) != -1)
|
||
{
|
||
g_csAbsoluteElev.Remove(' ');
|
||
}
|
||
if (g_bUseConversion && !IsDigitEle(g_csAbsoluteElev))
|
||
g_csAbsoluteElev = csTmp;
|
||
|
||
CalRelativeElev(); // 计算相对标高
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CElevDlg::OnChangeEditRelativeElev() // sg add 090312,改变相对标高
|
||
{
|
||
UpdateData(TRUE);
|
||
CalAbsoluteElev(); // 计算绝对标高
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CElevDlg::OnChangeEditConversion() // sg add 090223,改变换算关系
|
||
{
|
||
// 保留旧值,防止输入错误。换算关系值只允许输入数字,小数点,负号
|
||
CString csTmp = g_csElevConversion;
|
||
UpdateData(TRUE);
|
||
if (!IsDigitEle(g_csElevConversion))
|
||
g_csElevConversion = csTmp;
|
||
|
||
CalAbsoluteElev(); // 计算绝对标高
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CElevDlg::CalAbsoluteElev() // sg add 090223,用换算关系、相对标高,计算绝对标高
|
||
{
|
||
if (g_nElevType==0 || !g_bUseConversion) // 只对自动换算的总图标高有效
|
||
return;
|
||
|
||
CString csRelativeElev = g_csRelativeElev; // 相对标高
|
||
csRelativeElev.TrimLeft();
|
||
csRelativeElev.TrimRight();
|
||
BOOL bFlag = csRelativeElev.IsEmpty();
|
||
if (bFlag || !IsDigitEle(csRelativeElev)) // 空,文字注释
|
||
csRelativeElev = _T("0");
|
||
|
||
CString csPrecision;
|
||
if (g_iPrecision == 0) // .00
|
||
csPrecision = _T("%.2f");
|
||
else // .000
|
||
csPrecision = _T("%.3f");
|
||
|
||
double dRelativeElev = _tstof(csRelativeElev),
|
||
dAbsoluteElev = dRelativeElev + _tstof(g_csElevConversion);
|
||
g_csAbsoluteElev.Format(csPrecision, dAbsoluteElev); // 绝对标高
|
||
if (bFlag) // 相对标高不能为空,但可以为非数字
|
||
g_csRelativeElev.Format(csPrecision, dRelativeElev);
|
||
}
|
||
|
||
void CElevDlg::CalRelativeElev() // sg add 090312,用换算关系、绝对标高,计算相对标高
|
||
{
|
||
if (g_nElevType==0 || !g_bUseConversion) // 只对自动换算的总图标高有效
|
||
return;
|
||
|
||
CString csAbsoluteElev = g_csAbsoluteElev; // 绝对标高
|
||
csAbsoluteElev.TrimLeft();
|
||
csAbsoluteElev.TrimRight();
|
||
BOOL bFlag = csAbsoluteElev.IsEmpty();
|
||
if (bFlag) // 空
|
||
csAbsoluteElev = _T("0");
|
||
|
||
CString csPrecision;
|
||
if (g_iPrecision == 0) // .00
|
||
csPrecision = _T("%.2f");
|
||
else // .000
|
||
csPrecision = _T("%.3f");
|
||
|
||
double dAbsoluteElev = _tstof(csAbsoluteElev),
|
||
dRelativeElev = dAbsoluteElev - _tstof(g_csElevConversion); // 相对标高
|
||
g_csRelativeElev.Format(csPrecision, dRelativeElev);
|
||
if (bFlag) // 绝对标高不能为空
|
||
g_csAbsoluteElev.Format(csPrecision, dAbsoluteElev);
|
||
}
|
||
|
||
BOOL CElevDlg::IsDigitEle(const XString &sText) // sg add 090223,判断输入内容是否是数字
|
||
{
|
||
BOOL bRet = TRUE;
|
||
CString csText = sText.cs();
|
||
int nLen = csText.GetLength();
|
||
for (int i = 0; i < nLen; i++)
|
||
{
|
||
if (_istdigit(csText[i]) || csText[i]==_T('.')) // 数字、小数点
|
||
continue;
|
||
if (i==0 && csText[i]==_T('-')) // 负号
|
||
continue;
|
||
|
||
bRet = FALSE;
|
||
break;
|
||
}
|
||
return bRet;
|
||
}
|
||
|
||
|
||
void CElevDlg::OnRadioElevAlignType1() // 上下排列
|
||
{
|
||
UpdateData(TRUE);
|
||
if (g_nElevTextAlign == 0) // 上下排列
|
||
{
|
||
g_bElevSideText = TRUE; // 强制“文字齐线端”
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE); // “文字齐线端”不可改
|
||
}
|
||
else // 左右排列
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE);
|
||
UpdateData(FALSE);
|
||
|
||
if (m_bDlgType) // sg add 090305,如果是绘制对话框,更新对象
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnRadioElevAlignType2() // 左右排列
|
||
{
|
||
UpdateData(TRUE);
|
||
if (g_nElevTextAlign == 0) // 上下排列
|
||
{
|
||
g_bElevSideText = TRUE; // 强制“文字齐线端”
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE); // “文字齐线端”不可改
|
||
}
|
||
else // 左右排列
|
||
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE);
|
||
UpdateData(FALSE);
|
||
|
||
if (m_bDlgType) // sg add 090305,如果是绘制对话框,更新对象
|
||
UpdataEnt();
|
||
}
|
||
|
||
void CElevDlg::OnButtonAddMutiElev() // sg add 090401,调用自动多层标高
|
||
{
|
||
CTemporaryResourceOverride vTemp;
|
||
CEditMutiElevDlg dlg;
|
||
dlg.SetPrecision(g_iPrecision!=0); // 设置精确度
|
||
|
||
CString csCell01; // 首层楼层高
|
||
XStringList lstElevs; // 全部标高
|
||
long lRows = m_grid.GetRowNum();
|
||
for (long l=0; l<lRows; l++)
|
||
{
|
||
if (l == 0)
|
||
csCell01 = m_grid[l][1l].GetText();
|
||
TString sCol1 = m_grid[l][0l].GetText();
|
||
lstElevs.Append(tstrnew(sCol1));
|
||
}
|
||
dlg.SetCell01(csCell01); // 设置首层楼层高
|
||
dlg.SetKnownElev(lstElevs); // 设置全部标高
|
||
|
||
if (dlg.DoModal() == IDOK)
|
||
{
|
||
XStringList lstCol1, lstCol2;
|
||
dlg.GetGridTexts(lstCol1, lstCol2);
|
||
|
||
int nLen = lstCol1.Length();
|
||
m_grid.Clear();
|
||
m_grid.SetRowNum(nLen);
|
||
for (long i=0; i<nLen; i++)
|
||
{
|
||
m_grid[i][0l].SetText(lstCol1[i]); // 楼层标高
|
||
m_grid[i][1l].SetText(lstCol2[i]); // 楼层号/标高说明
|
||
}
|
||
|
||
g_bHightWrite = TRUE;
|
||
SetGridEnableWrite(g_bHightWrite);
|
||
}
|
||
}
|
||
|
||
// sg add 120609,下面这些函数用于提供外界与上面定义的静态变量交互使用
|
||
BOOL CElevDlg::IsHightWrite () const
|
||
{
|
||
return g_bHightWrite;
|
||
}
|
||
|
||
BOOL CElevDlg::IsHasBase() const
|
||
{
|
||
return g_bHasBase;
|
||
}
|
||
|
||
BOOL CElevDlg::IsHasLeader() const
|
||
{
|
||
return g_bHasLeader;
|
||
}
|
||
|
||
BOOL CElevDlg::IsOrder() const
|
||
{
|
||
return g_bOrder;
|
||
}
|
||
|
||
void CElevDlg::SetLeaderLen(double dLen)
|
||
{
|
||
g_nLeaderLen = dLen;
|
||
}
|
||
|
||
void CElevDlg::SetBaseLen(double dLen)
|
||
{
|
||
g_nBaseLen = dLen;
|
||
}
|
||
|
||
void CElevDlg::SetSitePlanDlg(BOOL bSitePlan)
|
||
{
|
||
m_bSitePlanDlg = bSitePlan;
|
||
|
||
if (g_bFirstExecute)
|
||
{
|
||
if (bSitePlan)
|
||
g_iPrecision = 0;
|
||
else
|
||
g_iPrecision = 1;
|
||
g_bFirstExecute = FALSE;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
// sg add 090407,用于处理TMutiElevGrid表格的排序问题
|
||
static int CompareWDGridRow(const WDGridRow &row1, const WDGridRow &row2)
|
||
{
|
||
// 注:以下的强制转化的方法不可取,但此处没有别的方法可以实现
|
||
WDGridRow &temp1 = (WDGridRow&)row1;
|
||
WDGridRow &temp2 = (WDGridRow&)row2;
|
||
TString csText1, csText2;
|
||
csText1 = temp1[0l].GetText();
|
||
csText2 = temp2[0l].GetText();
|
||
|
||
double dElev1 = _tstof(csText1),
|
||
dElev2 = _tstof(csText2);
|
||
if (fabs(dElev1 - dElev2) < 1.0E-5)
|
||
return 0;
|
||
if (dElev1 > dElev2 + 1.0E-5)
|
||
return -1;
|
||
return 1;
|
||
}
|
||
|
||
void TMutiElevGrid::OnDataChanged()
|
||
{
|
||
GetParent()->PostMessage(WM_GRID_CHANGED, NULL, NULL);
|
||
}
|
||
|
||
bool TMutiElevGrid::OnBeforeInsertRow(long i, WDGridRow*&pNewRow)
|
||
{
|
||
if (pNewRow==NULL && i<GetRowNum())
|
||
{
|
||
pNewRow = new WDGridRow(*this);
|
||
WDGridRow &culRow = GetRow(i);
|
||
TString csText = culRow[0l].GetText();
|
||
(*pNewRow)[0l].SetText(csText);
|
||
}
|
||
else if (pNewRow == NULL) // sg add 090527,表格中有负数时,解决新建行不在最后的问题
|
||
{
|
||
pNewRow = new WDGridRow(*this);
|
||
int nNum = GetRowNum() - 1;
|
||
WDGridRow &culRow = GetRow(nNum);
|
||
TString csText = culRow[0l].GetText();
|
||
(*pNewRow)[0l].SetText(csText);
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void TMutiElevGrid::ArrangeDouble()
|
||
{
|
||
rowList.Arrange(CompareWDGridRow);
|
||
|
||
PDList<WDGridRow> buf;
|
||
buf.Conbine(rowList);
|
||
for(buf.MoveToFirst(); !buf.IsOut(); buf.MoveToNext())
|
||
{
|
||
WDGridRow* pRow = buf.FetchCur();
|
||
AppendRow(pRow);
|
||
}
|
||
Invalidate();
|
||
}
|
||
|
||
bool TMutiElevGrid::OnModified(WDGridCell&cell, CString &text)
|
||
{
|
||
CString csTmp;
|
||
csTmp = text;
|
||
csTmp.TrimLeft();
|
||
csTmp.TrimRight();
|
||
|
||
double dElev = _tstof(csTmp);
|
||
CString csFormat = m_bPrec3?_T("%.3f"):_T("%.2f");
|
||
csTmp.Format(csFormat, dElev); // 按精确度输出
|
||
text = csTmp;
|
||
return true;
|
||
}
|
||
|