// DrawWaterTankDlg.cpp : implementation file // #include "stdafx.h" #include "DrawWaterTankDlg.h" #include "SelWaterTankDlg.h" #include #include #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //extern TARCH_IMPEXP int DragMovePickSet(PickSet &ss, const TCHAR *pszPrompt, const XPoint &ptBase, XPoint &ptFinal); //extern GEOAPI int DragPickSet1(PickSet &ss, XPoint &ptBase); ///////////////////////////////////////////////////////////////////////////// // CDrawWaterTankDlg dialog void DrawDashLine(XPoint pt1, XPoint pt2, double nScale) { XLine line5(pt1, pt2, 1); line5.Make(); Entity entLast; entLast.GetLast(); AcDbObjectId eId; AcDbEntity *pEnt = NULL; acdbGetObjectId(eId, entLast); acdbOpenObject(pEnt, eId, AcDb::kForWrite); if(!pEnt) return; pEnt->setLinetype(_T("DASH")); pEnt->setLinetypeScale(nScale); pEnt->close(); } //*************************************************************************************************** // 编辑水箱 //*************************************************************************************************** int EditWaterTank(AcDbObjectId id) { if(!id) return RTERROR; int iLength(0), iWidth(0), iHeight(0); CTemporaryResourceOverride vTemp; CDrawWaterTankDlg dlg; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbWaterTank, pEquip); if(pEquip){ dlg.m_nHeight = pEquip->GetHeight(); dlg.m_nLength = pEquip->GetLength(); dlg.m_nWidth = pEquip->GetWidth(); dlg.m_bNeedHole = pEquip->IsNeedHole(); dlg.m_bNeedSleeper = pEquip->IsNeedSleeper(); dlg.m_iNum = pEquip->GetSleeperNum(); dlg.m_nHoleWidth = pEquip->GetHoleWidth(); dlg.m_nLowLine = pEquip->GetLowLine(); dlg.m_nHighLine = pEquip->GetHighLine(); dlg.m_iSleepPos = pEquip->GetSleeperPos(); dlg.m_iShape = pEquip->GetShape(); dlg.m_iType = pEquip->GetShowType(); dlg.m_dSleeperHeight = pEquip->GetSleeperWidth(); //枕木高 dlg.m_nInEle = pEquip->GetWaterInEle(); dlg.m_nOutEle = pEquip->GetRushEle(); dlg.m_nHoleType = pEquip->HoleIsRect(); dlg.m_dSleeperWidth = pEquip->GetSpare(); //枕木宽 modified by cet 2009.11.11 dlg.m_dSleeperLen = pEquip->GetSleeperLen(); // 枕木长 cet 2011.4.22 add dlg.m_dTankElev = pEquip->GetElev();// zxl 2012.12.03 add } OPENOBJ_END(); if(dlg.DoModal() != IDOK) return 1; OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbWaterTank, pEquip); if(pEquip){ pEquip->SetHeight(dlg.m_nHeight); pEquip->SetLength(dlg.m_nLength); pEquip->SetWidth(dlg.m_nWidth); pEquip->SetNeedHole(dlg.m_bNeedHole); pEquip->SetNeedSleeper(dlg.m_bNeedSleeper); pEquip->SetSleeperNum(dlg.m_iNum); pEquip->SetHoleWidth(dlg.m_nHoleWidth); pEquip->SetLowLine(dlg.m_nLowLine); pEquip->SetHighLine(dlg.m_nHighLine); pEquip->SetSleeperPos(dlg.m_iSleepPos); pEquip->SetShape(dlg.m_iShape); pEquip->SetShowType(dlg.m_iType); pEquip->SetSleeperWidth(dlg.m_dSleeperHeight); //枕木高 pEquip->SetWaterInEle(dlg.m_nInEle); pEquip->SetRushEle(dlg.m_nOutEle); pEquip->SetHoleRect(dlg.m_nHoleType); pEquip->SetSpare(dlg.m_dSleeperWidth); //枕木宽 modified by cet 2009.11.11 pEquip->SetSleeperLen(dlg.m_dSleeperLen); // 枕木长 cet 2011.4.22 add pEquip->SetElev(dlg.m_dTankElev);// zxl 2012.12.03 add //调整人孔位置 TDbRect rect1; XPoint ptIns; ptIns = pEquip->GetLocation(); double nLength = dlg.m_nLength * 1000; double nWidth = dlg.m_nWidth * 1000; double nHoleWidth = dlg.m_nHoleWidth * 1000; rect1.SetSizeX(nLength); rect1.SetSizeY(nWidth); rect1.SetCenter(ptIns); rect1.SetRotation(pEquip->GetRotation()); // cet 2011.9.15 add if(dlg.m_iShape == 1) { XPoint ptHole; XPoint ptHoleBefore = pEquip->GetHoleInsert(); double dMin = ptHoleBefore.Distance2d(rect1.GetUpLeft()); ptHole = rect1.GetUpLeft(); ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15 ads_polar(ptHole, 0, nHoleWidth/2, ptHole); ads_polar(ptHole, PI/2, -nHoleWidth/2, ptHole); ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15 if (ptHoleBefore.Distance2d(rect1.GetUpRight()) < dMin) { ptHole = rect1.GetUpRight(); ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15 ads_polar(ptHole, 0, -nHoleWidth/2, ptHole); ads_polar(ptHole, PI/2, -nHoleWidth/2, ptHole); ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15 dMin = ptHoleBefore.Distance2d(rect1.GetUpRight()); } if (ptHoleBefore.Distance2d(rect1.GetLowLeft()) < dMin) { ptHole = rect1.GetLowLeft(); ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15 ads_polar(ptHole, 0, nHoleWidth/2, ptHole); ads_polar(ptHole, PI/2, nHoleWidth/2, ptHole); ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15 dMin = ptHoleBefore.Distance2d(rect1.GetLowLeft()); } if (ptHoleBefore.Distance2d(rect1.GetLowRight()) < dMin) { ptHole = rect1.GetLowRight(); ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15 ads_polar(ptHole, 0, -nHoleWidth/2, ptHole); ads_polar(ptHole, PI/2, nHoleWidth/2, ptHole); ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15 dMin = ptHoleBefore.Distance2d(rect1.GetLowRight()); } pEquip->SetHoleInsert(ptHole); } } OPENOBJ_END(); return 1; } void DrawWaterTank() { CTemporaryResourceOverride over; CDrawWaterTankDlg dlg; if(dlg.DoModal() != IDOK) return; XPoint ptIns, ptHole; if(ads_getpoint(NULL, _T("\n请点取水箱插入点<退出>:"), ptIns) != RTNORM) return; ptIns = Ucs2Wcs(ptIns); InitLayer(LAY_TWT_WATERTANK); //XPushVarStr clayer(_T("CLAYER"), LAY_TWT_WATERTANK); cet 2011.10.11 del 导致产生"CLAYER"图层 double nLength = dlg.m_nLength * 1000; double nWidth = dlg.m_nWidth * 1000; double nHoleWidth = dlg.m_nHoleWidth * 1000; TDbRect rect1; rect1.SetSizeX(nLength); rect1.SetSizeY(nWidth); rect1.SetCenter(ptIns); rect1.SetRotation(Ucs2Wcs(0.0)); // cet 2011.9.15 add ptHole = rect1.GetUpLeft(); ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15 add ads_polar(ptHole, 0, nHoleWidth/2, ptHole); ads_polar(ptHole, PI/2, -nHoleWidth/2, ptHole); ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15 add CString csDwb = g_csDwbPath + _T("TwtSys"); XString xsTmp; if(LoadDwbBlock(csDwb, _T("00000415"), xsTmp) != RTNORM) //锅盖 return; TDbWaterTank *pTank = new TDbWaterTank; pTank->SetLocation(ptIns); if(dlg.m_iShape != 1) pTank->SetHoleInsert(ptIns); else pTank->SetHoleInsert(ptHole); pTank->SetDashLayer(InitDashLayer(_T("TWT_DASH"))); pTank->SetHeight(dlg.m_nHeight); pTank->SetWidth(dlg.m_nWidth); pTank->SetLength(dlg.m_nLength); pTank->SetNeedHole(dlg.m_bNeedHole); pTank->SetNeedSleeper(dlg.m_bNeedSleeper); pTank->SetSleeperPos(dlg.m_iSleepPos); pTank->SetLowLine(dlg.m_nLowLine); pTank->SetHighLine(dlg.m_nHighLine); pTank->SetSleeperNum(dlg.m_iNum); pTank->SetShowType(dlg.m_iType); pTank->SetElev(dlg.m_dTankElev);// zxl 2012.12.03 add pTank->SetBlock3d(GetBlockIdFromString(xsTmp)); pTank->SetShape(dlg.m_iShape); pTank->SetSleeperWidth(dlg.m_dSleeperHeight); //枕木高 pTank->SetSpare(dlg.m_dSleeperWidth); //枕木宽 modified by cet 2009.11.11 pTank->SetSleeperLen(dlg.m_dSleeperLen); // 枕木长 cet 2011.4.22 addd pTank->SetHoleWidth(dlg.m_nHoleWidth); pTank->SetHoleRect(dlg.m_nHoleType); pTank->SetRotation(Ucs2Wcs(0.0)); // cet 2011.8.29 add pTank->setLayer(LAY_TWT_WATERTANK); // cet 2011.10.11 add AcDbObjectId id = AddToCurrentSpace(pTank, Adesk::kTrue); } double CDrawWaterTankDlg::m_nHeight = 2; double CDrawWaterTankDlg::m_nLength = 3; double CDrawWaterTankDlg::m_nWidth = 2; int CDrawWaterTankDlg::m_iType = 0; int CDrawWaterTankDlg::m_iShape = 1; // cet 2011.9.14 add double CDrawWaterTankDlg::m_dTankElev = 0.0; CString CDrawWaterTankDlg::m_csCubage = _T("0.5"); CDrawWaterTankDlg::CDrawWaterTankDlg(CWnd* pParent /*=NULL*/) : CDialog(CDrawWaterTankDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDrawWaterTankDlg) m_bNeedHole = TRUE; m_bNeedSleeper = TRUE; m_iNum = 3; m_iSleepPos = 0; m_nHighLine = 1.8; m_nHoleWidth = 0.5; m_nLowLine = 0; m_nInEle = 0.0; m_nOutEle = 0.0; m_nHoleType = 0; m_dSleeperHeight = 0.5; m_dSleeperWidth = 0.2; m_dSleeperLen = 0.0; //}}AFX_DATA_INIT } void CDrawWaterTankDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDrawWaterTankDlg) DDX_Control(pDX, IDC_SPIN_NUM, m_spinNum); DDX_Check(pDX, IDC_CHECK_NEED_HOLE, m_bNeedHole); DDX_Check(pDX, IDC_CHECK_NEED_SLEEPER, m_bNeedSleeper); DDX_Text(pDX, IDC_EDIT_NUM, m_iNum); DDX_CBIndex(pDX, IDC_COMBO_POS2, m_iSleepPos); DDX_Text(pDX, IDC_EDIT_HIGH_LINE, m_nHighLine); DDX_Text(pDX, IDC_EDIT_HOLE_WIDTH, m_nHoleWidth); DDX_Text(pDX, IDC_EDIT_LOW_LINE, m_nLowLine); DDX_Text(pDX, IDC_EDIT_IN_ELE, m_nInEle); DDX_Text(pDX, IDC_EDIT_OUT_ELE, m_nOutEle); DDX_Radio(pDX, IDC_RADIORECTAN, m_nHoleType); DDX_Text(pDX, IDC_EDIT_SLEEPER_HEIGHT, m_dSleeperHeight); DDX_Text(pDX, IDC_EDIT_SLEEPER_WIDTH, m_dSleeperWidth); DDX_Text(pDX, IDC_EDIT_SLEEPER_LEN, m_dSleeperLen); DDX_Radio(pDX, IDC_RADIO_SHAPE1, m_iShape); DDX_Radio(pDX, IDC_RADIO_TYPE1, m_iType); DDX_Text(pDX, IDC_EDIT_CUBAGE, m_csCubage); DDX_Text(pDX, IDC_EDIT_ELEV, m_dTankElev); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDrawWaterTankDlg, CDialog) //{{AFX_MSG_MAP(CDrawWaterTankDlg) ON_BN_CLICKED(IDC_RADIO_SHAPE1, OnRadioShape1) ON_BN_CLICKED(IDC_RADIO_SHAPE2, OnRadioShape2) ON_BN_CLICKED(IDC_BUTTON_STANDARD, OnButtonStandard) ON_BN_CLICKED(IDC_CHECK_NEED_HOLE, OnCheckNeedHole) ON_BN_CLICKED(IDC_CHECK_NEED_SLEEPER, OnCheckNeedSleeper) ON_BN_CLICKED(IDC_RADIO_SHAPE3, OnRadioShape3) ON_EN_CHANGE(IDC_EDIT_LENGTH, OnChangeEditLength) ON_EN_CHANGE(IDC_EDIT_WIDTH, OnChangeEditWidth) ON_CBN_SELCHANGE(IDC_COMBO_POS2, OnSelchangeComboPos2) ON_EN_CHANGE(IDC_EDIT_HEIGHT, OnChangeEditHeight) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDrawWaterTankDlg message handlers BOOL CDrawWaterTankDlg::OnInitDialog() { CDialog::OnInitDialog(); m_spinNum.SetRange(1, 10); ResetCheck(); CWnd *pWnd1 = GetDlgItem(IDC_CHECK_NEED_SLEEPER); if(m_iShape == 0 || m_iShape == 2) pWnd1->EnableWindow(FALSE); else pWnd1->EnableWindow(TRUE); ResetEdit(); // cet 2011.6.7 add UpdateTankData(); // cet 2011.4.22 add 枕木长未被赋值时 if (m_iSleepPos == 0 && fabs(m_dSleeperLen) < g_fZero) { OnChangeEditLength(); } else if (m_iSleepPos == 1 && fabs(m_dSleeperLen) < g_fZero) { OnChangeEditWidth(); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } // 更新水箱数据 zxxl 2012.03.28 add void CDrawWaterTankDlg::UpdateTankData() { CWnd *pWnd2 = GetDlgItem(IDC_EDIT_HEIGHT); CWnd *pWnd3 = GetDlgItem(IDC_EDIT_LENGTH); CWnd *pWnd4 = GetDlgItem(IDC_EDIT_WIDTH); CString sTemp; if (pWnd2 != NULL) { sTemp.Format(_T("%.3f"), m_nHeight); sTemp.TrimRight(_T("0")); sTemp.TrimRight(_T(".")); pWnd2->SetWindowText(sTemp); } if (pWnd3 != NULL) { sTemp.Format(_T("%.3f"), m_nLength); sTemp.TrimRight(_T("0")); sTemp.TrimRight(_T(".")); pWnd3->SetWindowText(sTemp); } if (pWnd4 != NULL) { sTemp.Format(_T("%.3f"), m_nWidth); sTemp.TrimRight(_T("0")); sTemp.TrimRight(_T(".")); pWnd4->SetWindowText(sTemp); } } void CDrawWaterTankDlg::OnRadioShape1() { ResetEdit(); } void CDrawWaterTankDlg::OnRadioShape2() { ResetEdit(); } void CDrawWaterTankDlg::OnRadioShape3() { ResetEdit(); } void CDrawWaterTankDlg::OnButtonStandard() { CTemporaryResourceOverride vTemp; CSelWaterTankDlg dlg; // zxl 2012.03.28 add 水箱类型联动 if (m_iShape == 0 || m_iShape == 2) { dlg.m_iShape = 0; } else { dlg.m_iShape = 1; } if(dlg.DoModal() != IDOK) return; m_csCubage = dlg.m_csCubage; if (!((m_iShape == 0 || m_iShape == 2) && dlg.m_iShape == 0)) { m_iShape = dlg.m_iShape; } if(m_iShape == 0 || m_iShape == 2){ m_nLength = (double)dlg.m_iRadius/1000; m_nHeight = (double)dlg.m_iHeight/1000; m_bNeedHole = FALSE; } else{ m_nLength = (double)dlg.m_iLength/1000; m_nWidth = (double)dlg.m_iWidth/1000; m_nHeight = (double)dlg.m_iHeight/1000; } UpdateData(FALSE); // zxl 2012.03.28 add 显示水箱数据 UpdateTankData(); ResetEdit(); } void CDrawWaterTankDlg::ResetEdit() { UpdateData(TRUE); CWnd *pWnd1 = GetDlgItem(IDC_CHECK_NEED_SLEEPER); CWnd *pWnd2 = GetDlgItem(IDC_STATIC_TEXT); CWnd *pWnd3 = GetDlgItem(IDC_STATIC_TEXT2); // CWnd *pWnd4 = GetDlgItem(IDC_STATIC_TEXT3); // if(m_iShape == 2) // pWnd4->SetWindowText("水箱长(m):"); // else // pWnd4->SetWindowText("水箱高(m):"); if(m_iShape == 0 || m_iShape == 2){ pWnd1->EnableWindow(FALSE); pWnd2->SetWindowText(_T("水箱直径:")); pWnd3->SetWindowText(_T("支座高度:")); if(m_nWidth > 1) m_nWidth = 0.5; m_bNeedSleeper = FALSE; } else{ pWnd1->EnableWindow(TRUE); pWnd2->SetWindowText(_T("水箱长(m):")); pWnd3->SetWindowText(_T("水箱宽(m):")); if(m_nWidth < 1) m_nWidth = 2; m_bNeedSleeper = TRUE; } UpdateData(FALSE); ResetCheck(); } void CDrawWaterTankDlg::OnCheckNeedHole() { ResetCheck(); } void CDrawWaterTankDlg::OnCheckNeedSleeper() { ResetCheck(); } void CDrawWaterTankDlg::ResetCheck() { UpdateData(TRUE); CWnd *pWnd1 = GetDlgItem(IDC_EDIT_HOLE_WIDTH); // CWnd *pWnd2 = GetDlgItem(IDC_COMBO_POS); CWnd *pWnd3 = GetDlgItem(IDC_EDIT_NUM); CWnd *pWnd4 = GetDlgItem(IDC_SPIN_NUM); CWnd *pWnd5 = GetDlgItem(IDC_COMBO_POS2); CWnd *pWnd6 = GetDlgItem(IDC_EDIT_SLEEPER_HEIGHT); CWnd *pWnd7 = GetDlgItem(IDC_EDIT_SLEEPER_WIDTH); CWnd *pWnd8 = GetDlgItem(IDC_EDIT_SLEEPER_LEN); // cet 2011.4.22 add 枕木长 if(!m_bNeedHole){ pWnd1->EnableWindow(FALSE); // pWnd2->EnableWindow(FALSE); } else{ pWnd1->EnableWindow(TRUE); // pWnd2->EnableWindow(TRUE); } if(m_bNeedSleeper){ pWnd3->EnableWindow(TRUE); pWnd4->EnableWindow(TRUE); pWnd5->EnableWindow(TRUE); pWnd6->EnableWindow(TRUE); pWnd7->EnableWindow(TRUE); pWnd8->EnableWindow(TRUE); // cet 2011.4.22 add } else{ pWnd3->EnableWindow(FALSE); pWnd4->EnableWindow(FALSE); pWnd5->EnableWindow(FALSE); pWnd6->EnableWindow(FALSE); pWnd7->EnableWindow(FALSE); pWnd8->EnableWindow(FALSE); // cet 2011.4.22 add } } //added by cet 2009.11.11 void CDrawWaterTankDlg::OnOK() { UpdateData(); // cet 2011.6.7 add CWnd *pWnd2 = GetDlgItem(IDC_EDIT_HEIGHT); CWnd *pWnd3 = GetDlgItem(IDC_EDIT_LENGTH); CWnd *pWnd4 = GetDlgItem(IDC_EDIT_WIDTH); CString sTemp; if (pWnd2 != NULL) { pWnd2->GetWindowText(sTemp); m_nHeight = _tstof(sTemp); } if (pWnd3 != NULL) { pWnd3->GetWindowText(sTemp); m_nLength = _tstof(sTemp); } if (pWnd4 != NULL) { pWnd4->GetWindowText(sTemp); m_nWidth = _tstof(sTemp); } if ((m_nWidth - (m_iNum - 1) * m_dSleeperWidth) < 0) { MessageBox(_T("枕木数宽度和应小于水箱宽度!")); return; } CDialog::OnOK(); } void CDrawWaterTankDlg::OnChangeEditLength() { UpdateData(TRUE); // cet 2011.6.7 add CWnd *pWnd = GetDlgItem(IDC_EDIT_LENGTH); if (pWnd != NULL) { CString sTemp; pWnd->GetWindowText(sTemp); m_nLength = _tstof(sTemp); } if(m_iSleepPos == 0) // 枕木位置:水平 { m_dSleeperLen = m_nLength + 0.1; } UpdateData(FALSE); } void CDrawWaterTankDlg::OnChangeEditWidth() { UpdateData(TRUE); // cet 2011.6.7 add CWnd *pWnd = GetDlgItem(IDC_EDIT_WIDTH); if (pWnd != NULL) { CString sTemp; pWnd->GetWindowText(sTemp); m_nWidth = _tstof(sTemp); } if(m_iSleepPos == 1) // 枕木位置:垂直 { m_dSleeperLen = m_nWidth + 0.1; } UpdateData(FALSE); } void CDrawWaterTankDlg::OnSelchangeComboPos2() { UpdateData(TRUE); if (m_iSleepPos == 0) { m_dSleeperLen = m_nLength + 0.1; } else if (m_iSleepPos == 1) { m_dSleeperLen = m_nWidth + 0.1; } UpdateData(FALSE); } void CDrawWaterTankDlg::OnChangeEditHeight() { UpdateData(TRUE); CWnd *pWnd = GetDlgItem(IDC_EDIT_HEIGHT); if (pWnd != NULL) { CString sTemp; pWnd->GetWindowText(sTemp); m_nHeight = _tstof(sTemp); } UpdateData(FALSE); }