#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=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; iIsFilled(); // 符号样式 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; iSetTextBaseLen(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 ; iSetText(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 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 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 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; }