Files
envi-code/SourceCode/Code2026/tg_shs/shs_annotate/ElevDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

2188 lines
61 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
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.
#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;
}