#include "stdafx.h" #include "PipelineTools.h" #include "BomReportExDlg.h" #include "ExcelWrite.h" #include "AecDbEwPipe.h" #include "AecDbEwEquipment.h" #include "AecDbEwfitting.h" #include "KTCadUtility.h" #include "AecDbParamEquipment.h" #include "AecDbXEquipment.h" #include "AecPipeSupport.h" #include "AecDbX3dPartEntity.h" #include "AecDbHolder.h" #include "AecDbHanger.h" #include "AecDbBossHolder.h" #include "AecDbLineStair.h" #include "AecDbArcStair.h" #include "AecDbClimbStair.h" #include "AecDbGuardBar.h" #include "AecDbOpening.h" #include "AecDbHvacDuct.h" #include "AecDbHvacFitting.h" #include "AecDbECableTray.h" #include "AecDbECFitting.h" #include "AecDbEwFlexiblePipe.h" #include "EquipmentLibraryDlg.h" #include "makeCADTable.h" #include "CoreTools.h" #ifndef ID_OBJLIST #define ID_OBJLIST 341 #endif #ifndef IMG_SYS #define IMG_SYS 0 #define IMG_PIPE 1 #define IMG_FIT 2 #endif #ifndef USER_DATA_SIZE #define USER_DATA_SIZE 256 #endif USER_DATA_SIZE #ifndef DXF_FORBOM #define DXF_FORBOM _T("AEC_*,INSERT") #endif #define INIT_DB_AND_CURR_SYS(db, sys)\ CString sys(_T(""));\ CUIISQLiteServer db;\ do {\ if (!PipelineTools::getSqliteDB(_T("Plumbing.db"), db))\ {\ AfxMessageBox(_T("未找到数据库文件Plumbing.db,请重新安装!"));\ return;\ }\ } while(false) IMPLEMENT_DYNAMIC(CBomReportExDlg, CDialog) CBomReportExDlg::CBomReportExDlg(CWnd* pParent /*=NULL*/) : CDialog(CBomReportExDlg::IDD, pParent) , m_sProno(_T("Pro-001")) , m_sDwgno(_T("Dwg-001")) , m_sBomDwg(_T("中石油吉林化工工程有限公司.dwg")) , m_nMaxRow(27) , m_dLenX(1.0) , m_bNoGasket(FALSE) { m_bIsdigitNo = FALSE; m_bNoAddCircle = FALSE; m_bNoNotOnClass = FALSE; m_bBomDwg = FALSE; } CBomReportExDlg::~CBomReportExDlg() { } void CBomReportExDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_STATIC_TREELIST, m_wndObjFrm); DDX_Text(pDX, IDC_EDITPRONO, m_sProno); DDX_Text(pDX, IDC_EDITDRWNO, m_sDwgno); DDX_Text(pDX, IDC_EDITBOMTMPL, m_sBomDwg); DDX_Check(pDX, IDC_CHECKEXCEL, m_bCheckExcel); DDX_Check(pDX, IDC_CHECK1, m_bIsdigitNo); DDX_Check(pDX, IDC_CHECK2, m_bNoAddCircle); DDX_Check(pDX, IDC_CHECK3, m_bNoNotOnClass); DDX_Control(pDX, IDC_LIST1, m_wndBomList); DDX_Text(pDX, IDC_EDIT_MAX_ROW, m_nMaxRow); DDX_Text(pDX, IDC_EDITLENX, m_dLenX); DDX_Check(pDX, IDC_CHECNOGST, m_bNoGasket); DDV_MinMaxInt(pDX, m_nMaxRow, 0, 1000); } BEGIN_MESSAGE_MAP(CBomReportExDlg, CDialog) ON_MESSAGE( WM_ACAD_KEEPFOCUS, &CBomReportExDlg::onAcadKeepFocus ) ON_BN_CLICKED(IDC_BTSELENTS, &CBomReportExDlg::OnBnClickedBtselents) ON_BN_CLICKED(IDC_BUTTON1,&CBomReportExDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2,&CBomReportExDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3,&CBomReportExDlg::OnBnClickedButton3) ON_BN_CLICKED(IDOK, &CBomReportExDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BTTMPL, &CBomReportExDlg::OnBnClickedBtTmpl) ON_BN_CLICKED(IDCANCEL, &CBomReportExDlg::OnBnClickedCancel) ON_BN_CLICKED(IDC_BTN_MKTABLE, &CBomReportExDlg::OnBnClickedMakeCADTable) ON_BN_CLICKED(IDC_BTN_MKEXCEL, &CBomReportExDlg::OnBnClickedMakeEXCELTable) ON_NOTIFY(NM_CLICK, ID_OBJLIST, &CBomReportExDlg::OnNMClickTree1) ON_WM_CLOSE() ON_WM_DESTROY() END_MESSAGE_MAP() LONG_PTR CBomReportExDlg::onAcadKeepFocus( UINT_PTR, LONG_PTR) { POINT pt; ::GetCursorPos(&pt); CRect rect; GetWindowRect(&rect); if(!(rect.PtInRect(pt))) { return FALSE; } return TRUE; } BOOL CBomReportExDlg::OnInitDialog() { CDialog::OnInitDialog(); CBitmap bmp; if (!bmp.LoadBitmap (IDB_BITMAP6)) { AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAP1); ASSERT (FALSE); return FALSE; } BITMAP bmpObj; bmp.GetBitmap (&bmpObj); UINT nFlags = ILC_COLOR24 | ILC_MASK; m_imageList.Create (16, bmpObj.bmHeight, nFlags, 0, 0); m_imageList.Add (&bmp, RGB (255, 0, 0)); CRect rcFrameL; m_wndObjFrm.GetWindowRect(rcFrameL); ScreenToClient(rcFrameL); m_wndObjFrm.ShowWindow(SW_HIDE); unsigned uStyle = TVS_HASBUTTONS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_FULLROWSELECT|TVS_EDITLABELS; unsigned uExStyle = TVS_EX_ITEMLINES|TVS_EX_ITEMLINES|TVS_EX_ALTERNATECOLOR|TVS_EX_SUBSELECT|TVS_EX_FULLROWMARK; m_wndObjTreeList.Create(uStyle|WS_CHILD|WS_VISIBLE|WS_BORDER,CRect(0,0,0,0),this,ID_OBJLIST); m_wndObjTreeList.SetImageList(&m_imageList,TVSIL_NORMAL); //兼容旧 m_wndBomList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); //按系统属性设置 InitObjListColumn(); m_wndObjTreeList.SetExtendedStyle(uExStyle); m_wndObjTreeList.SetUserDataSize(USER_DATA_SIZE); if ( m_wndObjTreeList.GetSafeHwnd() != NULL ) { m_wndObjTreeList.MoveWindow(rcFrameL); } CString sBomXlsIni = FilePath::GetSysDir() + _T("\\BOMReport.ini"); m_sBomDwg = FilePath::GetSysDir() + _T("\\中石油吉林化工工程有限公司.dwg"); UpdateData(FALSE); return TRUE; } void CBomReportExDlg::InitObjListColumn() { LPCTSTR lpszCols[] = {_T("序号"),_T("名称"),_T("规格"),_T("材料"),_T("单位"),_T("数量"),_T("备注"),_T("标准号"),_T("H"),NULL}; int lnColumns[] = {120,240,340,140,140,240,340,240,0,0}; LV_COLUMN lvColumn; lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvColumn.fmt = LVCFMT_LEFT; lvColumn.cx = 120; for(int i = 0; lpszCols[i] != NULL; i++) { lvColumn.cx = lnColumns[i]; lvColumn.pszText = const_cast(lpszCols[i]); m_wndObjTreeList.InsertColumn(i,&lvColumn); if (i < 7) m_wndObjTreeList.SetColumnAutoEdit(i); m_wndBomList.InsertColumn(i, lvColumn.pszText, LVCFMT_LEFT, lvColumn.cx, lvColumn.cx); } //OLD /*m_wndBomList.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 80, 80); m_wndBomList.InsertColumn(1,_T("名称"),LVCFMT_LEFT,160,160); m_wndBomList.InsertColumn(2,_T("规格"),LVCFMT_LEFT,200,200); m_wndBomList.InsertColumn(3,_T("单位"),LVCFMT_LEFT,60,60); m_wndBomList.InsertColumn(4,_T("数量"),LVCFMT_LEFT,80,80); m_wndBomList.InsertColumn(5,_T("材料"),LVCFMT_LEFT,120,120); m_wndBomList.InsertColumn(6,_T("备注"),LVCFMT_LEFT,120,120); m_wndBomList.InsertColumn(7,_T("标准号"),LVCFMT_LEFT,120,120); m_wndBomList.InsertColumn(8,_T("H"),LVCFMT_LEFT,0,0);*/ } void CBomReportExDlg::OnBnClickedMakeEXCELTable() { AcAxDocLock lock; if (!UpdateData()) return; ShowWindow(SW_HIDE); CopyToListCtrl(); ExcelBomWrite(); OnOK(); delete this; } void CBomReportExDlg::OnBnClickedMakeCADTable() { if (!UpdateData()) return; CopyToListCtrl(); if (m_wndBomList.GetItemCount() <= 0) { AfxMessageBox(_T("表格内没有数据。"), MB_OK | MB_ICONERROR); return; } ShowWindow(SW_HIDE); AcAxDocLock lock; if (!MKTABLE::makeTable(m_wndBomList, _T("材料统计报表"), m_nMaxRow)) { ShowWindow(SW_SHOW); return; } OnOK(); delete this; } void CBomReportExDlg::OnBnClickedBtselents() { UpdateData(); //文档锁定 AcApDocument* pDoc = acDocManager->curDocument(); acDocManager->lockDocument(pDoc); ShowWindow(SW_HIDE); struct resbuf* pRb = acutBuildList(RTDXF0, DXF_FORBOM,0); ads_name ss,ent; int nRes = CKTCadUtility::SelectEntities(_T("\n请选择实体:"), ss, pRb); acutRelRb(pRb); if (nRes == RTNORM) { AcDbObjectId id; Adesk::Int32 nLen = 0; acedSSLength(ss, &nLen); //实体统计 for (long i = 0;i < nLen;i++) { acedSSName(ss, i, ent); acdbGetObjectId(id, ent); ExtractBomOfEntity(id); } } acedSSFree(ss); acDocManager->unlockDocument(pDoc); ShowtoReportlist(); ShowWindow(SW_SHOW); } void CBomReportExDlg::ExtractBomOfEntity(AcDbObjectId& id) { //系统-管线 // -管件 // -设备 // //... if ( m_arBomIds.find(id) != -1) return; m_arBomIds.append(id); AcDbEntity* pEnt = NULL; if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead)) { //管线 AecDbEwPipe* pPipe = AecDbEwPipe::cast(pEnt); if (pPipe != NULL) { ExtractBomOfPipe(pPipe); } //管件 AecDbEwFitting* pEwFit = AecDbEwFitting::cast(pEnt); if (pEwFit != NULL) { ExtractBomOfEwFit(pEwFit); } //设备 AecDbEwEquipment* pEqu = AecDbEwEquipment::cast(pEnt); if (pEqu != NULL) { ExtractBomOfEqu(pEqu); } //设备 AecDbXEquipment* pXEqu = AecDbXEquipment::cast(pEnt); if (pXEqu != NULL) { ExtractBomOfXEqu(pXEqu); } //风管 AecDbHvacDuct* pDuct = AecDbHvacDuct::cast(pEnt); if (pDuct != NULL) { ExtractBomOfDuct(pDuct); } //风管件 AecDbHvacFitting* pHFit = AecDbHvacFitting::cast(pEnt); if (pHFit != NULL) { ExtractBomOfHFit(pHFit); } //桥架 AecDbECableTray* pECable = AecDbECableTray::cast(pEnt); if (pECable != NULL) { ExtractBomOfECable(pECable); } //桥架件 AecDbEcFitting* pEFit = AecDbEcFitting::cast(pEnt); if (pEFit != NULL) { ExtractBomOfEFit(pEFit); } //套管 AecDbX3dPartEntity* pXPart = AecDbX3dPartEntity::cast(pEnt); if (pXPart != NULL) { ExtractBomOfXPart(pXPart); } //支架 AecDbHolder* pHolder = AecDbHolder::cast(pEnt); if (pHolder != NULL) { ExtractBomOfHolder(pHolder); } //吊架 AecDbHanger* pHanger = AecDbHanger::cast(pEnt); if (pHanger != NULL) { ExtractBomOfHanger(pHanger); } if (_tcscmp(pEnt->isA()->dxfName(), _T("AEC_PIPEHNGR")) == 0) { ExtractBomOfPipeHanger(pEnt); } //支墩 AecDbBossHolder* pBHolder = AecDbBossHolder::cast(pEnt); if (pBHolder != NULL) { ExtractBomOfBHolder(pBHolder); } //护栏 AecDbGuardBar* pGBar = AecDbGuardBar::cast(pEnt); if (pGBar != NULL) { ExtractBomOfGBar(pGBar); } //圆护爬梯 AecDbClimbStair* pCStair = AecDbClimbStair::cast(pEnt); if (pCStair != NULL) { ExtractBomOfCStair(pCStair); } //直梯子 AecDbLineStair* pLStair = AecDbLineStair::cast(pEnt); if (pLStair != NULL) { ExtractBomOfLStair(pLStair); } //圆弧梯 AecDbArcStair* pAStair = AecDbArcStair::cast(pEnt); if (pAStair != NULL) { ExtractBomOfAStair(pAStair); } //门窗 AecDbXOpening* pOpening = AecDbXOpening::cast(pEnt); if (pOpening != NULL) { ExtractBomOfOpening(pOpening); } //m_vtXGPipeBoms AecDbEwFlexiblePipe *pFxPipe = AecDbEwFlexiblePipe::cast(pEnt); if (pFxPipe != NULL) { ExtractBomOfFlexiblePipe(pFxPipe); } // 组合设备 AcDbBlockReference *pRef(AcDbBlockReference::cast(pEnt)); if (pEnt) { AecDbEwEquipment equ; if (CEquipmentLibraryDlg::ExtractBomOfZHEqu(pRef, equ)) { ExtractBomOfEqu(&equ); } else { // 其他东西 } } pEnt->close(); } } extern void GetFlange(AecDbEwPipe *pWpipe, AecDbEwFitting &ewFit, CUIISQLiteServer *pDb); //管线 void CBomReportExDlg::ExtractBomOfPipe(AecDbEwPipe* pPipe) { INIT_DB_AND_CURR_SYS(sqlDb, sCurrSys); //{_T("序号"),_T("名称"),_T("规格"),_T("材料"),_T("单位"),_T("数量"),_T("备注"),_T("H"),NULL}; int nNo = m_wndObjTreeList.GetCount() + 1; HTREEITEM hRoot = NULL; HTREEITEM hItem = NULL; bool bSummed = false; WPipe::PipeParam* pParam = pPipe->GetPipeParam(); if (pParam != NULL) { PipeBom pBom; memset(&pBom,0,sizeof(PipeBom)); pBom.nDn = (short)(pParam->m_dDN + 0.5); pBom.nD = (short)(pParam->m_dOD + 0.5); pBom.fThick = (float)(pParam->m_dThick); pBom.dLen = pPipe->GetLength(true) * m_dLenX; _tcscpy(pBom.szMertial,pParam->szMertial); _tcscpy(pBom.szRem,pParam->szDescr); int nConnectType = 0;//焊接0 承插1 螺纹2 法兰管3 5 pPipe->GetAt(PIPE_CONNECT, nConnectType); if (nConnectType == 3 || nConnectType == 5)//法兰管 { AecDbEwFitting ewFit; ewFit.SetAt(KEY_RUNTIME, eFlange); GetFlange(pPipe, ewFit, &sqlDb);//获取法兰规格 for (int j = 0; j < pPipe->GetFlangeCount(TRUE); j++) { AddFlangeBom(&ewFit); } } switch (pParam->m_app) { case WPipe::eButtweld: { _tcscpy(pBom.szApp, _T("焊接管线")); break; } case WPipe::eVictaulic: { _tcscpy(pBom.szApp, _T("螺纹管线")); break; } case WPipe::eSanitary: { _tcscpy(pBom.szApp, _T("承插管线")); break; } case WPipe::eFlange: { _tcscpy(pBom.szApp, _T("法兰管线")); break; } case WPipe::eGroove: { _tcscpy(pBom.szApp, _T("沟槽管线")); break; } case WPipe::eFlxJoin: { _tcscpy(pBom.szApp, _T("卡箍管线")); break; } default: break; } _tcscpy(pBom.szSN,pParam->szNo); _tcscpy(pBom.szLevel,pParam->szLevel); _tcscpy(pBom.szSys,pParam->szSys); //标准号 pPipe->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_STDNO, pBom.szStd); if (_tcslen(pBom.szStd) == 0) { CStringArray arInfs; CoreTools::SplitStrintToArray(pParam->szDescr, arInfs,_T(',')); if (arInfs.GetSize() >= 2) { _tcscpy(pBom.szStd, arInfs.GetAt(2)); } } if (m_lstSys.Find(pParam->szSys) == NULL) m_lstSys.AddTail(pParam->szSys); if (std::find(m_vtDns.begin(),m_vtDns.end(),pBom.nDn) == m_vtDns.end()) m_vtDns.push_back(pBom.nDn); pPipe->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_BOMNO,pBom.szBomNo); pPipe->objectId().handle().getIntoAsciiBuffer(pBom.szHndle); if (pBom.pszArHandles == NULL) { pBom.pszArHandles = new CStringArray; ((CStringArray*)pBom.pszArHandles)->Add(pBom.szHndle); } //如果是法兰管,统计法兰 if (pParam->m_app == WPipe::eFlange || pParam->m_app == WPipe::eGroove) { BomFlangeGet(pParam,pPipe->GetFlangeCount()); } //汇总加入 if (!m_vtPipeBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtPipeBoms.size();i++) { PipeBom& pb = m_vtPipeBoms.at(i); //等系统-材质-类型[焊接 螺纹 承插] if (_tcscmp(pb.szSys,pBom.szSys) == 0 && _tcscmp(pb.szMertial,pBom.szMertial) == 0 && _tcscmp(pb.szApp,pBom.szApp) == 0 ) { //等尺寸 -- Dxt if (pb.nD == pBom.nD && fabs(pb.fThick - pBom.fThick) < 1.e-2 ) { if (pb.pszArHandles == NULL) { pb.pszArHandles = new CStringArray; ((CStringArray*)pb.pszArHandles)->Add(pb.szHndle); } pb.dLen += pBom.dLen; ((CStringArray*)pb.pszArHandles)->Add(pBom.szHndle); if (pBom.pszArHandles != NULL) { delete pBom.pszArHandles; pBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtPipeBoms.push_back(pBom); } } else { m_vtPipeBoms.push_back(pBom); } delete pParam; } } /* * if (pParam != NULL) { WFlangeBom wfngBom; memset(&wfngBom,0,sizeof(WFlangeBom)); wfngBom.nDn = (short)(pParam->m_dDN + 0.5); wfngBom.nCount = 1; _tcscpy(wfngBom.szMertial,pParam->szMertialFit); pMap->GetAt(KEY_SN,wfngBom.szSN); _tcscpy(wfngBom.szLevel,pParam->szLevel); _tcscpy(wfngBom.szSys,pParam->szSys); pMap->GetAt(KEY_BOMNO,wfngBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wfngBom.szHndle); if (wfngBom.pszArHandles == NULL) { wfngBom.pszArHandles = new CStringArray; ((CStringArray*)wfngBom.pszArHandles)->Add(wfngBom.szHndle); } //汇总加入 if (!m_vtWFlangeBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtWFlangeBoms.size();i++) { WFlangeBom& wfb = m_vtWFlangeBoms.at(i); //等系统-材质 if (_tcscmp(wfb.szSys,wfngBom.szSys) == 0 && _tcscmp(wfb.szMertial,wfngBom.szMertial) == 0 ) { //等尺寸 -- Dxt if (wfb.nDn == wfngBom.nDn ) { if (wfb.pszArHandles == NULL) { wfb.pszArHandles = new CStringArray; ((CStringArray*)wfb.pszArHandles)->Add(wfb.szHndle); } wfb.nCount += 1; ((CStringArray*)wfb.pszArHandles)->Add(wfngBom.szHndle); if (wfngBom.pszArHandles != NULL) { delete wfngBom.pszArHandles; wfngBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWFlangeBoms.push_back(wfngBom); } } else { m_vtWFlangeBoms.push_back(wfngBom); } //对应垫片,由报表提供 //... } */ void CBomReportExDlg::AddFlangeBom(AecDbEwFitting *pWFit) { CString sKey, sGasketInf, sSpec, sMater,sMaterFt, sRem, sSys, sMat, sType; CString sDimtext, sLevel, sBoltInfs, sEndF, sStd, sSn, sText; pWFit->GetAt(PIPE_LEVEL, sLevel); pWFit->GetAt(PIPE_STDNO, sStd); pWFit->GetAt(PIPE_MATERIALFT, sMaterFt); pWFit->GetAt(PIPE_DESCR, sRem); pWFit->GetAt(KEY_SN, sSn); pWFit->GetAt(PIPE_SYS, sSys); double dDN = 0.0, dPress = 0.0; pWFit->GetAt(PID_PIPE_DPRESS, dPress); int nFitType = 0, nCountAdd = 0; pWFit->GetAt(KEY_RUNTIME, nFitType); WFlangeBom *pFlangeBom = NULL; WGasket *pWGasket = NULL; WBolt *pWBolt = NULL; WNut *pWNut = NULL; //接口法兰结构 CStringArray arVals; AcArray arInfs; pWFit->GetInterface(arInfs); bool bSummed = false; for (int i = 0; i < arInfs.length(); i++) { AecInterface &inf = arInfs.at(i); dDN = inf.dSize1; bSummed = false; if (nFitType == eFlange && i > 0)//只统计一次 { break; } //法兰 //端面三者其一 pWFit->GetAt(PIPE_FLANGF, sEndF); pWFit->GetAt(PIPE_FLANGF1, sEndF); pWFit->GetAt(PIPE_FLANGF2, sEndF); if (sEndF.Find(_T("RF")) != -1) sEndF = _T("RF"); if (sEndF.Find(_T("BE")) != -1) sEndF = _T("BE"); if (sEndF.Find(_T("FM")) != -1) sEndF = _T("FM"); if (sEndF.Find(_T("FF")) != -1) sEndF = _T("FF"); if (sEndF.Find(_T("RJ")) != -1) sEndF = _T("RJ"); if (sEndF.Find(_T("SC")) != -1) sEndF = _T("SC"); if (sEndF.Find(_T("BW")) != -1) sEndF = _T("BW"); if (sEndF.Find(_T("SW")) != -1) sEndF = _T("SW"); if (sEndF.Find(_T("FT")) != -1) sEndF = _T("FT"); if (sEndF.Find(_T("PE")) != -1) sEndF = _T("PE"); //法兰 DN100-PN1.6 RF GB/T9116.1-2000 sText.Format(_T("法兰 DN%d-PN%.1f %s %s"), (int)(dDN + 0.5), dPress, sEndF, sStd); sText.TrimRight(_T(' ')); WFlangeBom wfngBom; memset(&wfngBom, 0, sizeof(WFlangeBom)); wfngBom.nDn = (short)(dDN + 0.5); wfngBom.nCount = 1; _tcscpy(wfngBom.szMertial, sMaterFt); _tcscpy(wfngBom.szSN, sSn); _tcscpy(wfngBom.szLevel, sLevel); _tcscpy(wfngBom.szSys, sSys); _tcscpy(wfngBom.szDescr, sText); sText += sEndF; sText.TrimRight(_T(' ')); sText += _T(";"); sText += sStd; sText.TrimRight(_T(' ')); sText.TrimRight(_T(';')); pWFit->GetAt(KEY_BOMNO, wfngBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wfngBom.szHndle); if (wfngBom.pszArHandles == NULL) { wfngBom.pszArHandles = new CStringArray; ((CStringArray *)wfngBom.pszArHandles)->Add(wfngBom.szHndle); } for (int ii = 0; ii < m_vtWFlangeBoms.size(); ii++) { WFlangeBom &wfb = m_vtWFlangeBoms.at(ii); //等系统-材质 if (_tcscmp(wfb.szSys, wfngBom.szSys) == 0 && _tcscmp(wfb.szMertial, wfngBom.szMertial) == 0 && //_tcscmp(wfb.szDescr, sText) == 0 && wfb.nDn == wfngBom.nDn) { if (wfb.pszArHandles == NULL) { wfb.pszArHandles = new CStringArray; ((CStringArray *)wfb.pszArHandles)->Add(wfb.szHndle); } wfb.nCount += 1; ((CStringArray *)wfb.pszArHandles)->Add(wfngBom.szHndle); if (wfngBom.pszArHandles != NULL) { delete wfngBom.pszArHandles; wfngBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtWFlangeBoms.push_back(wfngBom); } bSummed = false; //垫片 sKey.Format(_T("%s%d"), PIPE_GASKETINF, i); if ( pWFit->GetAt(sKey, sGasketInf) || pWFit->GetAt(PIPE_GASKET, sGasketInf) ) { //公称直径#材质#压力]#垫片厚度#描述 arVals.RemoveAll(); CoreTools::SplitStrintToArray(sGasketInf, arVals, _T('#')); if (arVals.GetSize() == 1) { //NAS/1.0/3.0/NAS,NAS,HG/T 20606 CoreTools::SplitStrintToArray(sGasketInf, arVals, _T(',')); if (arVals.GetSize() > 0) { //NAS/1.0/3.0/NAS //arVals.GetAt(0); sStd = arVals.GetAt(arVals.GetSize() - 1); CStringArray arFs; CoreTools::SplitStrintToArray(arVals.GetAt(0), arFs, _T('/')); if (arFs.GetSize() > 2) { //公称直径#材质#压力#垫片厚度 sText.Format(_T("垫片 %d %s "), (short)(dDN + 0.5),arVals.GetAt(0)); WGasket wgast; memset(&wgast, 0, sizeof(WGasket)); wgast.nDn = (short)(dDN + 0.5); wgast.dt = _ttof(arVals.GetAt(3)); wgast.nCount = 1; _tcscpy(wgast.szSN, sSn); _tcscpy(wgast.szMertial, arFs.GetAt(0)); _tcscpy(wgast.szSys, sSys); _tcscpy(wgast.szLevel, sLevel); _tcscpy(wgast.szDescr, sText); _tcscpy(wgast.szStd, sStd); wgast.pszArHandles = NULL; for (ii = 0; ii < m_vtWGasketBoms.size(); ii++) { WGasket &gst = m_vtWGasketBoms.at(ii); if (_tcscmp(gst.szSys, wgast.szSys) == 0 && _tcscmp(gst.szDescr, wgast.szDescr) == 0) { gst.nCount += 1; bSummed = true; break; } } if (!bSummed) { m_vtWGasketBoms.push_back(wgast); } } } arVals.RemoveAll(); } if (arVals.GetCount() >= 5) { sSpec = arVals.GetAt(4); sMater = arVals.GetAt(1); sRem = arVals.GetAt(4); sStd = arVals.GetAt(arVals.GetSize() - 1); //公称直径#材质#压力#垫片厚度 sText.Format(_T("垫片 %s %s %s %s"), arVals.GetAt(0), arVals.GetAt(1), arVals.GetAt(2), arVals.GetAt(3)); WGasket wgast; memset(&wgast, 0, sizeof(WGasket)); wgast.nDn = (short)(dDN + 0.5); wgast.dt = _ttof(arVals.GetAt(3)); wgast.nCount = 1; _tcscpy(wgast.szSN, sSn); _tcscpy(wgast.szMertial, sMater); _tcscpy(wgast.szSys, sSys); _tcscpy(wgast.szLevel, sLevel); _tcscpy(wgast.szDescr, sText); _tcscpy(wgast.szStd, sStd); wgast.pszArHandles = NULL; for (ii = 0;ii < m_vtWGasketBoms.size();ii++) { WGasket &gst = m_vtWGasketBoms.at(ii); if (_tcscmp(gst.szSys, wgast.szSys) == 0 && _tcscmp(gst.szDescr, wgast.szDescr) == 0) { gst.nCount += 1; bSummed = true; break; } } if (!bSummed) { m_vtWGasketBoms.push_back(wgast); } } else { double dPre = 1.0, dGst = 0; sMater = _T(""); pWFit->GetAt(PIPE_GASKETM, sMater); pWFit->GetAt(PIPE_PRESSURE, dPre); pWFit->GetAt(PIPE_GASKET, dGst); pWFit->GetAt(PIPE_GASKETDSC, sRem); if (!sMater.IsEmpty()) { //公称直径#材质#压力#垫片厚度 sText.Format(_T("垫片 %d %s %.1f %.1f"), int(0.5 + dDN), sMater, dPre, dGst); WGasket wgast; memset(&wgast, 0, sizeof(WGasket)); wgast.nDn = (short)(dDN + 0.5); wgast.dt = dGst; wgast.nCount = 1; _tcscpy(wgast.szSN, sSn); _tcscpy(wgast.szMertial, sMater); _tcscpy(wgast.szSys, sSys); _tcscpy(wgast.szLevel, sLevel); _tcscpy(wgast.szDescr, sText); _tcscpy(wgast.szStd, sStd); wgast.pszArHandles = NULL; for (ii = 0; ii < m_vtWGasketBoms.size(); ii++) { WGasket &gst = m_vtWGasketBoms.at(ii); if (_tcscmp(gst.szSys, wgast.szSys) == 0 && _tcscmp(gst.szDescr, wgast.szDescr) == 0) { gst.nCount += 1; bSummed = true; break; } } if (!bSummed) { m_vtWGasketBoms.push_back(wgast); } } } } else { double dPre = 1.0, dGst = 0; pWFit->GetAt(PIPE_GASKETM, sMater); pWFit->GetAt(PIPE_PRESSURE, dPre); pWFit->GetAt(PIPE_GASKET, dGst); pWFit->GetAt(PIPE_GASKETDSC, sRem); //公称直径#材质#压力#垫片厚度 sText.Format(_T("垫片 %d %s %.1f %.1f"), int(0.5+dDN), sMater, dPre, dGst); WGasket wgast; memset(&wgast, 0, sizeof(WGasket)); wgast.nDn = (short)(dDN + 0.5); wgast.dt = _ttof(arVals.GetAt(3)); wgast.nCount = 1; _tcscpy(wgast.szSN, sSn); _tcscpy(wgast.szMertial, sMater); _tcscpy(wgast.szSys, sSys); _tcscpy(wgast.szLevel, sLevel); _tcscpy(wgast.szDescr, sText); _tcscpy(wgast.szStd, sStd); wgast.pszArHandles = NULL; for (ii = 0; ii < m_vtWGasketBoms.size(); ii++) { WGasket &gst = m_vtWGasketBoms.at(ii); if (_tcscmp(gst.szSys, wgast.szSys) == 0 && _tcscmp(gst.szDescr, wgast.szDescr) == 0) { gst.nCount += 1; bSummed = true; break; } } if (!bSummed) { m_vtWGasketBoms.push_back(wgast); } } bSummed = false; //螺栓 sKey.Format(_T("%s%d"), PIPE_BOLTINF, i); if (pWFit->GetAt(sKey, sBoltInfs)) { //[类型],[材质],[标准号],[描述],螺栓规格,螺栓长度,数量 arVals.RemoveAll(); CoreTools::SplitStrintToArray(sBoltInfs, arVals, _T('#')); if (arVals.GetSize() >= 7) { //专用级双头螺柱 35CrMoA M20x105 sText.Format(_T("螺柱 %s %s %sx%s"), arVals.GetAt(0), arVals.GetAt(1), arVals.GetAt(4), arVals.GetAt(5)); sSpec = arVals.GetAt(3); sMat = arVals.GetAt(1); sRem = arVals.GetAt(3); sStd = arVals.GetAt(arVals.GetSize() - 1); nCountAdd = _ttoi(arVals.GetAt(6)); WBolt wbolt; memset(&wbolt, 0, sizeof(WBolt)); wbolt.nCount = nCountAdd; _tcscpy(wbolt.szSN, sSn); _tcscpy(wbolt.szType, arVals.GetAt(0)); _tcscpy(wbolt.szSpec, arVals.GetAt(4)); _tcscpy(wbolt.szMertial, arVals.GetAt(1)); _tcscpy(wbolt.szLevel, sLevel); _tcscpy(wbolt.szSys, sSys); _tcscpy(wbolt.szDescr, arVals.GetAt(3));//描述 _tcscpy(wbolt.szStd, sStd); wbolt.pszArHandles = NULL; for (int ii = 0;ii < m_vtWBoltBoms.size();ii++) { WBolt &wblt = m_vtWBoltBoms.at(ii); if (_tcscmp(wblt.szSys, wbolt.szSys) == 0 && _tcscmp(wblt.szDescr, wbolt.szDescr) == 0) { wblt.nCount += nCountAdd; bSummed = true; break; } } if (!bSummed) { m_vtWBoltBoms.push_back(wbolt); } bSummed = false; //螺母 5CrMoA M20 sText.Format(_T("%s螺母 %s %s"), arVals.GetAt(0), arVals.GetAt(1), arVals.GetAt(4)); WNut wnt; memset(&wnt, 0, sizeof(WNut)); wnt.nCount = nCountAdd; sType.Format(_T("%s螺母"), arVals.GetAt(0)); _tcscpy(wnt.szSN, sSn); _tcscpy(wnt.szType, sType); _tcscpy(wnt.szSpec, arVals.GetAt(4));//M20 _tcscpy(wnt.szMertial, arVals.GetAt(1)); _tcscpy(wnt.szLevel, sLevel); _tcscpy(wnt.szSys, sSys); _tcscpy(wnt.szDescr, sText); _tcscpy(wnt.szStd, sStd); for (int ii = 0;ii < m_vtWNutBoms.size();ii++) { WNut &wt = m_vtWNutBoms.at(ii); if (_tcscmp(wt.szSys, wnt.szSys) == 0 && _tcscmp(wt.szDescr, wnt.szDescr) == 0) { wt.nCount += nCountAdd; bSummed = true; break; } } if (!bSummed) { m_vtWNutBoms.push_back(wnt); } } } } } //管件 void CBomReportExDlg::ExtractBomOfEwFit(AecDbEwFitting* pWFit) { int nFitType = 0,nKind = 0; AecDbObjXDataMap* pMap = pWFit->GetSpecialtyData(AcDb::kForRead); pMap->GetAt(KEY_RUNTIME,nFitType); double dAng = 0.0,dDn = 0.0,dD = 0.0,dEDn = 0.0,dED = 0.0,dVal = 0.0; double dL = 0.0,dB = 0.0,dE = 0.0,dM = 0.0, dL1 = 0.0; CString sTemp,sSpec,sType,sStdNo, sMater, sSys; CStringArray arGasketG; bool bSummed = false; AcGeVector3d vtOff; WPipe::PipeParam* pParam = pWFit->GetPipeParam(); if (m_lstSys.Find(pParam->szSys) == NULL) m_lstSys.AddTail(pParam->szSys); short nDN = (short)(pParam->m_dDN + 0.5); if (std::find(m_vtDns.begin(),m_vtDns.end(),nDN) == m_vtDns.end()) m_vtDns.push_back(nDN); int nConnectType = 0;//焊接0 承插1 螺纹2 法兰管3 pMap->GetAt(PIPE_CONNECT, nConnectType); if (nConnectType == 3 || nFitType == eFlange)//有法兰 { AddFlangeBom(pWFit); } switch(nFitType) { case eElbow: { pMap->GetAt(PIPE_ELBOWANG,dAng); AcDbArc* pArc = pWFit->GetElbowArc(); if (pArc != NULL) { double dE = 0,dL = 0; pArc->getEndParam(dE); pArc->getDistAtParam(dE,dL); dAng = dL / pArc->radius() * 180.0 / 3.1415926; } ElbowBom eBom; memset(&eBom,0,sizeof(ElbowBom)); if (pParam != NULL) { eBom.nDn = (short)(pParam->m_dDN + 0.5); eBom.nD = (short)(pParam->m_dOD + 0.5); eBom.nAngle = (short)(dAng + 0.5); eBom.fThick = (float)(pParam->m_dThick); eBom.fRRatio = (float)(pParam->m_dRRatio); eBom.nCount = 1; _tcscpy(eBom.szMertial,pParam->szMertialFit); pMap->GetAt(KEY_SN,eBom.szSN); _tcscpy(eBom.szLevel,pParam->szLevel); _tcscpy(eBom.szSys,pParam->szSys); pMap->GetAt(PIPE_STDNO, eBom.szStd); switch (pParam->m_app) { case WPipe::eButtweld: { if (pWFit->IsPlasticsMat()) _tcscpy(eBom.szApp, _T("弯头")); else _tcscpy(eBom.szApp, _T(" 焊接管弯头")); break; } case WPipe::eVictaulic: { _tcscpy(eBom.szApp, _T(" 螺纹管弯头")); break; } case WPipe::eSanitary: { _tcscpy(eBom.szApp, _T(" 承插管弯头")); break; } case WPipe::eFlange: { _tcscpy(eBom.szApp, _T(" 法兰管弯头")); break; } case WPipe::eGroove: { _tcscpy(eBom.szApp, _T(" 沟槽弯头")); break; } case WPipe::eFlxJoin: { _tcscpy(eBom.szApp, _T(" 卡箍弯头")); break; } default: break; } //如果是法兰管,统计法兰 if (pParam->m_app == WPipe::eFlange || pParam->m_app == WPipe::eGroove) { BomFlangeGet(pParam,2); } pMap->GetAt(KEY_BOMNO,eBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(eBom.szHndle); if (eBom.pszArHandles == NULL) { eBom.pszArHandles = new CStringArray; ((CStringArray*)eBom.pszArHandles)->Add(eBom.szHndle); } //汇总加入 if (!m_vtElbowBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtElbowBoms.size();i++) { ElbowBom& eb = m_vtElbowBoms.at(i); //等系统-材质 if (_tcscmp(eb.szSys,eBom.szSys) == 0 && _tcscmp(eb.szMertial,eBom.szMertial) == 0 && _tcscmp(eb.szApp,eBom.szApp) == 0 ) { //等尺寸 -- Dxt if (eb.nD == eBom.nD && fabs(eb.fThick - eBom.fThick) < 1.e-2f && eb.nAngle == eBom.nAngle ) { if (eb.pszArHandles == NULL) { eb.pszArHandles = new CStringArray; ((CStringArray*)eb.pszArHandles)->Add(eb.szHndle); } eb.nCount += 1; ((CStringArray*)eb.pszArHandles)->Add(eBom.szHndle); if (eBom.pszArHandles != NULL) { delete eBom.pszArHandles; eBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtElbowBoms.push_back(eBom); } } else { m_vtElbowBoms.push_back(eBom); } } break; } case eReduceElbow: { pMap->GetAt(PIPE_ELBOWANG, dAng); AcDbArc *pArc = pWFit->GetElbowArc(); if (pArc != NULL) { double dE = 0, dL = 0; pArc->getEndParam(dE); pArc->getDistAtParam(dE, dL); dAng = dL / pArc->radius() * 180.0 / 3.1415926; } RElbowBom eRBom; memset(&eRBom, 0, sizeof(RElbowBom)); eRBom.nCount = 1; pMap->GetAt(PIPE_DN, dDn); pMap->GetAt(PIPE_OD, dD); pMap->GetAt(PIPE_EDN, dEDn); pMap->GetAt(PIPE_EOD, dED); eRBom.nDn = (short)(__max(dDn, dEDn) + 0.5); eRBom.nD = (short)(__max(dD, dED) + 0.5); eRBom.nTDn = (short)(__min(dDn, dEDn) + 0.5); eRBom.nTD = (short)(__min(dD, dED) + 0.5); eRBom.fThick = (float)(pParam->m_dThick); eRBom.nAngle = (int)(dAng + 0.5); eRBom.fRRatio = (float)(pParam->m_dRRatio); pMap->GetAt(KEY_Length, dVal); eRBom.nLen = (int)(dVal + 0.5); _tcscpy(eRBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, eRBom.szSN); _tcscpy(eRBom.szLevel, pParam->szLevel); _tcscpy(eRBom.szSys, pParam->szSys); _tcscpy(eRBom.szApp, _T("变径弯头")); pMap->GetAt(PIPE_STDNO, eRBom.szStd); pMap->GetAt(KEY_BOMNO, eRBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(eRBom.szHndle); if (eRBom.pszArHandles == NULL) { eRBom.pszArHandles = new CStringArray; ((CStringArray *)eRBom.pszArHandles)->Add(eRBom.szHndle); } //汇总加入 if (!m_vtRElbowBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtRElbowBoms.size(); i++) { RElbowBom &eb = m_vtRElbowBoms.at(i); //等系统-材质 if (_tcscmp(eb.szSys, eRBom.szSys) == 0 && _tcscmp(eb.szMertial, eRBom.szMertial) == 0 && _tcscmp(eb.szApp, eRBom.szApp) == 0) { //等尺寸 -- Dxt if ( eb.nDn == eRBom.nDn && eb.nTDn == eRBom.nTDn && eb.nAngle == eRBom.nAngle && eb.nLen == eRBom.nLen && fabs(eb.fThick - eRBom.fThick) < 1.e-2f) { if (eb.pszArHandles == NULL) { eb.pszArHandles = new CStringArray; ((CStringArray *)eb.pszArHandles)->Add(eb.szHndle); } eb.nCount += 1; ((CStringArray *)eb.pszArHandles)->Add(eRBom.szHndle); if (eRBom.pszArHandles != NULL) { delete eRBom.pszArHandles; eRBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtRElbowBoms.push_back(eRBom); } } } else { m_vtRElbowBoms.push_back(eRBom); } break; } case eReduce: { ReducerBom rBom; memset(&rBom,0,sizeof(ReducerBom)); rBom.nCount = 1; pMap->GetAt(PIPE_DN,dDn); pMap->GetAt(PIPE_OD,dD); pMap->GetAt(PIPE_EDN,dEDn); pMap->GetAt(PIPE_EOD,dED); vtOff.set(0, 0, 0); pMap->GetAt(KEY_OFFSET, vtOff); if (!vtOff.isZeroLength()) { rBom.nOffset = 1; } rBom.nDn = (short)(__max(dDn,dEDn) + 0.5); rBom.nD = (short)(__max(dD,dED) + 0.5); rBom.nTDn = (short)(__min(dDn,dEDn) + 0.5); rBom.nTD = (short)(__min(dD,dED) + 0.5); rBom.fThick = (float)(pParam->m_dThick); pMap->GetAt(KEY_Length,dVal); rBom.nLen = (int)(dVal + 0.5); _tcscpy(rBom.szMertial,pParam->szMertialFit); pMap->GetAt(KEY_SN,rBom.szSN); _tcscpy(rBom.szLevel,pParam->szLevel); _tcscpy(rBom.szSys,pParam->szSys); pMap->GetAt(PIPE_STDNO, rBom.szStd); pMap->GetAt(KEY_BOMNO,rBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(rBom.szHndle); if (rBom.pszArHandles == NULL) { rBom.pszArHandles = new CStringArray; ((CStringArray*)rBom.pszArHandles)->Add(rBom.szHndle); } switch (pParam->m_app) { case WPipe::eButtweld: { if (pWFit->IsPlasticsMat()) _tcscpy(rBom.szApp, _T("大小头")); else _tcscpy(rBom.szApp, _T(" 焊接管变径")); break; } case WPipe::eVictaulic: { _tcscpy(rBom.szApp, _T(" 螺纹管变径")); break; } case WPipe::eSanitary: { _tcscpy(rBom.szApp, _T(" 承插管变径")); break; } case WPipe::eFlange: { _tcscpy(rBom.szApp, _T(" 法兰管变径")); break; } case WPipe::eGroove: { _tcscpy(rBom.szApp, _T(" 沟槽管变径")); break; } case WPipe::eFlxJoin: { _tcscpy(rBom.szApp, _T(" 卡箍管变径")); break; } default: break; } //如果是法兰管,统计法兰 if (pParam->m_app == WPipe::eFlange || pParam->m_app == WPipe::eGroove ) { WPipe::PipeParam param1; memcpy(¶m1, pParam, sizeof(WPipe::PipeParam)); BomFlangeGet(¶m1, 1); param1.m_dDN = dEDn; BomFlangeGet(¶m1, 1); } //汇总加入 if (!m_vtReducerBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtReducerBoms.size();i++) { ReducerBom& rb = m_vtReducerBoms.at(i); //等系统-材质 if (_tcscmp(rb.szSys,rBom.szSys) == 0 && _tcscmp(rb.szMertial,rBom.szMertial) == 0 && _tcscmp(rb.szApp, rBom.szApp) == 0) { //等尺寸 -- Dxt if (rb.nD == rBom.nD && fabs(rb.fThick - rBom.fThick) < 1.e-2 && rb.nTD == rBom.nTD) { if (rb.pszArHandles == NULL) { rb.pszArHandles = new CStringArray; ((CStringArray*)rb.pszArHandles)->Add(rb.szHndle); } rb.nCount += 1; ((CStringArray*)rb.pszArHandles)->Add(rBom.szHndle); if (rBom.pszArHandles != NULL) { delete rBom.pszArHandles; rBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtReducerBoms.push_back(rBom); } } else { m_vtReducerBoms.push_back(rBom); } break; } case eTee: { //规格 pMap->GetAt(PIPE_DN,dDn); pMap->GetAt(PIPE_OD,dD); pMap->GetAt(PIPE_TDN,dEDn); pMap->GetAt(PIPE_TOD,dED); pMap->GetAt(KEY_L,dL); pMap->GetAt(KEY_L1, dL1); if (dL1 > 1.e-6) { dL -= dL1; } else { dL *= 0.5; dL1 = dL; } pMap->GetAt(KEY_T,dB); if (pParam != NULL) { TeeBom tBom; memset(&tBom,0,sizeof(TeeBom)); tBom.nDn = (short)(dDn + 0.5); tBom.nD = (short)(dD + 0.5); tBom.nTDn = (short)(dEDn + 0.5); tBom.nTD = (short)(dED + 0.5); tBom.nL = (short)(dL + 0.5); tBom.nL1 = (short)(dL1 + 0.5); tBom.nB = (short)(dB + 0.5); tBom.fThick = (float)pParam->m_dThick; tBom.nCount = 1; _tcscpy(tBom.szMertial,pParam->szMertialFit); pMap->GetAt(KEY_SN,tBom.szSN); _tcscpy(tBom.szLevel,pParam->szLevel); _tcscpy(tBom.szSys,pParam->szSys); pMap->GetAt(PIPE_STDNO, tBom.szStd); pMap->GetAt(KEY_BOMNO,tBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(tBom.szHndle); if (tBom.pszArHandles == NULL) { tBom.pszArHandles = new CStringArray; ((CStringArray*)tBom.pszArHandles)->Add(tBom.szHndle); } switch (pParam->m_app) { case WPipe::eButtweld: { if (pWFit->IsPlasticsMat()) _tcscpy(tBom.szApp, _T(" 三通")); else _tcscpy(tBom.szApp, _T(" 焊接管三通")); break; } case WPipe::eVictaulic: { _tcscpy(tBom.szApp, _T(" 螺纹管三通")); break; } case WPipe::eSanitary: { _tcscpy(tBom.szApp, _T(" 承插管三通")); break; } case WPipe::eFlange: { _tcscpy(tBom.szApp, _T(" 法兰管三通")); break; } case WPipe::eGroove: { _tcscpy(tBom.szApp, _T(" 沟槽三通")); break; } case WPipe::eFlxJoin: { _tcscpy(tBom.szApp, _T(" 卡箍三通")); break; } default: break; } //如果是法兰管,统计法兰 if (pParam->m_app == WPipe::eFlange || pParam->m_app == WPipe::eGroove) { WPipe::PipeParam param1; memcpy(¶m1, pParam, sizeof(WPipe::PipeParam)); BomFlangeGet(¶m1, 2); param1.m_dDN = dEDn; BomFlangeGet(¶m1, 1); } //汇总加入 if (!m_vtTeeBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtTeeBoms.size();i++) { TeeBom& tb = m_vtTeeBoms.at(i); //等系统-材质 if (_tcscmp(tb.szSys,tBom.szSys) == 0 && _tcscmp(tb.szMertial,tBom.szMertial) == 0 && _tcscmp(tb.szApp, tBom.szApp) == 0) { //等尺寸 -- Dxt if (tb.nD == tBom.nD && fabs(tb.fThick - tBom.fThick) < 1.e-2 && tb.nTD == tBom.nTD) { if (tb.pszArHandles == NULL) { tb.pszArHandles = new CStringArray; ((CStringArray*)tb.pszArHandles)->Add(tb.szHndle); } tb.nCount += 1; ((CStringArray*)tb.pszArHandles)->Add(tBom.szHndle); if (tBom.pszArHandles != NULL) { delete tBom.pszArHandles; tBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtTeeBoms.push_back(tBom); } } else { m_vtTeeBoms.push_back(tBom); } } break; } case eLateral: { pMap->GetAt(PIPE_DN,dDn); pMap->GetAt(PIPE_OD,dD); pMap->GetAt(PIPE_TDN,dEDn); pMap->GetAt(PIPE_TOD,dED); pMap->GetAt(PIPE_E,dE); pMap->GetAt(PIPE_M,dM); pMap->GetAt(PIPE_B,dB); if (pParam != NULL) { LTeeBom ltBom; memset(<Bom,0,sizeof(LTeeBom)); ltBom.nDn = (short)(dDn + 0.5); ltBom.nD = (short)(dD + 0.5); ltBom.nTDn = (short)(dEDn + 0.5); ltBom.nTD = (short)(dED + 0.5); ltBom.nE = (short)(dE + 0.5); ltBom.nM = (short)(dM + 0.5); ltBom.nB = (short)(dB + 0.5); ltBom.fThick = (float)pParam->m_dThick; ltBom.nCount = 1; _tcscpy(ltBom.szMertial,pParam->szMertialFit); pMap->GetAt(KEY_SN,ltBom.szSN); _tcscpy(ltBom.szLevel,pParam->szLevel); _tcscpy(ltBom.szSys,pParam->szSys); pMap->GetAt(PIPE_STDNO, ltBom.szStd); pMap->GetAt(KEY_BOMNO,ltBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(ltBom.szHndle); if (ltBom.pszArHandles == NULL) { ltBom.pszArHandles = new CStringArray; ((CStringArray*)ltBom.pszArHandles)->Add(ltBom.szHndle); } switch (pParam->m_app) { case WPipe::eButtweld: { _tcscpy(ltBom.szApp, _T("焊接管L三通")); break; } case WPipe::eVictaulic: { _tcscpy(ltBom.szApp, _T("螺纹管L三通")); break; } case WPipe::eSanitary: { _tcscpy(ltBom.szApp, _T("承插管L三通")); break; } case WPipe::eFlange: { _tcscpy(ltBom.szApp, _T("法兰管L三通")); break; } case WPipe::eGroove: { _tcscpy(ltBom.szApp, _T(" 沟槽L三通")); break; } case WPipe::eFlxJoin: { _tcscpy(ltBom.szApp, _T(" 卡箍L三通")); break; } default: break; } //如果是法兰管,统计法兰 if (pParam->m_app == WPipe::eFlange || pParam->m_app == WPipe::eGroove) { WPipe::PipeParam param1; memcpy(¶m1, pParam, sizeof(WPipe::PipeParam)); BomFlangeGet(¶m1, 2); param1.m_dDN = dEDn; BomFlangeGet(¶m1, 1); } //汇总加入 if (!m_vtLTeeBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtLTeeBoms.size();i++) { LTeeBom& ltb = m_vtLTeeBoms.at(i); //等系统-材质 if (_tcscmp(ltb.szSys,ltBom.szSys) == 0 && _tcscmp(ltb.szMertial,ltBom.szMertial) == 0 && _tcscmp(ltb.szApp, ltBom.szApp) == 0) { //等尺寸 -- Dxt if (ltb.nD == ltBom.nD && fabs(ltb.fThick - ltBom.fThick) < 1.e-2 && ltb.nTD == ltBom.nTD) { if (ltb.pszArHandles == NULL) { ltb.pszArHandles = new CStringArray; ((CStringArray*)ltb.pszArHandles)->Add(ltb.szHndle); } ltb.nCount += 1; ((CStringArray*)ltb.pszArHandles)->Add(ltBom.szHndle); if (ltBom.pszArHandles != NULL) { delete ltBom.pszArHandles; ltBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtLTeeBoms.push_back(ltBom); } } else { m_vtLTeeBoms.push_back(ltBom); } } break; } case eWye: { //规格 pMap->GetAt(PIPE_DN,dDn); pMap->GetAt(PIPE_OD,dD); pMap->GetAt(PIPE_TDN,dEDn); pMap->GetAt(PIPE_TOD,dED); pMap->GetAt(PIPE_M,dM); pMap->GetAt(PIPE_B,dB); if (pParam != NULL) { WyeBom wyeBom; memset(&wyeBom,0,sizeof(WyeBom)); wyeBom.nDn = (short)(dDn + 0.5); wyeBom.nD = (short)(dD + 0.5); wyeBom.nTDn = (short)(dEDn + 0.5); wyeBom.nTD = (short)(dED + 0.5); wyeBom.nM = (short)(dM + 0.5); wyeBom.nB = (short)(dB + 0.5); wyeBom.fThick = (float)pParam->m_dThick; wyeBom.nCount = 1; _tcscpy(wyeBom.szMertial,pParam->szMertialFit); pMap->GetAt(KEY_SN,wyeBom.szSN); _tcscpy(wyeBom.szLevel,pParam->szLevel); _tcscpy(wyeBom.szSys,pParam->szSys); pMap->GetAt(PIPE_STDNO, wyeBom.szStd); pMap->GetAt(KEY_BOMNO,wyeBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wyeBom.szHndle); if (wyeBom.pszArHandles == NULL) { wyeBom.pszArHandles = new CStringArray; ((CStringArray*)wyeBom.pszArHandles)->Add(wyeBom.szHndle); } switch (pParam->m_app) { case WPipe::eButtweld: { _tcscpy(wyeBom.szApp, _T("焊接管Y三通")); break; } case WPipe::eVictaulic: { _tcscpy(wyeBom.szApp, _T("螺纹管Y三通")); break; } case WPipe::eSanitary: { _tcscpy(wyeBom.szApp, _T("承插管Y三通")); break; } case WPipe::eFlange: { _tcscpy(wyeBom.szApp, _T("法兰管Y三通")); break; } case WPipe::eGroove: { _tcscpy(wyeBom.szApp, _T(" 沟槽Y三通")); break; } case WPipe::eFlxJoin: { _tcscpy(wyeBom.szApp, _T(" 卡箍Y三通")); break; } default: break; } //如果是法兰管,统计法兰 if (pParam->m_app == WPipe::eFlange || pParam->m_app == WPipe::eGroove) { WPipe::PipeParam param1; memcpy(¶m1, pParam, sizeof(WPipe::PipeParam)); BomFlangeGet(¶m1, 1); param1.m_dDN = dEDn; BomFlangeGet(¶m1, 2); } //汇总加入 if (!m_vtWyeBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtWyeBoms.size();i++) { WyeBom& wyb = m_vtWyeBoms.at(i); //等系统-材质 if (_tcscmp(wyb.szSys,wyeBom.szSys) == 0 && _tcscmp(wyb.szMertial,wyeBom.szMertial) == 0 && _tcscmp(wyb.szApp, wyeBom.szApp ) == 0) { //等尺寸 -- Dxt if (wyb.nD == wyeBom.nD && fabs(wyb.fThick - wyeBom.fThick) < 1.e-2 && wyb.nTD == wyeBom.nTD) { if (wyb.pszArHandles == NULL) { wyb.pszArHandles = new CStringArray; ((CStringArray*)wyb.pszArHandles)->Add(wyb.szHndle); } wyb.nCount += 1; ((CStringArray*)wyb.pszArHandles)->Add(wyeBom.szHndle); if (wyeBom.pszArHandles != NULL) { delete wyeBom.pszArHandles; wyeBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWyeBoms.push_back(wyeBom); } } else { m_vtWyeBoms.push_back(wyeBom); } } break; } case eCross: { //规格 pMap->GetAt(PIPE_DN,dDn); pMap->GetAt(PIPE_OD,dD); pMap->GetAt(PIPE_TDN,dEDn); pMap->GetAt(PIPE_TOD,dED); pMap->GetAt(KEY_L,dM); pMap->GetAt(KEY_T,dB); if (pParam != NULL) { CrossBom crsBom; memset(&crsBom,0,sizeof(CrossBom)); crsBom.nDn = (short)(dDn + 0.5); crsBom.nD = (short)(dD + 0.5); crsBom.nTDn = (short)(dEDn + 0.5); crsBom.nTD = (short)(dED + 0.5); crsBom.nL = (short)(dM + 0.5); crsBom.nCount = 1; crsBom.fThick = (float)pParam->m_dThick; _tcscpy(crsBom.szMertial,pParam->szMertialFit); pMap->GetAt(KEY_SN,crsBom.szSN); _tcscpy(crsBom.szLevel,pParam->szLevel); _tcscpy(crsBom.szSys,pParam->szSys); pMap->GetAt(PIPE_STDNO, crsBom.szStd); pMap->GetAt(KEY_BOMNO,crsBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(crsBom.szHndle); if (crsBom.pszArHandles == NULL) { crsBom.pszArHandles = new CStringArray; ((CStringArray*)crsBom.pszArHandles)->Add(crsBom.szHndle); } switch (pParam->m_app) { case WPipe::eButtweld: { if (pWFit->IsPlasticsMat()) _tcscpy(crsBom.szApp, _T("四通")); else _tcscpy(crsBom.szApp, _T("焊接管四通")); break; } case WPipe::eVictaulic: { _tcscpy(crsBom.szApp, _T("螺纹管四通")); break; } case WPipe::eSanitary: { _tcscpy(crsBom.szApp, _T("承插管四通")); break; } case WPipe::eFlange: { _tcscpy(crsBom.szApp, _T("法兰管四通")); break; } case WPipe::eGroove: { _tcscpy(crsBom.szApp, _T(" 沟槽四通")); break; } case WPipe::eFlxJoin: { _tcscpy(crsBom.szApp, _T(" 卡箍四通")); break; } default: break; } //如果是法兰管,统计法兰 if (pParam->m_app == WPipe::eFlange || pParam->m_app == WPipe::eGroove) { WPipe::PipeParam param1; memcpy(¶m1, pParam, sizeof(WPipe::PipeParam)); BomFlangeGet(¶m1, 2); param1.m_dDN = dEDn; BomFlangeGet(¶m1, 2); } //汇总加入 if (!m_vtCrossBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtCrossBoms.size();i++) { CrossBom& crb = m_vtCrossBoms.at(i); //等系统-材质 if (_tcscmp(crb.szSys,crsBom.szSys) == 0 && _tcscmp(crb.szMertial,crsBom.szMertial) == 0 && _tcscmp(crb.szApp,crsBom.szApp) == 0 ) { //等尺寸 -- Dxt if (crb.nD == crsBom.nD && fabs(crb.fThick - crsBom.fThick) < 1.e-2 && crb.nTD == crsBom.nTD) { if (crb.pszArHandles == NULL) { crb.pszArHandles = new CStringArray; ((CStringArray*)crb.pszArHandles)->Add(crb.szHndle); } crb.nCount += 1; ((CStringArray*)crb.pszArHandles)->Add(crsBom.szHndle); if (crsBom.pszArHandles != NULL) { delete crsBom.pszArHandles; crsBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtCrossBoms.push_back(crsBom); } } else { m_vtCrossBoms.push_back(crsBom); } } break; } case eWcap: { WCapBom wcapBom; memset(&wcapBom,0,sizeof(WCapBom)); pMap->GetAt(KEY_L,dM); if (pParam != NULL) { wcapBom.nDn = (short)(pParam->m_dDN + 0.5); wcapBom.nD = (short)(pParam->m_dD + 0.5); wcapBom.nL = (short)(dM + 0.5); wcapBom.fThick = (float)(pParam->m_dThick + 0.5); wcapBom.nCount = 1; _tcscpy(wcapBom.szMertial,pParam->szMertialFit); pMap->GetAt(KEY_SN,wcapBom.szSN); _tcscpy(wcapBom.szLevel,pParam->szLevel); _tcscpy(wcapBom.szSys,pParam->szSys); pMap->GetAt(PIPE_STDNO, wcapBom.szStd); pMap->GetAt(KEY_BOMNO,wcapBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wcapBom.szHndle); if (wcapBom.pszArHandles == NULL) { wcapBom.pszArHandles = new CStringArray; ((CStringArray*)wcapBom.pszArHandles)->Add(wcapBom.szHndle); } switch (pParam->m_app) { case WPipe::eButtweld: { if (pWFit->IsPlasticsMat()) _tcscpy(wcapBom.szApp, _T("闷盖")); else _tcscpy(wcapBom.szApp, _T("堵头")); break; } case WPipe::eVictaulic: { _tcscpy(wcapBom.szApp, _T("螺纹管堵头")); break; } case WPipe::eSanitary: { _tcscpy(wcapBom.szApp, _T("承插管堵头")); break; } case WPipe::eFlange: { _tcscpy(wcapBom.szApp, _T("法兰管堵头")); break; } case WPipe::eGroove: { _tcscpy(wcapBom.szApp, _T(" 沟槽堵头")); break; } case WPipe::eFlxJoin: { _tcscpy(wcapBom.szApp, _T("卡箍堵头")); break; } default: break; } //汇总加入 if (!m_vtWCapBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtWCapBoms.size();i++) { WCapBom& wcpb = m_vtWCapBoms.at(i); //等系统-材质 if (_tcscmp(wcpb.szSys,wcapBom.szSys) == 0 && _tcscmp(wcpb.szMertial,wcapBom.szMertial) == 0 && _tcscmp(wcpb.szApp,wcapBom.szApp) == 0 ) { //等尺寸 -- Dxt if (wcpb.nD == wcapBom.nD && fabs(wcpb.fThick - wcapBom.fThick) < 1.e-2 ) { if (wcpb.pszArHandles == NULL) { wcpb.pszArHandles = new CStringArray; ((CStringArray*)wcpb.pszArHandles)->Add(wcpb.szHndle); } wcpb.nCount += 1; ((CStringArray*)wcpb.pszArHandles)->Add(wcapBom.szHndle); if (wcapBom.pszArHandles != NULL) { delete wcapBom.pszArHandles; wcapBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWCapBoms.push_back(wcapBom); } } else { m_vtWCapBoms.push_back(wcapBom); } } break; } case eThrough: //直通 PVC { WThroughBom wThroughBom; memset(&wThroughBom, 0, sizeof(WThroughBom)); _tcscpy(wThroughBom.szApp, _T("直通")); pMap->GetAt(KEY_L, dM); if (pParam != NULL) { wThroughBom.nDn = (short)(pParam->m_dDN + 0.5); wThroughBom.nD = (short)(pParam->m_dD + 0.5); wThroughBom.nL = (short)(dM + 0.5); wThroughBom.fThick = (float)(pParam->m_dThick + 0.5); wThroughBom.nCount = 1; _tcscpy(wThroughBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, wThroughBom.szSN); _tcscpy(wThroughBom.szLevel, pParam->szLevel); _tcscpy(wThroughBom.szSys, pParam->szSys); pMap->GetAt(PIPE_STDNO, wThroughBom.szStd); pMap->GetAt(KEY_BOMNO, wThroughBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wThroughBom.szHndle); if (wThroughBom.pszArHandles == NULL) { wThroughBom.pszArHandles = new CStringArray; ((CStringArray*)wThroughBom.pszArHandles)->Add(wThroughBom.szHndle); } //汇总加入 if (!m_vtWThroughBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtWThroughBoms.size(); i++) { WThroughBom& wcpb = m_vtWThroughBoms.at(i); //等系统-材质 if (_tcscmp(wcpb.szSys, wThroughBom.szSys) == 0 && _tcscmp(wcpb.szMertial, wThroughBom.szMertial) == 0 && _tcscmp(wcpb.szApp, wThroughBom.szApp) == 0) { //等尺寸 -- Dxt if (wcpb.nD == wThroughBom.nD && fabs(wcpb.fThick - wThroughBom.fThick) < 1.e-2) { if (wcpb.pszArHandles == NULL) { wcpb.pszArHandles = new CStringArray; ((CStringArray*)wcpb.pszArHandles)->Add(wcpb.szHndle); } wcpb.nCount += 1; ((CStringArray*)wcpb.pszArHandles)->Add(wThroughBom.szHndle); if (wThroughBom.pszArHandles != NULL) { delete wThroughBom.pszArHandles; wThroughBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWThroughBoms.push_back(wThroughBom); } } else { m_vtWThroughBoms.push_back(wThroughBom); } } break; } case eUJoin: //活接 PVC { WUJoinBom wUJoinBom; memset(&wUJoinBom, 0, sizeof(WUJoinBom)); _tcscpy(wUJoinBom.szApp, _T("活接")); pMap->GetAt(KEY_L, dM); if (pParam != NULL) { wUJoinBom.nDn = (short)(pParam->m_dDN + 0.5); wUJoinBom.nD = (short)(pParam->m_dD + 0.5); wUJoinBom.nL = (short)(dM + 0.5); wUJoinBom.fThick = (float)(pParam->m_dThick + 0.5); wUJoinBom.nCount = 1; _tcscpy(wUJoinBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, wUJoinBom.szSN); _tcscpy(wUJoinBom.szLevel, pParam->szLevel); _tcscpy(wUJoinBom.szSys, pParam->szSys); pMap->GetAt(PIPE_STDNO, wUJoinBom.szStd); pMap->GetAt(KEY_BOMNO, wUJoinBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wUJoinBom.szHndle); if (wUJoinBom.pszArHandles == NULL) { wUJoinBom.pszArHandles = new CStringArray; ((CStringArray*)wUJoinBom.pszArHandles)->Add(wUJoinBom.szHndle); } //汇总加入 if (!m_vtWUJoinBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtWUJoinBoms.size(); i++) { WUJoinBom& wcpb = m_vtWUJoinBoms.at(i); //等系统-材质 if (_tcscmp(wcpb.szSys, wUJoinBom.szSys) == 0 && _tcscmp(wcpb.szMertial, wUJoinBom.szMertial) == 0 && _tcscmp(wcpb.szApp, wUJoinBom.szApp) == 0) { //等尺寸 -- Dxt if (wcpb.nD == wUJoinBom.nD && fabs(wcpb.fThick - wUJoinBom.fThick) < 1.e-2) { if (wcpb.pszArHandles == NULL) { wcpb.pszArHandles = new CStringArray; ((CStringArray*)wcpb.pszArHandles)->Add(wcpb.szHndle); } wcpb.nCount += 1; ((CStringArray*)wcpb.pszArHandles)->Add(wUJoinBom.szHndle); if (wUJoinBom.pszArHandles != NULL) { delete wUJoinBom.pszArHandles; wUJoinBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWUJoinBoms.push_back(wUJoinBom); } } else { m_vtWUJoinBoms.push_back(wUJoinBom); } } break; } case eRJoin: //缩接 PVC 伸缩节 { WRJoinBom wRJoinBom; memset(&wRJoinBom, 0, sizeof(WRJoinBom)); _tcscpy(wRJoinBom.szApp, _T("缩接")); pMap->GetAt(KEY_L, dM); if (pParam != NULL) { wRJoinBom.nDn = (short)(pParam->m_dDN + 0.5); wRJoinBom.nD = (short)(pParam->m_dD + 0.5); wRJoinBom.nL = (short)(dM + 0.5); wRJoinBom.fThick = (float)(pParam->m_dThick + 0.5); wRJoinBom.nCount = 1; _tcscpy(wRJoinBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, wRJoinBom.szSN); _tcscpy(wRJoinBom.szLevel, pParam->szLevel); _tcscpy(wRJoinBom.szSys, pParam->szSys); pMap->GetAt(PIPE_STDNO, wRJoinBom.szStd); pMap->GetAt(KEY_BOMNO, wRJoinBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wRJoinBom.szHndle); if (wRJoinBom.pszArHandles == NULL) { wRJoinBom.pszArHandles = new CStringArray; ((CStringArray*)wRJoinBom.pszArHandles)->Add(wRJoinBom.szHndle); } //汇总加入 if (!m_vtWRJoinBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtWRJoinBoms.size(); i++) { WUJoinBom& wcpb = m_vtWRJoinBoms.at(i); //等系统-材质 if (_tcscmp(wcpb.szSys, wRJoinBom.szSys) == 0 && _tcscmp(wcpb.szMertial, wRJoinBom.szMertial) == 0 && _tcscmp(wcpb.szApp, wRJoinBom.szApp) == 0) { //等尺寸 -- Dxt if (wcpb.nD == wRJoinBom.nD && fabs(wcpb.fThick - wRJoinBom.fThick) < 1.e-2) { if (wcpb.pszArHandles == NULL) { wcpb.pszArHandles = new CStringArray; ((CStringArray*)wcpb.pszArHandles)->Add(wcpb.szHndle); } wcpb.nCount += 1; ((CStringArray*)wcpb.pszArHandles)->Add(wRJoinBom.szHndle); if (wRJoinBom.pszArHandles != NULL) { delete wRJoinBom.pszArHandles; wRJoinBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWRJoinBoms.push_back(wRJoinBom); } } else { m_vtWRJoinBoms.push_back(wRJoinBom); } } break; } case eOJoin: //外螺纹接头 { WOJoinBom wOJoinBom; memset(&wOJoinBom, 0, sizeof(WOJoinBom)); _tcscpy(wOJoinBom.szApp, _T("外螺纹接头")); pMap->GetAt(KEY_L, dM); if (pParam != NULL) { wOJoinBom.nDn = (short)(pParam->m_dDN + 0.5); wOJoinBom.nD = (short)(pParam->m_dD + 0.5); wOJoinBom.nL = (short)(dM + 0.5); wOJoinBom.fThick = (float)(pParam->m_dThick + 0.5); wOJoinBom.nCount = 1; _tcscpy(wOJoinBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, wOJoinBom.szSN); _tcscpy(wOJoinBom.szLevel, pParam->szLevel); _tcscpy(wOJoinBom.szSys, pParam->szSys); pMap->GetAt(PIPE_STDNO, wOJoinBom.szStd); pMap->GetAt(KEY_BOMNO, wOJoinBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wOJoinBom.szHndle); if (wOJoinBom.pszArHandles == NULL) { wOJoinBom.pszArHandles = new CStringArray; ((CStringArray*)wOJoinBom.pszArHandles)->Add(wOJoinBom.szHndle); } //汇总加入 if (!m_vtWOJoinBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtWOJoinBoms.size(); i++) { WOJoinBom& wcpb = m_vtWOJoinBoms.at(i); //等系统-材质 if (_tcscmp(wcpb.szSys, wOJoinBom.szSys) == 0 && _tcscmp(wcpb.szMertial, wOJoinBom.szMertial) == 0 && _tcscmp(wcpb.szApp, wOJoinBom.szApp) == 0) { //等尺寸 -- Dxt if (wcpb.nD == wOJoinBom.nD && fabs(wcpb.fThick - wOJoinBom.fThick) < 1.e-2) { if (wcpb.pszArHandles == NULL) { wcpb.pszArHandles = new CStringArray; ((CStringArray*)wcpb.pszArHandles)->Add(wcpb.szHndle); } wcpb.nCount += 1; ((CStringArray*)wcpb.pszArHandles)->Add(wOJoinBom.szHndle); if (wOJoinBom.pszArHandles != NULL) { delete wOJoinBom.pszArHandles; wOJoinBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWOJoinBoms.push_back(wOJoinBom); } } else { m_vtWOJoinBoms.push_back(wOJoinBom); } } break; } case eIJoin: //内螺纹接头 { WIJoinBom wIJoinBom; memset(&wIJoinBom, 0, sizeof(WIJoinBom)); _tcscpy(wIJoinBom.szApp, _T("内螺纹接头")); pMap->GetAt(KEY_L, dM); if (pParam != NULL) { wIJoinBom.nDn = (short)(pParam->m_dDN + 0.5); wIJoinBom.nD = (short)(pParam->m_dD + 0.5); wIJoinBom.nL = (short)(dM + 0.5); wIJoinBom.fThick = (float)(pParam->m_dThick + 0.5); wIJoinBom.nCount = 1; _tcscpy(wIJoinBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, wIJoinBom.szSN); _tcscpy(wIJoinBom.szLevel, pParam->szLevel); _tcscpy(wIJoinBom.szSys, pParam->szSys); pMap->GetAt(PIPE_STDNO, wIJoinBom.szStd); pMap->GetAt(KEY_BOMNO, wIJoinBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wIJoinBom.szHndle); if (wIJoinBom.pszArHandles == NULL) { wIJoinBom.pszArHandles = new CStringArray; ((CStringArray*)wIJoinBom.pszArHandles)->Add(wIJoinBom.szHndle); } //汇总加入 if (!m_vtWIJoinBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtWOJoinBoms.size(); i++) { WOJoinBom& wcpb = m_vtWOJoinBoms.at(i); //等系统-材质 if (_tcscmp(wcpb.szSys, wIJoinBom.szSys) == 0 && _tcscmp(wcpb.szMertial, wIJoinBom.szMertial) == 0 && _tcscmp(wcpb.szApp, wIJoinBom.szApp) == 0) { //等尺寸 -- Dxt if (wcpb.nD == wIJoinBom.nD && fabs(wcpb.fThick - wIJoinBom.fThick) < 1.e-2) { if (wcpb.pszArHandles == NULL) { wcpb.pszArHandles = new CStringArray; ((CStringArray*)wcpb.pszArHandles)->Add(wcpb.szHndle); } wcpb.nCount += 1; ((CStringArray*)wcpb.pszArHandles)->Add(wIJoinBom.szHndle); if (wIJoinBom.pszArHandles != NULL) { delete wIJoinBom.pszArHandles; wIJoinBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWIJoinBoms.push_back(wIJoinBom); } } else { m_vtWIJoinBoms.push_back(wIJoinBom); } } break; } case eFlange: { //add break; } case eFlxJoin: { WFlxJoinBom wFlxJnbom; memset(&wFlxJnbom, 0, sizeof(WFlxJoinBom)); pMap->GetAt(PIPE_DN, dDn); pMap->GetAt(KEY_TYPE, sType); pMap->GetAt(PIPE_STDNO, sStdNo); pMap->GetAt(KEY_SN, wFlxJnbom.szSN); sMater = _T(""); pMap->GetAt(PIPE_MATERIALFT, sMater); sSys = _T(""); pMap->GetAt(PIPE_SYS, sSys); wFlxJnbom.nDn = (short)(dDn + 0.5); _tcscpy(wFlxJnbom.szMertial, sMater); _tcscpy(wFlxJnbom.szSys, sSys); sSpec.Format(_T("%s"), sType); _tcscpy(wFlxJnbom.szDescr, sSpec); pMap->GetAt(PIPE_STDNO, wFlxJnbom.szStd); pMap->GetAt(KEY_BOMNO, wFlxJnbom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(wFlxJnbom.szHndle); if (wFlxJnbom.pszArHandles == NULL) { wFlxJnbom.pszArHandles = new CStringArray; ((CStringArray *)wFlxJnbom.pszArHandles)->Add(wFlxJnbom.szHndle); } wFlxJnbom.nCount = 1; if (!m_vtWFlxJoinBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtWFlxJoinBoms.size();i++) { WFlxJoinBom &wflxbom = m_vtWFlxJoinBoms.at(i); if (_tcscmp(sType, wflxbom.szDescr) == 0 && wFlxJnbom.nDn == wflxbom.nDn) { if (wflxbom.pszArHandles == NULL) { wflxbom.pszArHandles = new CStringArray; ((CStringArray *)wflxbom.pszArHandles)->Add(wFlxJnbom.szHndle); } if (wFlxJnbom.pszArHandles != NULL) { delete wFlxJnbom.pszArHandles; wFlxJnbom.pszArHandles = NULL; } wflxbom.nCount += 1; bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtWFlxJoinBoms.push_back(wFlxJnbom); } } else { m_vtWFlxJoinBoms.push_back(wFlxJnbom); } break; } case eRP: { RPBom rpBom; memset(&rpBom, 0, sizeof(RPBom)); rpBom.nCount = 1; //支管 pMap->GetAt(PIPE_TDN,dEDn); rpBom.nDn = (int)(dEDn + 0.5); rpBom.fThick = (float)(pParam->m_dThick); _tcscpy(rpBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, rpBom.szSN); _tcscpy(rpBom.szLevel, pParam->szLevel); _tcscpy(rpBom.szSys, pParam->szSys); pMap->GetAt(PIPE_STDNO, rpBom.szStd); pMap->GetAt(KEY_BOMNO, rpBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(rpBom.szHndle); if (rpBom.pszArHandles == NULL) { rpBom.pszArHandles = new CStringArray; ((CStringArray *)rpBom.pszArHandles)->Add(rpBom.szHndle); } _tcscpy(rpBom.szApp, _T("补强圈")); //汇总加入 if (!m_vtRPBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtRPBoms.size(); i++) { RPBom &rp = m_vtRPBoms.at(i); //等系统-材质 if (_tcscmp(rp.szSys, rpBom.szSys) == 0 && _tcscmp(rp.szMertial, rpBom.szMertial) == 0 && _tcscmp(rp.szApp, rpBom.szApp) == 0) { if (rp.nDn == rpBom.nDn || fabs(rp.fThick - rpBom.fThick) < 1.e-2f) { if (rp.pszArHandles == NULL) { rp.pszArHandles = new CStringArray; ((CStringArray *)rp.pszArHandles)->Add(rp.szHndle); } rp.nCount += 1; ((CStringArray *)rp.pszArHandles)->Add(rpBom.szHndle); if (rpBom.pszArHandles != NULL) { delete rpBom.pszArHandles; rpBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtRPBoms.push_back(rpBom); } } else { m_vtRPBoms.push_back(rpBom); } break; } case eHP: { HPBom hpBom; memset(&hpBom, 0, sizeof(HPBom)); hpBom.nCount = 1; pMap->GetAt(PIPE_TDN, dEDn); hpBom.nDn = (int)(dEDn + 0.5); _tcscpy(hpBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, hpBom.szSN); _tcscpy(hpBom.szLevel, pParam->szLevel); _tcscpy(hpBom.szSys, pParam->szSys); pMap->GetAt(PIPE_STDNO, hpBom.szStd); pMap->GetAt(KEY_BOMNO, hpBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(hpBom.szHndle); if (hpBom.pszArHandles == NULL) { hpBom.pszArHandles = new CStringArray; ((CStringArray *)hpBom.pszArHandles)->Add(hpBom.szHndle); } _tcscpy(hpBom.szApp, _T("半管接头")); if (!m_vtHPBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtRPBoms.size(); i++) { HPBom &hp = m_vtHPBoms.at(i); //等系统-材质 if (_tcscmp(hp.szSys, hpBom.szSys) == 0 && _tcscmp(hp.szMertial, hpBom.szMertial) == 0 && _tcscmp(hp.szApp, hpBom.szApp) == 0) { if (hp.nDn == hpBom.nDn ) { if (hp.pszArHandles == NULL) { hp.pszArHandles = new CStringArray; ((CStringArray *)hp.pszArHandles)->Add(hp.szHndle); } hp.nCount += 1; ((CStringArray *)hp.pszArHandles)->Add(hpBom.szHndle); if (hpBom.pszArHandles != NULL) { delete hpBom.pszArHandles; hpBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtHPBoms.push_back(hpBom); } } else { m_vtHPBoms.push_back(hpBom); } break; } case eSPB: { SPBBom spBom; memset(&spBom, 0, sizeof(SPBBom)); spBom.nCount = 1; pMap->GetAt(PIPE_DN, dDn); spBom.nDn = (int)(dDn + 0.5); _tcscpy(spBom.szMertial, pParam->szMertialFit); pMap->GetAt(KEY_SN, spBom.szSN); _tcscpy(spBom.szLevel, pParam->szLevel); _tcscpy(spBom.szSys, pParam->szSys); pMap->GetAt(PIPE_STDNO, spBom.szStd); nKind = 0; pMap->GetAt(KEY_KIND, nKind); spBom.nKind = nKind; pMap->GetAt(KEY_BOMNO, spBom.szBomNo); pWFit->objectId().handle().getIntoAsciiBuffer(spBom.szHndle); if (spBom.pszArHandles == NULL) { spBom.pszArHandles = new CStringArray; ((CStringArray *)spBom.pszArHandles)->Add(spBom.szHndle); } _tcscpy(spBom.szApp, (nKind == 0) ? _T("八字盲板") : _T("插板")); if (!m_vtSPBBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtSPBBoms.size();i++) { SPBBom &sp = m_vtSPBBoms.at(i); //等系统-材质 if (_tcscmp(sp.szSys, spBom.szSys) == 0 && _tcscmp(sp.szMertial, spBom.szMertial) == 0 && _tcscmp(sp.szApp, spBom.szApp) == 0) { if (sp.nDn == spBom.nDn && sp.nKind == spBom.nKind) { if (sp.pszArHandles == NULL) { sp.pszArHandles = new CStringArray; ((CStringArray *)sp.pszArHandles)->Add(sp.szHndle); } sp.nCount += 1; ((CStringArray *)sp.pszArHandles)->Add(spBom.szHndle); if (spBom.pszArHandles != NULL) { delete spBom.pszArHandles; spBom.pszArHandles = NULL; } bSummed = true; break; } } } if (!bSummed) { m_vtSPBBoms.push_back(spBom); } } else { m_vtSPBBoms.push_back(spBom); } break; } default: break; } if (pParam != NULL) delete pParam; } void CBomReportExDlg::BomFlangeGet(WPipe::PipeParam* pParam,int nCount) { WFlangeBom wfngBom; memset(&wfngBom, 0, sizeof(WFlangeBom)); wfngBom.nDn = (short)(pParam->m_dDN + 0.5); wfngBom.nCount = nCount; _tcscpy(wfngBom.szMertial, pParam->szMertialFit); _tcscpy(wfngBom.szSN,_T("")); _tcscpy(wfngBom.szLevel, pParam->szLevel); _tcscpy(wfngBom.szSys, pParam->szSys); _tcscpy(wfngBom.szBomNo,_T("-")); bool bSummed = false; //汇总加入 if (!m_vtWFlangeBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtWFlangeBoms.size(); i++) { WFlangeBom &wfb = m_vtWFlangeBoms.at(i); //等系统-材质 if (_tcscmp(wfb.szSys, wfngBom.szSys) == 0 && _tcscmp(wfb.szMertial, wfngBom.szMertial) == 0) { //等尺寸 -- Dxt if (wfb.nDn == wfngBom.nDn) { if (wfb.pszArHandles == NULL) { wfb.pszArHandles = new CStringArray; ((CStringArray *)wfb.pszArHandles)->Add(wfb.szHndle); } wfb.nCount += wfngBom.nCount; ((CStringArray *)wfb.pszArHandles)->Add(wfngBom.szHndle); if (wfngBom.pszArHandles != NULL) { delete wfngBom.pszArHandles; wfngBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWFlangeBoms.push_back(wfngBom); } } else { m_vtWFlangeBoms.push_back(wfngBom); } } //设备 void CBomReportExDlg::ExtractBomOfEqu(AecDbEwEquipment* pEqu) { AecDbObjXDataMap* pMap = pEqu->GetSpecialtyData(AcDb::kForRead); WEquBom equBom; memset(&equBom,0,sizeof(WEquBom)); pMap->GetAt(KEY_NAME,equBom.szName); pMap->GetAt(KEY_SN,equBom.szSN); pMap->GetAt(PIPE_SYS,equBom.szSys); CString sSpec,sVal; CoreTools::getBimData(*pMap, _T("规格"), sSpec); _tcscpy(equBom.szSpec,sSpec); SH_BIM_BLOCK bim; CoreTools::getBimDatas(*pMap,bim); pMap->GetAt(KEY_BOMNO,equBom.szBomNo); pEqu->objectId().handle().getIntoAsciiBuffer(equBom.szHndle); if (equBom.pszArHandles == NULL) { equBom.pszArHandles = new CStringArray; ((CStringArray*)equBom.pszArHandles)->Add(equBom.szHndle); } equBom.nCount = 1; bool bSummed = false; for (int i = 0;i < bim.size();i++) { SH_BIM_REC& sbr = bim.at(i); sVal = sbr.second; if (sVal.Find(_T("压力")) != -1) { _tcscpy(equBom.szLevel,sVal); break; } } //汇总加入 if (!m_vtWEquBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtWEquBoms.size();i++) { WEquBom& wequ = m_vtWEquBoms.at(i); //名称为主键 if (_tcscmp(wequ.szName,equBom.szName) == 0) { //同系统 同等级 if (_tcscmp(wequ.szSys,equBom.szSys) == 0 && _tcscmp(wequ.szLevel,equBom.szLevel) == 0) { if (wequ.pszArHandles == NULL) { wequ.pszArHandles = new CStringArray; ((CStringArray*)wequ.pszArHandles)->Add(wequ.szHndle); } wequ.nCount += 1; ((CStringArray*)wequ.pszArHandles)->Add(equBom.szHndle); if (equBom.pszArHandles != NULL) { delete equBom.pszArHandles; equBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWEquBoms.push_back(equBom); } } else { m_vtWEquBoms.push_back(equBom); } } //设备 void CBomReportExDlg::ExtractBomOfXEqu(AecDbXEquipment* pXEqu) { AecDbObjXDataMap* pMap = pXEqu->GetSpecialtyData(AcDb::kForRead); WEquBom equBom; memset(&equBom,0,sizeof(WEquBom)); pMap->GetAt(KEY_NAME,equBom.szName); pMap->GetAt(KEY_SN,equBom.szSN); pMap->GetAt(PIPE_SYS,equBom.szSys); CString sSpec,sVal; sSpec = pXEqu->GetSpec(); _tcscpy(equBom.szSpec,sSpec); SH_BIM_BLOCK bim; CoreTools::getBimDatas(*pMap,bim); pMap->GetAt(KEY_BOMNO,equBom.szBomNo); pXEqu->objectId().handle().getIntoAsciiBuffer(equBom.szHndle); if (equBom.pszArHandles == NULL) { equBom.pszArHandles = new CStringArray; ((CStringArray*)equBom.pszArHandles)->Add(equBom.szHndle); } equBom.nCount = 1; for (int i = 0;i < bim.size();i++) { SH_BIM_REC& sbr = bim.at(i); sVal = sbr.second; if (sVal.Find(_T("压力")) != -1) { _tcscpy(equBom.szLevel,sVal); break; } } bool bSummed = false; //汇总加入 if (!m_vtWEquBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtWEquBoms.size();i++) { WEquBom& wequ = m_vtWEquBoms.at(i); //名称为主键 if (_tcscmp(wequ.szName,equBom.szName) == 0 ) { //同系统 压力 if (_tcscmp(wequ.szSys,equBom.szSys) == 0 && _tcscmp(wequ.szSpec, equBom.szSpec) == 0 && _tcscmp(wequ.szLevel,equBom.szLevel) == 0) { if (wequ.pszArHandles == NULL) { wequ.pszArHandles = new CStringArray; ((CStringArray*)wequ.pszArHandles)->Add(wequ.szHndle); } wequ.nCount += 1; ((CStringArray*)wequ.pszArHandles)->Add(equBom.szHndle); if (equBom.pszArHandles != NULL) { delete equBom.pszArHandles; equBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtWEquBoms.push_back(equBom); } } else { m_vtWEquBoms.push_back(equBom); } } //风管 void CBomReportExDlg::ExtractBomOfDuct(AecDbHvacDuct* pDuct) { AecHvac::DuctParam data; memset(&data,0,sizeof(AecHvac::DuctParam)); pDuct->GetDuctParam(data); AecDbObjXDataMap* pMap = pDuct->GetSpecialtyData(AcDb::kForRead); DuctBom dtBom; memset(&dtBom,0,sizeof(DuctBom)); dtBom.dW = data.dSize[0]; dtBom.dH = data.dSize[1]; dtBom.dt = data.dSize[2]; dtBom.eSect = data.eType; dtBom.dLen = 0.001 * pDuct->GetLength(); _tcscpy(dtBom.szMertial,data.szMat); _tcscpy(dtBom.szFactory,data.szFat); pMap->GetAt(KEY_SN,dtBom.szSN); _tcscpy(dtBom.szSys,data.szSys); _tcscpy(dtBom.szLevel,data.szLevel); if (m_lstHSys.Find(data.szSys) == NULL) m_lstHSys.AddTail(data.szSys); pMap->GetAt(KEY_BOMNO,dtBom.szBomNo); pDuct->objectId().handle().getIntoAsciiBuffer(dtBom.szHndle); if (dtBom.pszArHandles == NULL) { dtBom.pszArHandles = new CStringArray; ((CStringArray*)dtBom.pszArHandles)->Add(dtBom.szHndle); } bool bSummed = false; //汇总加入 if (!m_vtDuctBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtDuctBoms.size();i++) { DuctBom& dtb = m_vtDuctBoms.at(i); //系统为主键 if (_tcscmp(dtb.szSys,dtBom.szSys) == 0) { //同尺寸 if ( fabs( __min(dtb.dW,dtb.dH) - __min(dtBom.dW,dtBom.dH) ) < 1.e-2 && fabs( __max(dtb.dW,dtb.dH) - __max(dtBom.dW,dtBom.dH) ) < 1.e-2) { if (dtb.pszArHandles == NULL) { dtb.pszArHandles = new CStringArray; ((CStringArray*)dtb.pszArHandles)->Add(dtb.szHndle); } dtb.dLen += dtBom.dLen; ((CStringArray*)dtb.pszArHandles)->Add(dtBom.szHndle); if (dtBom.pszArHandles != NULL) { delete dtBom.pszArHandles; dtBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtDuctBoms.push_back(dtBom); } } else { m_vtDuctBoms.push_back(dtBom); } } //风管件 void CBomReportExDlg::ExtractBomOfHFit(AecDbHvacFitting* pHFit) { AecDbObjXDataMap* pMap = pHFit->GetSpecialtyData(AcDb::kForRead); int nFitType = 0; pMap = pHFit->GetSpecialtyData(AcDb::kForRead); pMap->GetAt(KEY_RUNTIME,nFitType); AecHvac::DuctParam data; memset(&data,0,sizeof(AecHvac::DuctParam)); pHFit->GetDuctParam(data); if (m_lstHSys.Find(data.szSys) == NULL) m_lstHSys.AddTail(data.szSys); bool bSummed = false; switch(nFitType) { case eElbow: { HElbowBom hElb; memset(&hElb,0,sizeof(HElbowBom)); hElb.nCount = 1; pMap->GetAt(HELB_Type,hElb.nType); pMap->GetAt(HELB_StartWidth,hElb.dSw); pMap->GetAt(HELB_EndWidth,hElb.dEw); pMap->GetAt(HELB_EndThick,hElb.dEh); hElb.dSh = hElb.dEh; hElb.dt = data.dSize[2]; hElb.eSect = data.eType; _tcscpy(hElb.szFactory,data.szFat); _tcscpy(hElb.szLevel,data.szLevel); _tcscpy(hElb.szMertial,data.szMat); _tcscpy(hElb.szSys,data.szSys); _tcscpy(hElb.szSN,data.szNo); pMap->GetAt(KEY_BOMNO,hElb.szBomNo); pHFit->objectId().handle().getIntoAsciiBuffer(hElb.szHndle); if (hElb.pszArHandles == NULL) { hElb.pszArHandles = new CStringArray; ((CStringArray*)hElb.pszArHandles)->Add(hElb.szHndle); } //汇总加入 if (!m_vtHElbowBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtHElbowBoms.size();i++) { HElbowBom& hEl = m_vtHElbowBoms.at(i); //系统为主键 if (_tcscmp(hEl.szSys,hElb.szSys) == 0) { //同尺寸 if ( fabs( __min(hEl.dSw,hEl.dEw) - __min(hElb.dSw,hElb.dEw) ) < 1.e-2 && fabs( __max(hEl.dSw,hEl.dEw) - __max(hElb.dSw,hElb.dEw) ) < 1.e-2 && fabs( __min(hEl.dSh,hEl.dEh) - __min(hElb.dSh,hElb.dEh) ) < 1.e-2 && fabs( __max(hEl.dSh,hEl.dEh) - __max(hElb.dSh,hElb.dEh) ) < 1.e-2 ) { if (hEl.pszArHandles == NULL) { hEl.pszArHandles = new CStringArray; ((CStringArray*)hEl.pszArHandles)->Add(hEl.szHndle); } hEl.nCount += 1; ((CStringArray*)hEl.pszArHandles)->Add(hElb.szHndle); if (hElb.pszArHandles != NULL) { delete hElb.pszArHandles; hElb.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtHElbowBoms.push_back(hElb); } } else { m_vtHElbowBoms.push_back(hElb); } break; } case eTee: { HTeeBom hte; memset(&hte,0,sizeof(HTeeBom)); hte.nCount = 1; pMap->GetAt(HVAC_SectType,hte.eSect); pMap->GetAt(HTEE_Type,hte.nType); pMap->GetAt(HTEE_StartWidth, hte.dSw); pMap->GetAt(HTEE_EndWidth, hte.dEw); pMap->GetAt(HTEE_BranchWidth, hte.dBw); pMap->GetAt(HTEE_Thick, hte.dSh); pMap->GetAt(HTEE_EndThick, hte.dEh); pMap->GetAt(HTEE_BranchThick, hte.dBh); hte.dt = data.dSize[2]; _tcscpy(hte.szFactory,data.szFat); _tcscpy(hte.szLevel,data.szLevel); _tcscpy(hte.szMertial,data.szMat); _tcscpy(hte.szSys,data.szSys); _tcscpy(hte.szSN,data.szNo); pMap->GetAt(KEY_BOMNO,hte.szBomNo); pHFit->objectId().handle().getIntoAsciiBuffer(hte.szHndle); if (hte.pszArHandles == NULL) { hte.pszArHandles = new CStringArray; ((CStringArray*)hte.pszArHandles)->Add(hte.szHndle); } //汇总加入 if (!m_vtHTeeBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtHTeeBoms.size();i++) { HTeeBom& hT = m_vtHTeeBoms.at(i); //系统为主键 if (_tcscmp(hT.szSys,hte.szSys) == 0) { //同尺寸 if ( fabs( __min(hT.dSw,hT.dEw) - __min(hte.dSw,hte.dEw) ) < 1.e-2 && fabs( __max(hT.dSw,hT.dEw) - __max(hte.dSw,hte.dEw) ) < 1.e-2 && fabs( hT.dBh - hte.dEh) < 1.e-2 && fabs( hT.dBw - hte.dBw) < 1.e-2 ) { if (hT.pszArHandles == NULL) { hT.pszArHandles = new CStringArray; ((CStringArray*)hT.pszArHandles)->Add(hT.szHndle); } hT.nCount += 1; ((CStringArray*)hT.pszArHandles)->Add(hte.szHndle); if (hte.pszArHandles != NULL) { delete hte.pszArHandles; hte.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtHTeeBoms.push_back(hte); } } else { m_vtHTeeBoms.push_back(hte); } break; } case eCross: { HCrossBom hCro; memset(&hCro,0,sizeof(HCrossBom)); hCro.nCount = 1; pMap->GetAt(HCRS_Type, hCro.nType); pMap->GetAt(HCRS_StartWidth,hCro.dSw); pMap->GetAt(HCRS_EndWidth,hCro.dEw); pMap->GetAt(HCRS_Branch1Width,hCro.dBw1); pMap->GetAt(HCRS_Branch2Width,hCro.dBw2); pMap->GetAt(HCRS_Thick,hCro.dSh); pMap->GetAt(HCRS_Branch1Thick,hCro.dBh1); pMap->GetAt(HCRS_Branch2Thick,hCro.dBh2); hCro.dt = data.dSize[2]; hCro.eSect = data.eType; _tcscpy(hCro.szFactory,data.szFat); _tcscpy(hCro.szLevel,data.szLevel); _tcscpy(hCro.szMertial,data.szMat); _tcscpy(hCro.szSys,data.szSys); _tcscpy(hCro.szSN,data.szNo); pMap->GetAt(KEY_BOMNO,hCro.szBomNo); pHFit->objectId().handle().getIntoAsciiBuffer(hCro.szHndle); if (hCro.pszArHandles == NULL) { hCro.pszArHandles = new CStringArray; ((CStringArray*)hCro.pszArHandles)->Add(hCro.szHndle); } //汇总加入 if (!m_vtHCrossBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtHCrossBoms.size();i++) { HCrossBom& hCr = m_vtHCrossBoms.at(i); //系统为主键 if (_tcscmp(hCr.szSys,hCro.szSys) == 0) { //同尺寸 if ( fabs( __min(hCr.dSw,hCr.dEw) - __min(hCro.dSw,hCro.dEw) ) < 1.e-2 && fabs( __max(hCr.dSw,hCr.dEw) - __max(hCro.dSw,hCro.dEw) ) < 1.e-2 && fabs( __min(hCr.dSh,hCr.dEh) - __min(hCro.dSh,hCro.dEh) ) < 1.e-2 && fabs( __max(hCr.dSh,hCr.dEh) - __max(hCro.dSh,hCro.dEh) ) < 1.e-2 && fabs( hCr.dBh1 - hCro.dBh1) < 1.e-2 && fabs( hCr.dBh2 - hCro.dBh2) < 1.e-2 && fabs( hCr.dBw1 - hCro.dBw1) < 1.e-2 && fabs( hCr.dBw2 - hCro.dBw2) < 1.e-2 ) { if (hCr.pszArHandles == NULL) { hCr.pszArHandles = new CStringArray; ((CStringArray*)hCr.pszArHandles)->Add(hCr.szHndle); } hCr.nCount += 1; ((CStringArray*)hCr.pszArHandles)->Add(hCro.szHndle); if (hCro.pszArHandles != NULL) { delete hCro.pszArHandles; hCro.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtHCrossBoms.push_back(hCro); } } else { m_vtHCrossBoms.push_back(hCro); } break; } case eOffset: { HOffsetBom hOff; memset(&hOff,0,sizeof(HOffsetBom)); hOff.nCount = 1; pMap->GetAt(HOFF_Type,hOff.nType); pMap->GetAt(HOFF_StartWidth,hOff.dSw); pMap->GetAt(HOFF_EndWidth,hOff.dEw); pMap->GetAt(HOFF_Thick,hOff.dt); pMap->GetAt(HOFF_Angle,hOff.dAngle); pMap->GetAt(HOFF_Length,hOff.dOffL); pMap->GetAt(HOFF_Offset, hOff.dOffW); hOff.eSect = data.eType; _tcscpy(hOff.szFactory,data.szFat); _tcscpy(hOff.szLevel,data.szLevel); _tcscpy(hOff.szMertial,data.szMat); _tcscpy(hOff.szSys,data.szSys); _tcscpy(hOff.szSN,data.szNo); pMap->GetAt(KEY_BOMNO,hOff.szBomNo); pHFit->objectId().handle().getIntoAsciiBuffer(hOff.szHndle); if (hOff.pszArHandles == NULL) { hOff.pszArHandles = new CStringArray; ((CStringArray*)hOff.pszArHandles)->Add(hOff.szHndle); } //汇总加入 if (!m_vtHOffsetBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtHOffsetBoms.size();i++) { HOffsetBom& hOf = m_vtHOffsetBoms.at(i); //系统为主键 if (_tcscmp(hOf.szSys,hOff.szSys) == 0) { //同尺寸 if ( fabs( hOf.dSw - hOff.dSw ) < 1.e-2 && fabs( hOf.dEw - hOff.dEw ) < 1.e-2 && fabs( hOf.dAngle - hOff.dAngle) < 1.e-2 && fabs( hOf.dOffL - hOff.dOffL) < 1.e-2 && fabs( hOf.dOffW - hOff.dOffW) < 1.e-2 ) { if (hOf.pszArHandles == NULL) { hOf.pszArHandles = new CStringArray; ((CStringArray*)hOf.pszArHandles)->Add(hOf.szHndle); } hOf.nCount += 1; ((CStringArray*)hOf.pszArHandles)->Add(hOff.szHndle); if (hOff.pszArHandles != NULL) { delete hOff.pszArHandles; hOff.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtHOffsetBoms.push_back(hOff); } } else { m_vtHOffsetBoms.push_back(hOff); } break; } default: break; } } //桥架 void CBomReportExDlg::ExtractBomOfECable(AecDbECableTray* pCabTry) { AecDbObjXDataMap* pMap = pCabTry->GetSpecialtyData(AcDb::kForRead); AecHvac::DuctParam data; pCabTry->GetDuctParam(data); //电缆沟不统计 if (data.m_app == WPipe::eTrench) return; ECabletryBom ecbtrtBom; memset(&ecbtrtBom,0,sizeof(ECabletryBom)); ecbtrtBom.dW = data.dSize[0]; ecbtrtBom.dH = data.dSize[1]; ecbtrtBom.dt = data.dSize[2]; ecbtrtBom.eSect = data.eType; ecbtrtBom.dLen = 0.001 * pCabTry->GetLength(); _tcscpy(ecbtrtBom.szMertial,data.szMat); _tcscpy(ecbtrtBom.szFactory,data.szFat); _tcscpy(ecbtrtBom.szSN,data.szNo); _tcscpy(ecbtrtBom.szSys,data.szSys); _tcscpy(ecbtrtBom.szLevel,data.szLevel); _tcscpy(ecbtrtBom.szType,data.szType); if (m_lstESys.Find(data.szSys) == NULL) m_lstESys.AddTail(data.szSys); pMap->GetAt(KEY_BOMNO,ecbtrtBom.szBomNo); pCabTry->objectId().handle().getIntoAsciiBuffer(ecbtrtBom.szHndle); if (ecbtrtBom.pszArHandles == NULL) { ecbtrtBom.pszArHandles = new CStringArray; ((CStringArray*)ecbtrtBom.pszArHandles)->Add(ecbtrtBom.szHndle); } bool bSummed = false; //汇总加入 if (!m_vtECabletryBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtECabletryBoms.size();i++) { ECabletryBom& eCb = m_vtECabletryBoms.at(i); //系统为主键 if (_tcscmp(eCb.szSys,ecbtrtBom.szSys) == 0) { //同尺寸 if ( fabs( __min(eCb.dW,eCb.dH) - __min(ecbtrtBom.dW,ecbtrtBom.dH) ) < 1.e-2 && fabs( __max(eCb.dW,eCb.dH) - __max(ecbtrtBom.dW,ecbtrtBom.dH) ) < 1.e-2) { if (eCb.pszArHandles == NULL) { eCb.pszArHandles = new CStringArray; ((CStringArray*)eCb.pszArHandles)->Add(eCb.szHndle); } eCb.dLen += ecbtrtBom.dLen; ((CStringArray*)eCb.pszArHandles)->Add(ecbtrtBom.szHndle); if (ecbtrtBom.pszArHandles != NULL) { delete ecbtrtBom.pszArHandles; ecbtrtBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtECabletryBoms.push_back(ecbtrtBom); } } else { m_vtECabletryBoms.push_back(ecbtrtBom); } } //桥架件 void CBomReportExDlg::ExtractBomOfEFit(AecDbEcFitting* pEcFit) { AecDbObjXDataMap* pMap = pEcFit->GetSpecialtyData(AcDb::kForRead); AecHvac::DuctParam data; pEcFit->GetDuctParam(data); //电缆沟不统计 if (data.m_app == WPipe::eTrench) return; int nFitType = 0; pMap = pEcFit->GetSpecialtyData(AcDb::kForRead); pMap->GetAt(KEY_RUNTIME,nFitType); EFittingType eType = (EFittingType)nFitType; ECabFitBom ecBom; memset(&ecBom,0,sizeof(ECabFitBom)); ecBom.nCount = 1; bool bSummed = false; switch(eType) { case eElbow: { pMap->GetAt(PIPE_ELBOWANG,ecBom.dAngle); pMap->GetAt(HELB_RadRatio,ecBom.dRatio); pMap->GetAt(HELB_LX,ecBom.dLx); ecBom.nType = nFitType; ecBom.eSect = eRect; ecBom.dW = data.dSize[0]; ecBom.dH = data.dSize[1]; ecBom.dt = data.dSize[2]; ecBom.dAngle *= 180 / PI; ecBom.nType = nFitType; ecBom.eSect = eRect; _tcscpy(ecBom.szMertial,data.szMat); _tcscpy(ecBom.szFactory,data.szFat); _tcscpy(ecBom.szSN,data.szNo); _tcscpy(ecBom.szSys,data.szSys); _tcscpy(ecBom.szLevel,data.szLevel); _tcscpy(ecBom.szType,data.szType); pMap->GetAt(KEY_BOMNO,ecBom.szBomNo); pEcFit->objectId().handle().getIntoAsciiBuffer(ecBom.szHndle); if (ecBom.pszArHandles == NULL) { ecBom.pszArHandles = new CStringArray; ((CStringArray*)ecBom.pszArHandles)->Add(ecBom.szHndle); } //汇总加入 if (!m_vtECabFitBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtECabFitBoms.size();i++) { ECabFitBom& eEl = m_vtECabFitBoms.at(i); //系统为主键 if (_tcscmp(eEl.szSys,ecBom.szSys) == 0 && eEl.nType == ecBom.nType) { //同尺寸 if ( fabs( __min(eEl.dW,eEl.dH) - __min(ecBom.dW,ecBom.dH) ) < 1.e-2 && fabs( __max(eEl.dW,eEl.dH) - __max(ecBom.dW,ecBom.dH) ) < 1.e-2 && fabs( eEl.dAngle - ecBom.dAngle ) < 1.e-2 ) { if (eEl.pszArHandles == NULL) { eEl.pszArHandles = new CStringArray; ((CStringArray*)eEl.pszArHandles)->Add(eEl.szHndle); } eEl.nCount += 1; ((CStringArray*)eEl.pszArHandles)->Add(ecBom.szHndle); if (ecBom.pszArHandles != NULL) { delete ecBom.pszArHandles; ecBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtECabFitBoms .push_back(ecBom); } } else { m_vtECabFitBoms .push_back(ecBom); } break; } case eTee: { pMap->GetAt(HELB_LX,ecBom.dLx); pMap->GetAt(HELB_RadRatio,ecBom.dRatio); ecBom.nType = nFitType; ecBom.eSect = eRect; ecBom.dW = data.dSize[0]; ecBom.dH = data.dSize[1]; ecBom.dt = data.dSize[2]; ecBom.dAngle = 0.0; ecBom.dRatio = ecBom.dRatio; ecBom.dLx = ecBom.dLx; ecBom.nType = nFitType; ecBom.eSect = eRect; ecBom.nCount = 1; _tcscpy(ecBom.szMertial,data.szMat); _tcscpy(ecBom.szFactory,data.szFat); _tcscpy(ecBom.szSN,data.szNo); _tcscpy(ecBom.szSys,data.szSys); _tcscpy(ecBom.szLevel,data.szLevel); _tcscpy(ecBom.szType,data.szType); pMap->GetAt(KEY_BOMNO,ecBom.szBomNo); pEcFit->objectId().handle().getIntoAsciiBuffer(ecBom.szHndle); if (ecBom.pszArHandles == NULL) { ecBom.pszArHandles = new CStringArray; ((CStringArray*)ecBom.pszArHandles)->Add(ecBom.szHndle); } //汇总加入 if (!m_vtECabFitBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtECabFitBoms.size();i++) { ECabFitBom& eEl = m_vtECabFitBoms.at(i); //系统为主键 if (_tcscmp(eEl.szSys,ecBom.szSys) == 0 && eEl.nType == ecBom.nType) { //同尺寸 if ( fabs( __min(eEl.dW,eEl.dH) - __min(ecBom.dW,ecBom.dH) ) < 1.e-2 && fabs( __max(eEl.dW,eEl.dH) - __max(ecBom.dW,ecBom.dH) ) < 1.e-2 && fabs( eEl.dAngle - ecBom.dAngle ) < 1.e-2 ) { if (eEl.pszArHandles == NULL) { eEl.pszArHandles = new CStringArray; ((CStringArray*)eEl.pszArHandles)->Add(eEl.szHndle); } eEl.nCount += 1; ((CStringArray*)eEl.pszArHandles)->Add(ecBom.szHndle); if (ecBom.pszArHandles != NULL) { delete ecBom.pszArHandles; ecBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtECabFitBoms .push_back(ecBom); } } else { m_vtECabFitBoms .push_back(ecBom); } break; } case eCross: { pMap->GetAt(HELB_LX,ecBom.dLx); pMap->GetAt(HELB_RadRatio,ecBom.dRatio); ecBom.nType = nFitType; ecBom.eSect = eRect; ecBom.dW = data.dSize[0]; ecBom.dH = data.dSize[1]; ecBom.dt = data.dSize[2]; ecBom.dAngle = 0.0; ecBom.dRatio = ecBom.dRatio; ecBom.dLx = ecBom.dLx; ecBom.nType = nFitType; ecBom.eSect = eRect; _tcscpy(ecBom.szMertial,data.szMat); _tcscpy(ecBom.szFactory,data.szFat); _tcscpy(ecBom.szSN,data.szNo); _tcscpy(ecBom.szSys,data.szSys); _tcscpy(ecBom.szLevel,data.szLevel); _tcscpy(ecBom.szType,data.szType); pMap->GetAt(KEY_BOMNO,ecBom.szBomNo); pEcFit->objectId().handle().getIntoAsciiBuffer(ecBom.szHndle); if (ecBom.pszArHandles == NULL) { ecBom.pszArHandles = new CStringArray; ((CStringArray*)ecBom.pszArHandles)->Add(ecBom.szHndle); } //汇总加入 if (!m_vtECabFitBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtECabFitBoms.size();i++) { ECabFitBom& eEl = m_vtECabFitBoms.at(i); //系统为主键 if (_tcscmp(eEl.szSys,ecBom.szSys) == 0 && eEl.nType == ecBom.nType) { //同尺寸 if ( fabs( __min(eEl.dW,eEl.dH) - __min(ecBom.dW,ecBom.dH) ) < 1.e-2 && fabs( __max(eEl.dW,eEl.dH) - __max(ecBom.dW,ecBom.dH) ) < 1.e-2 && fabs( eEl.dAngle - ecBom.dAngle ) < 1.e-2 ) { if (eEl.pszArHandles == NULL) { eEl.pszArHandles = new CStringArray; ((CStringArray*)eEl.pszArHandles)->Add(eEl.szHndle); } eEl.nCount += 1; ((CStringArray*)eEl.pszArHandles)->Add(ecBom.szHndle); if (ecBom.pszArHandles != NULL) { delete ecBom.pszArHandles; ecBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtECabFitBoms .push_back(ecBom); } } else { m_vtECabFitBoms .push_back(ecBom); } break; } default: break; } } /* * typedef struct CoverPipeBom { short nD; //D 外径 float fThick; //THICK 壁厚 TCHAR szName[65]; //套管名称 TCHAR szMertial[255]; //材料 int nD2s; //翼环数量 int nD2; //翼环外径 double dLen; //套管长度 int nCount; //数量 个 //以下报表 TCHAR szBomNo[33]; //报表编号 TCHAR szHndle[33]; //报表物件句柄 //以下汇总的句柄集合 PVOID pszArHandles; //,,,,, }CoverPipeBom; */ //套管 void CBomReportExDlg::ExtractBomOfXPart(AecDbX3dPartEntity* pXPart) { CString sPipeType,sRem,sMater,sSn; CString sName = pXPart->GetName(); if (sName.Find(_T("套管")) != -1) { AecDbObjXDataMap* pMap = pXPart->GetSpecialtyData(AcDb::kForRead); double dLen = 0,dD = 0,dThick = 0,dDn = 0.0; pXPart->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("dH"),dLen); pXPart->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("dD"),dD); pXPart->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("dT"),dThick); sMater = _T(""); pXPart->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMater); sPipeType = _T(""); pXPart->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_PIPETYPE,sPipeType); sSn = _T(""); pXPart->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); CoverPipeBom cpBom; memset(&cpBom, 0, sizeof(CoverPipeBom)); cpBom.nCount = 1; cpBom.nD = dD; cpBom.fThick = dThick; cpBom.dLen = dLen; _tcscpy(cpBom.szName, (LPCTSTR)sPipeType); _tcscpy(cpBom.szMertial, (LPCTSTR)sMater); _tcscpy(cpBom.szMertial, (LPCTSTR)sMater); _tcscpy(cpBom.szBomNo, (LPCTSTR)sSn); bool bSummed = false; pMap->GetAt(KEY_BOMNO, cpBom.szBomNo); pXPart->objectId().handle().getIntoAsciiBuffer(cpBom.szHndle); if (cpBom.pszArHandles == NULL) { cpBom.pszArHandles = new CStringArray; ((CStringArray*)cpBom.pszArHandles)->Add(cpBom.szHndle); } //汇总加入 if (!m_vtCoverPipeBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtCoverPipeBoms.size();i++) { CoverPipeBom & pb = m_vtCoverPipeBoms.at(i); //等系统-材质 if (_tcscmp(pb.szName, cpBom.szName) == 0 && _tcscmp(pb.szMertial, cpBom.szMertial) == 0 ) { //等尺寸 -- Dxt if (pb.nD == cpBom.nD && fabs(pb.fThick - cpBom.fThick) < 1.e-2 ) { if (pb.pszArHandles == NULL) { pb.pszArHandles = new CStringArray; ((CStringArray*)pb.pszArHandles)->Add(pb.szHndle); } //pb.dLen += cpBom.dLen; pb.nCount += 1; ((CStringArray*)pb.pszArHandles)->Add(cpBom.szHndle); if (cpBom.pszArHandles != NULL) { delete cpBom.pszArHandles; cpBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtCoverPipeBoms.push_back(cpBom); } } else { m_vtCoverPipeBoms.push_back(cpBom); } } } //支吊架支墩 角钢 WxWxt void CBomReportExDlg::ExtractBomOfHolder(AecDbHolder* pHolder) { AecDbObjXDataMap* pMap = pHolder->GetSpecialtyData(AcDb::kForRead); ASteel atl; memset(&atl, 0, sizeof(ASteel)); pHolder->GetASteelLength(atl); CString sSn = _T(""); pHolder->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); AngSteelBom asBom; memset(&asBom,0,sizeof(AngSteelBom)); asBom.dLen = atl.L / 1000.0;//米 asBom.dW = atl.W; asBom.dt = atl.t; _tcscpy(asBom.szMertial,atl.szMat); _tcscpy(asBom.szSN,sSn); pMap->GetAt(KEY_BOMNO,asBom.szBomNo); pHolder->objectId().handle().getIntoAsciiBuffer(asBom.szHndle); if (asBom.pszArHandles == NULL) { asBom.pszArHandles = new CStringArray; ((CStringArray*)asBom.pszArHandles)->Add(asBom.szHndle); } bool bSummed = false; //汇总加入 if (!m_vtAngSteelBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtAngSteelBoms.size();i++) { AngSteelBom& asb = m_vtAngSteelBoms.at(i); //等尺寸 -- Dxt if (fabs(asb.dW - asBom.dW) < 1.e-2 && fabs(asb.dt - asBom.dt) < 1.e-2 ) { if (asb.pszArHandles == NULL) { asb.pszArHandles = new CStringArray; ((CStringArray*)asb.pszArHandles)->Add(asb.szHndle); } asb.dLen += asBom.dLen; ((CStringArray*)asb.pszArHandles)->Add(asBom.szHndle); if (asBom.pszArHandles != NULL) { delete asBom.pszArHandles; asBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtAngSteelBoms.push_back(asBom); } } else { m_vtAngSteelBoms.push_back(asBom); } } //吊架 void CBomReportExDlg::ExtractBomOfHanger(AecDbHanger* pHanger) { AecDbObjXDataMap* pMap = pHanger->GetSpecialtyData(AcDb::kForRead); ASteel atl; pHanger->GetASteelLength(atl); CString sSn = _T(""); pHanger->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); //宽-厚-材质 AngSteelBom asBom; memset(&asBom,0,sizeof(AngSteelBom)); asBom.dLen = atl.L / 1000.0;//米 asBom.dW = atl.W; asBom.dt = atl.t; _tcscpy(asBom.szMertial,atl.szMat); _tcscpy(asBom.szSN,sSn); pMap->GetAt(KEY_BOMNO,asBom.szBomNo); pHanger->objectId().handle().getIntoAsciiBuffer(asBom.szHndle); if (asBom.pszArHandles == NULL) { asBom.pszArHandles = new CStringArray; ((CStringArray*)asBom.pszArHandles)->Add(asBom.szHndle); } if (atl.D > 1.e-1) { if (!m_vtTierods.empty()) { bool bAdded = false; for (int i = 0; i < m_vtTierods.size(); i++) { TierodBom &tb = m_vtTierods.at(i); if (fabs(tb.dD - atl.D) < 1.e-3) { tb.dL += atl.L2; bAdded = true; break; } } if (!bAdded) { TierodBom tbom; tbom.dD = atl.D; tbom.dL = atl.L2; tbom.pszArHandles = NULL; _tcscpy(tbom.szMertial, atl.szMat); m_vtTierods.push_back(tbom); } } else { TierodBom tbom; tbom.dD = atl.D; tbom.dL = atl.L2; tbom.pszArHandles = NULL; _tcscpy(tbom.szMertial, atl.szMat); m_vtTierods.push_back(tbom); } } bool bSummed = false; //汇总加入 if (!m_vtAngSteelBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtAngSteelBoms.size();i++) { AngSteelBom& asb = m_vtAngSteelBoms.at(i); //等尺寸 -- Dxt if (fabs(asb.dW - asBom.dW) < 1.e-2 && fabs(asb.dt - asBom.dt) < 1.e-2 ) { if (asb.pszArHandles == NULL) { asb.pszArHandles = new CStringArray; ((CStringArray*)asb.pszArHandles)->Add(asb.szHndle); } asb.dLen += asBom.dLen; ((CStringArray*)asb.pszArHandles)->Add(asBom.szHndle); if (asBom.pszArHandles != NULL) { delete asBom.pszArHandles; asBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtAngSteelBoms.push_back(asBom); } } else { m_vtAngSteelBoms.push_back(asBom); } } void CBomReportExDlg::ExtractBomOfPipeHanger(AcDbEntity* pEnt) { AecDbEntityBase *pPHg = AecDbEntityBase::cast(pEnt); if (pPHg != NULL) { PipeHanger pgr; memset(&pgr, 0, sizeof(PipeHanger)); CString sSubTxt = _T(" "), sTmp; CString sName = _T(" "); pPHg->GetAt(KEY_NAME, sName); //钢筋混凝土墙、柱预埋件式单管托架图(一)(DN15-150) ---> //钢筋混凝土墙、柱预埋件式单管托架图(一) CString sName2 = sName; int nPos = sName.Find(_T('(')); if (nPos != -1) { sName2 = sName.Mid(0, nPos); sName2.TrimRight(_T("图")); } sName2.Insert(0, _T(" ")); sName = sName2; double dDN = 0; pPHg->GetAt(_T("DN"), dDN); pgr.nDn = (int)(dDN + 0.5); sTmp.Format(_T("DN%d "), (int)(dDN + 0.5)); sSubTxt += sTmp; double dVal = 0; if (pPHg->GetAt(_T("L1"), dVal)) { sTmp.Format(_T("L1=%d "), (int)(dVal + 0.5)); sSubTxt += sTmp; } dVal = 0; if (pPHg->GetAt(_T("L2"), dVal)) { sTmp.Format(_T("L2=%d "), (int)(dVal + 0.5)); sSubTxt += sTmp; } dVal = 0; if (pPHg->GetAt(_T("L3"), dVal)) { sTmp.Format(_T("L3=%d "), (int)(dVal + 0.5)); sSubTxt += sTmp; } dVal = 0; if (pPHg->GetAt(_T("H"), dVal)) { sTmp.Format(_T("H=%d "), (int)(dVal + 0.5)); sSubTxt += sTmp; } dVal = 0; if (pPHg->GetAt(_T("H1"), dVal)) { sTmp.Format(_T("H1=%d "), (int)(dVal + 0.5)); sSubTxt += sTmp; } dVal = 0; if (pPHg->GetAt(_T("H2"), dVal)) { sTmp.Format(_T("H2=%d "), (int)(dVal + 0.5)); sSubTxt += sTmp; } CString sPNo = _T(""); pPHg->GetAt(_T("PAGENO"), sPNo); CString sRem; sRem.Format(_T(" 03S402室内管道支架及吊架 第%s页"), sPNo); pPHg->GetAt(KEY_BOMNO, pgr.szBomNo); pPHg->objectId().handle().getIntoAsciiBuffer(pgr.szHndle); if (pgr.pszArHandles == NULL) { pgr.pszArHandles = new CStringArray; ((CStringArray *)pgr.pszArHandles)->Add(pgr.szHndle); } _tcscpy(pgr.szName, (LPCTSTR)sName); _tcscpy(pgr.szSubTxt, (LPCTSTR)sSubTxt); _tcscpy(pgr.szRem, (LPCTSTR)sRem); bool bSummed = false; //汇总加入 if (!m_vtPipeHgBoms.empty()) { bSummed = false; for (int i = 0; i < m_vtPipeHgBoms.size(); i++) { PipeHanger &phgr = m_vtPipeHgBoms.at(i); //等尺寸 -- Dxt if ( pgr.nDn == phgr.nDn && _tcscmp(pgr.szName,phgr.szName) == 0) { if (phgr.pszArHandles == NULL) { phgr.pszArHandles = new CStringArray; ((CStringArray *)phgr.pszArHandles)->Add(phgr.szHndle); } phgr.nCount += 1; ((CStringArray *)phgr.pszArHandles)->Add(pgr.szHndle); if (pgr.pszArHandles != NULL) { delete pgr.pszArHandles; pgr.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtPipeHgBoms.push_back(pgr); } } else { m_vtPipeHgBoms.push_back(pgr); } } } //支墩 void CBomReportExDlg::ExtractBomOfBHolder(AecDbBossHolder* pBHolder) { AecDbObjXDataMap* pMap = pBHolder->GetSpecialtyData(AcDb::kForRead); ASteel atl; if ( pBHolder->GetASteelLength(atl) ) { CString sSn = _T(""); pBHolder->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); AngSteelBom asBom; memset(&asBom,0,sizeof(AngSteelBom)); asBom.dLen = atl.L / 1000.0;//米 asBom.dW = atl.W; asBom.dt = atl.t; _tcscpy(asBom.szMertial,atl.szMat); _tcscpy(asBom.szSN,sSn); pMap->GetAt(KEY_BOMNO,asBom.szBomNo); pBHolder->objectId().handle().getIntoAsciiBuffer(asBom.szHndle); if (asBom.pszArHandles == NULL) { asBom.pszArHandles = new CStringArray; ((CStringArray*)asBom.pszArHandles)->Add(asBom.szHndle); } bool bSummed = false; //汇总加入 if (!m_vtAngSteelBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtAngSteelBoms.size();i++) { AngSteelBom& asb = m_vtAngSteelBoms.at(i); //等尺寸 -- Dxt if (fabs(asb.dW - asBom.dW) < 1.e-2 && fabs(asb.dt - asBom.dt) < 1.e-2 ) { if (asb.pszArHandles == NULL) { asb.pszArHandles = new CStringArray; ((CStringArray*)asb.pszArHandles)->Add(asb.szHndle); } asb.dLen += asBom.dLen; ((CStringArray*)asb.pszArHandles)->Add(asBom.szHndle); if (asBom.pszArHandles != NULL) { delete asBom.pszArHandles; asBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtAngSteelBoms.push_back(asBom); } } else { m_vtAngSteelBoms.push_back(asBom); } } } //护栏 void CBomReportExDlg::ExtractBomOfGBar(AecDbGuardBar* pGBar) { AecDbObjXDataMap* pMap = pGBar->GetSpecialtyData(AcDb::kForRead); GuardBar bar; pGBar->GetGuardBarData(bar); double dLen = pGBar->GetLength(); CString sSn = _T(""); pGBar->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); GuarBarBom gbarBom; memset(&gbarBom,0,sizeof(GuarBarBom)); gbarBom.dD = bar.dD; gbarBom.dt = bar.dt; gbarBom.dH = bar.dH; gbarBom.dLen = dLen / 1000.0; _tcscpy(gbarBom.m_sMaterial,bar.m_sMaterial); _tcscpy(gbarBom.m_sFactory,bar.m_sFactory); _tcscpy(gbarBom.szSN,sSn); pMap->GetAt(KEY_BOMNO,gbarBom.szBomNo); pGBar->objectId().handle().getIntoAsciiBuffer(gbarBom.szHndle); if (gbarBom.pszArHandles == NULL) { gbarBom.pszArHandles = new CStringArray; ((CStringArray*)gbarBom.pszArHandles)->Add(gbarBom.szHndle); } bool bSummed = false; //汇总加入 if (!m_vtGuarBarBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtGuarBarBoms.size();i++) { GuarBarBom& gbb = m_vtGuarBarBoms.at(i); //等尺寸 -- Dxt if (fabs(gbb.dD - gbarBom.dD) < 1.e-2 && fabs(gbb.dH - gbarBom.dH) < 1.e-2 ) { if (gbb.pszArHandles == NULL) { gbb.pszArHandles = new CStringArray; ((CStringArray*)gbb.pszArHandles)->Add(gbb.szHndle); } gbb.dLen += gbarBom.dLen; ((CStringArray*)gbb.pszArHandles)->Add(gbarBom.szHndle); if (gbarBom.pszArHandles != NULL) { delete gbarBom.pszArHandles; gbarBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtGuarBarBoms.push_back(gbarBom); } } else { m_vtGuarBarBoms.push_back(gbarBom); } } //圆护爬梯 void CBomReportExDlg::ExtractBomOfCStair(AecDbClimbStair* pCStair) { AecDbObjXDataMap* pMap = pCStair->GetSpecialtyData(AcDb::kForRead); ClimbStair data; pCStair->GetClimbStairData(data); CString sSn = _T(""); pCStair->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); ClimbStairBom clbSBom; memset(&clbSBom,0,sizeof(ClimbStairBom)); clbSBom.dD = data.dD; clbSBom.dH = data.dH; _tcscpy(clbSBom.m_sMaterial,data.m_sMaterial); _tcscpy(clbSBom.m_sFactory,data.m_sFactory); _tcscpy(clbSBom.szSN,sSn); pMap->GetAt(KEY_BOMNO,clbSBom.szBomNo); pCStair->objectId().handle().getIntoAsciiBuffer(clbSBom.szHndle); if (clbSBom.pszArHandles == NULL) { clbSBom.pszArHandles = new CStringArray; ((CStringArray*)clbSBom.pszArHandles)->Add(clbSBom.szHndle); } bool bSummed = false; // //汇总加入 if (!m_vtClimbStairBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtClimbStairBoms.size();i++) { ClimbStairBom& csb = m_vtClimbStairBoms.at(i); //等尺寸 -- Dxt if (fabs(csb.dD - clbSBom.dD) < 1.e-2 && fabs(csb.dH - clbSBom.dH) < 1.e-2 ) { if (csb.pszArHandles == NULL) { csb.pszArHandles = new CStringArray; ((CStringArray*)csb.pszArHandles)->Add(csb.szHndle); } csb.nCount += 1; ((CStringArray*)csb.pszArHandles)->Add(clbSBom.szHndle); if (clbSBom.pszArHandles != NULL) { delete clbSBom.pszArHandles; clbSBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtClimbStairBoms.push_back(clbSBom); } } else { m_vtClimbStairBoms.push_back(clbSBom); } } //直梯子 void CBomReportExDlg::ExtractBomOfLStair(AecDbLineStair* pLStair) { AecDbObjXDataMap* pMap = pLStair->GetSpecialtyData(AcDb::kForRead); LineStair data; pLStair->GetLineStairData(data); CString sSn = _T(""); pLStair->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); double dLen = pLStair->GetLength(); LineStairBom lnStBom; memset(&lnStBom,0,sizeof(LineStairBom)); lnStBom.dLen = dLen / 1000.0; lnStBom.dW = data.dW; lnStBom.dH = data.bar.dH; _tcscpy(lnStBom.m_sMaterial,data.m_sMaterial); _tcscpy(lnStBom.m_sFactory,data.m_sFactory); _tcscpy(lnStBom.m_sRem,_T("定制直梯")); _tcscpy(lnStBom.szSN,sSn); pMap->GetAt(KEY_BOMNO,lnStBom.szBomNo); pLStair->objectId().handle().getIntoAsciiBuffer(lnStBom.szHndle); if (lnStBom.pszArHandles == NULL) { lnStBom.pszArHandles = new CStringArray; ((CStringArray*)lnStBom.pszArHandles)->Add(lnStBom.szHndle); } bool bSummed = false; // //汇总加入 if (!m_vtLineStairBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtLineStairBoms.size();i++) { LineStairBom& lsb = m_vtLineStairBoms.at(i); //等尺寸 -- Dxt if (fabs(lsb.dW - lnStBom.dW) < 1.e-2 && fabs(lsb.dH - lnStBom.dH) < 1.e-2 ) { if (lsb.pszArHandles == NULL) { lsb.pszArHandles = new CStringArray; ((CStringArray*)lsb.pszArHandles)->Add(lsb.szHndle); } lsb.dLen += lnStBom.dLen; ((CStringArray*)lsb.pszArHandles)->Add(lnStBom.szHndle); if (lnStBom.pszArHandles != NULL) { delete lnStBom.pszArHandles; lnStBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtLineStairBoms.push_back(lnStBom); } } else { m_vtLineStairBoms.push_back(lnStBom); } } //圆弧梯 void CBomReportExDlg::ExtractBomOfAStair(AecDbArcStair* pAStair) { AecDbObjXDataMap* pMap = pAStair->GetSpecialtyData(AcDb::kForRead); LineStair data; pAStair->GetLineStairData(data); CString sSn = _T(""); pAStair->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); double dLen = pAStair->GetLength(); LineStairBom lnStBom; memset(&lnStBom,0,sizeof(LineStairBom)); lnStBom.dLen = dLen / 1000.0; lnStBom.dW = data.dW; lnStBom.dH = data.bar.dH; _tcscpy(lnStBom.m_sMaterial,data.m_sMaterial); _tcscpy(lnStBom.m_sFactory,data.m_sFactory); _tcscpy(lnStBom.m_sRem,_T("定制弧梯")); _tcscpy(lnStBom.szSN,sSn); pMap->GetAt(KEY_BOMNO,lnStBom.szBomNo); pAStair->objectId().handle().getIntoAsciiBuffer(lnStBom.szHndle); if (lnStBom.pszArHandles == NULL) { lnStBom.pszArHandles = new CStringArray; ((CStringArray*)lnStBom.pszArHandles)->Add(lnStBom.szHndle); } bool bSummed = false; //汇总加入 if (!m_vtLineStairBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtLineStairBoms.size();i++) { LineStairBom& lsb = m_vtLineStairBoms.at(i); //等尺寸 -- Dxt if (fabs(lsb.dW - lnStBom.dW) < 1.e-2 && fabs(lsb.dH - lnStBom.dH) < 1.e-2 ) { if (lsb.pszArHandles == NULL) { lsb.pszArHandles = new CStringArray; ((CStringArray*)lsb.pszArHandles)->Add(lsb.szHndle); } lsb.dLen += lnStBom.dLen; ((CStringArray*)lsb.pszArHandles)->Add(lnStBom.szHndle); if (lnStBom.pszArHandles != NULL) { delete lnStBom.pszArHandles; lnStBom.pszArHandles = NULL; } bSummed = true; break; } } //没有统计,加入 if (!bSummed) { m_vtLineStairBoms.push_back(lnStBom); } } else { m_vtLineStairBoms.push_back(lnStBom); } } //门窗 void CBomReportExDlg::ExtractBomOfOpening(AecDbXOpening* pOpening) { AecDbObjXDataMap* pMap = pOpening->GetSpecialtyData(AcDb::kForRead); OpeningData data; pOpening->GetOpeningData(data); CString sSn = _T(""); pOpening->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SN,sSn); OpeningBom openBom; memset(&openBom,0,sizeof(OpeningBom)); openBom.dWidth = data.dWidth; openBom.dHeight = data.dHeight; openBom.nType = data.nType; openBom.nCount = 1; _tcscpy(openBom.szName,data.szName); _tcscpy(openBom.szFactory,data.szFactory); _tcscpy(openBom.szSN,sSn); pMap->GetAt(KEY_BOMNO,openBom.szBomNo); pOpening->objectId().handle().getIntoAsciiBuffer(openBom.szHndle); if (openBom.pszArHandles == NULL) { openBom.pszArHandles = new CStringArray; ((CStringArray*)openBom.pszArHandles)->Add(openBom.szHndle); } bool bSummed = false; //汇总加入 if (!m_vtOpeningBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtOpeningBoms.size();i++) { OpeningBom& opm = m_vtOpeningBoms.at(i); if (opm.nType == openBom.nType) { //等尺寸 -- Dxt if (fabs(opm.dWidth - openBom.dWidth) < 1.e-2 && fabs(opm.dHeight - openBom.dHeight) < 1.e-2 ) { if (opm.pszArHandles == NULL) { opm.pszArHandles = new CStringArray; ((CStringArray*)opm.pszArHandles)->Add(opm.szHndle); } opm.nCount += 1; ((CStringArray*)opm.pszArHandles)->Add(openBom.szHndle); if (openBom.pszArHandles != NULL) { delete openBom.pszArHandles; openBom.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtOpeningBoms.push_back(openBom); } } else { m_vtOpeningBoms.push_back(openBom); } } void CBomReportExDlg::ExtractBomOfFlexiblePipe(AecDbEwFlexiblePipe* pFxPipe) { if (pFxPipe != NULL) { AecDbObjXDataMap *pXDataMap = pFxPipe->GetSpecialtyData(AcDb::kForRead); XGPipeBom data; memset(&data, 0, sizeof(XGPipeBom)); pXDataMap->GetAt(KEY_NAME, data.szPName); pXDataMap->GetAt(KEY_MATERIAL, data.szMaterial); pXDataMap->GetAt(PIPE_D, data.dOD); pXDataMap->GetAt(PIPE_THICK, data.dt); pXDataMap->GetAt(PIPE_DN, data.dDN); pXDataMap->GetAt(PID_PIPE_DTEMPER, data.szWorkTmp); pXDataMap->GetAt(PID_PIPE_DPRESS, data.dt); pXDataMap->GetAt(KEY_FLAMER, data.szFlameR); pXDataMap->GetAt(KEY_TM, data.szTM); pXDataMap->GetAt(KEY_Model, data.szModel); pXDataMap->GetAt(KEY_STRUF, data.szStruF); pXDataMap->GetAt(KEY_FACTORY, data.szProvider); pXDataMap->GetAt(KEY_BOMNO, data.szBomNo); pFxPipe->objectId().handle().getIntoAsciiBuffer(data.szHndle); if (data.pszArHandles == NULL) { data.pszArHandles = new CStringArray; ((CStringArray *)data.pszArHandles)->Add(data.szHndle); } data.dLen = pFxPipe->GetLength(); bool bSummed = false; if (!m_vtXGPipeBoms.empty()) { bSummed = false; for (int i = 0;i < m_vtXGPipeBoms.size();i++) { XGPipeBom &pb = m_vtXGPipeBoms.at(i); //品名 - 材质 同 if (_tcscmp(pb.szPName, data.szPName) == 0 && _tcscmp(pb.szMaterial, data.szMaterial) == 0 ) { //等尺寸 -- Dxt 汇总 if ( fabs(pb.dOD - data.dOD) < 1.e-2 && fabs(pb.dt - data.dt) < 1.e-2) { if (pb.pszArHandles == NULL) { pb.pszArHandles = new CStringArray; ((CStringArray *)pb.pszArHandles)->Add(pb.szHndle); } pb.dLen += data.dLen; ((CStringArray *)pb.pszArHandles)->Add(data.szHndle); if (data.pszArHandles != NULL) { delete data.pszArHandles; data.pszArHandles = NULL; } bSummed = true; break; } } } //没有统计,加入 if (!bSummed) { m_vtXGPipeBoms.push_back(data); } } else { m_vtXGPipeBoms.push_back(data); } } } void CBomReportExDlg::ShowtoReportlist() { m_wndObjTreeList.DeleteAllItems(); //{_T("序号"),_T("名称"),_T("规格"),_T("材料"),_T("单位"),_T("数量"),_T("备注"),_T("标准号"),_T("H"),NULL}; static CString sABCD = _T("ABCDEFGHIJKLMNOPQRSTUVWXYZ0"); CString sSys,sSysName,sNo,sSpec,sLen,sVal,sPipe,sRem; HTREEITEM pRoot = NULL; HTREEITEM hSub = NULL; int nNo = 0,nPos = -1,nABCD = 0, nnn = 0; for (POSITION ps = m_lstSys.GetHeadPosition();ps != NULL;) { sSys = m_lstSys.GetNext(ps); if (nABCD > 25) nABCD = 0;//从0开始 if (!m_bNoNotOnClass) nNo = 0; sSysName = sSys; sSysName.TrimLeft(); sSysName.TrimRight(); if (sSysName.Find(_T("系统")) == -1) { sSysName += _T("系统"); } pRoot = m_wndObjTreeList.InsertItem(_T(""),IMG_SYS,IMG_SYS,TVI_ROOT); m_wndObjTreeList.SetItem(pRoot,1,TVIF_TEXT,sSysName,0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,2,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,3,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,4,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,5,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,6,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,7,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); //pipe for (int i = 0;i < m_vtPipeBoms.size();i++) { PipeBom& pBom = m_vtPipeBoms.at(i); if (sSys.CompareNoCase(pBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec.Format(_T("D%dx%.1f"),pBom.nD,pBom.fThick); sLen.Format(_T("%.3f"),pBom.dLen / 1000.0); sPipe = pBom.szSys; if (sPipe.Find(_T("管")) == -1) sPipe += _T("管"); sRem.Format(_T("%s (%s)"),pBom.szApp,pBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_PIPE,IMG_PIPE,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT, sPipe,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,pBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("米"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,pBom.szStd,0,0,0,0,0);//标注号 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)pBom.pszArHandles); } } //elbow for (int i = 0;i < m_vtElbowBoms.size();i++) { ElbowBom& eBom = m_vtElbowBoms.at(i); if (sSys.CompareNoCase(eBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec.Format(_T("%d"),eBom.nAngle); sSpec += _T("度弯头"); sVal.Format(_T("DN%d"),eBom.nDn); sLen.Format(_T("%d"),eBom.nCount); sRem.Format(_T("%s (%s)"), eBom.szApp, eBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,eBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,eBom.szStd,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)eBom.pszArHandles); } } //relbow for (int i = 0;i < m_vtRElbowBoms.size();i++) { RElbowBom &reBom = m_vtRElbowBoms.at(i); if (sSys.CompareNoCase(reBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec.Format(_T("%d"), reBom.nAngle); sSpec += _T("度变径弯头"); sVal.Format(_T("DN%dDN%d"), reBom.nDn, reBom.nTDn); sLen.Format(_T("%d"), reBom.nCount); sRem.Format(_T("%s (%s)"), reBom.szApp, reBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, reBom.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, reBom.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)reBom.pszArHandles); } } //reducer for (int i = 0;i < m_vtReducerBoms.size();i++) { ReducerBom& rBom = m_vtReducerBoms.at(i); if (sSys.CompareNoCase(rBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } //sSpec = _T("变径"); if (rBom.nOffset) { sSpec.Format(_T("偏心异径管 DN%dxDN%d"), __max(rBom.nD, rBom.nTD),__min(rBom.nD, rBom.nTD)); } else { sSpec.Format(_T("同心异径管 DN%dxDN%d"), __max(rBom.nD, rBom.nTD), __min(rBom.nD, rBom.nTD)); } sVal.Format(_T("D%d-D%dx%.1f L=%d"),rBom.nD,rBom.nTD,rBom.fThick,rBom.nLen); sLen.Format(_T("%d"),rBom.nCount); sRem.Format(_T("%s (%s)"), rBom.szApp, rBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,rBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT, sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,rBom.szStd,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)rBom.pszArHandles); } } //Tee for (int i = 0;i < m_vtTeeBoms.size();i++) { TeeBom& tBom = m_vtTeeBoms.at(i); if (sSys.CompareNoCase(tBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } if (tBom.nDn == tBom.nTDn) { sSpec = _T("等径三通"); sVal.Format(_T("DN%d C1=%d,C2=%d,M=%d"),tBom.nDn, tBom.nL, tBom.nL1, tBom.nB); } else { sSpec = _T("异径三通"); sVal.Format(_T("DN%dxDN%d C1=%d,C2=%d,M=%d"),tBom.nDn,tBom.nTDn, tBom.nL, tBom.nL1, tBom.nB); } sLen.Format(_T("%d"),tBom.nCount); sRem.Format(_T("%s (%s)"), tBom.szApp, tBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,tBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,tBom.szStd,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)tBom.pszArHandles); } } //LTeeBom for (int i = 0;i < m_vtLTeeBoms.size();i++) { LTeeBom& lBom = m_vtLTeeBoms.at(i); if (sSys.CompareNoCase(lBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("L三通"); sVal.Format(_T("DN%dDN%d"),lBom.nDn,lBom.nTDn); sLen.Format(_T("%d"),lBom.nCount); sRem.Format(_T("%s (%s)"), lBom.szApp, lBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,lBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT, sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,lBom.szStd,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)lBom.pszArHandles); } } //WyeBom for (int i = 0;i < m_vtWyeBoms.size();i++) { WyeBom& wBom = m_vtWyeBoms.at(i); if (sSys.CompareNoCase(wBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("Y三通"); sVal.Format(_T("DN%dDN%d"),wBom.nDn,wBom.nTDn); sLen.Format(_T("%d"),wBom.nCount); sRem.Format(_T("%s (%s)"), wBom.szApp, wBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,wBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT, sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,wBom.szStd,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)wBom.pszArHandles); } } //CrossBom for (int i = 0;i < m_vtCrossBoms.size();i++) { CrossBom& cBom = m_vtCrossBoms.at(i); if (sSys.CompareNoCase(cBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } if (cBom.nDn == cBom.nTDn) { sSpec = _T("四通"); sVal.Format(_T("DN%d"),cBom.nDn); } else { sSpec = _T("异径四通"); sVal.Format(_T("DN%dDN%d"),cBom.nDn,cBom.nTDn); } sLen.Format(_T("%d"),cBom.nCount); sRem.Format(_T("%s (%s)"), cBom.szApp, cBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,cBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT, sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,cBom.szStd,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)cBom.pszArHandles); } } //WCapBom for (int i = 0;i < m_vtWCapBoms.size();i++) { WCapBom& wcBom = m_vtWCapBoms.at(i); if (sSys.CompareNoCase(wcBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } //堵头或闷盖 sSpec = wcBom.szApp; sVal.Format(_T("DN%d"),wcBom.nDn); sLen.Format(_T("%d"),wcBom.nCount); sRem.Format(_T("%s (%s)"), wcBom.szApp, wcBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,wcBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT, sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,wcBom.szStd,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)wcBom.pszArHandles); } } //WThroughBom for (int i = 0;i < m_vtWThroughBoms.size();i++) { WThroughBom& wth = m_vtWThroughBoms.at(i); if (sSys.CompareNoCase(wth.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("直通"); sVal.Format(_T("DN%d"), wth.nDn); sLen.Format(_T("%d"), wth.nCount); sRem.Format(_T("%s (%s)"), wth.szApp, wth.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, wth.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, wth.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)wth.pszArHandles); } } //WUJoinBom for (int i = 0; i < m_vtWUJoinBoms.size(); i++) { WUJoinBom& wuj = m_vtWUJoinBoms.at(i); if (sSys.CompareNoCase(wuj.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("活接"); sVal.Format(_T("DN%d"), wuj.nDn); sLen.Format(_T("%d"), wuj.nCount); sRem.Format(_T("%s (%s)"), wuj.szApp, wuj.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, wuj.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, wuj.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)wuj.pszArHandles); } } //WRJoinBom for (int i = 0; i < m_vtWRJoinBoms.size(); i++) { WRJoinBom& wrj = m_vtWRJoinBoms.at(i); if (sSys.CompareNoCase(wrj.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("缩接"); sVal.Format(_T("DN%d"), wrj.nDn); sLen.Format(_T("%d"), wrj.nCount); sRem.Format(_T("%s (%s)"), wrj.szApp, wrj.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, wrj.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, wrj.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)wrj.pszArHandles); } } //WOJoinBom for (int i = 0; i < m_vtWOJoinBoms.size(); i++) { WOJoinBom& woj = m_vtWOJoinBoms.at(i); if (sSys.CompareNoCase(woj.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("外螺纹接头"); sVal.Format(_T("DN%d"), woj.nDn); sLen.Format(_T("%d"), woj.nCount); sRem.Format(_T("%s (%s)"), woj.szApp, woj.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, woj.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, woj.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)woj.pszArHandles); } } //WIJoinBom for (int i = 0; i < m_vtWIJoinBoms.size(); i++) { WIJoinBom& wij = m_vtWIJoinBoms.at(i); if (sSys.CompareNoCase(wij.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("内螺纹接头"); sVal.Format(_T("DN%d"), wij.nDn); sLen.Format(_T("%d"), wij.nCount); sRem.Format(_T("%s (%s)"), wij.szApp, wij.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, wij.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, wij.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)wij.pszArHandles); } } //WFlangeBom for (int i = 0;i < m_vtWFlangeBoms.size();i++) { WFlangeBom& wfBom = m_vtWFlangeBoms.at(i); if (sSys.CompareNoCase(wfBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("法兰"); sVal.Format(_T("DN%d %s"),wfBom.nDn,wfBom.szLevel); sLen.Format(_T("%d"),wfBom.nCount); sRem.Format(_T("%s (%s)"), wfBom.szSys, wfBom.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,wfBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("片"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT, sRem,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,wfBom.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)wfBom.pszArHandles); } } //补强圈 for (int i = 0;i < m_vtRPBoms.size();i++) { RPBom &rp = m_vtRPBoms.at(i); if (sSys.CompareNoCase(rp.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("补强圈"); sVal.Format(_T("DN%d %s"), rp.nDn, rp.szLevel); sLen.Format(_T("%d"), rp.nCount); sRem.Format(_T("%s (%s)"), rp.szApp, rp.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, rp.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, rp.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)rp.pszArHandles); } } //半管接头 for (int i = 0;i < m_vtHPBoms.size();i++) { HPBom &hp = m_vtHPBoms.at(i); if (sSys.CompareNoCase(hp.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("半管接头"); sVal.Format(_T("DN%d %s"), hp.nDn, hp.szLevel); sLen.Format(_T("%d"), hp.nCount); sRem.Format(_T("%s (%s)"), hp.szApp, hp.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, hp.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, hp.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)hp.pszArHandles); } } //八字盲板 插板 for (int i = 0;i < m_vtSPBBoms.size();i++) { SPBBom &sp = m_vtSPBBoms.at(i); if (sSys.CompareNoCase(sp.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = sp.nKind ? _T("插板") : _T("八字盲板"); sVal.Format(_T("DN%d %s"), sp.nDn, sp.szLevel); sLen.Format(_T("%d"), sp.nCount); sRem.Format(_T("%s (%s)"), sp.szApp, sp.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, sp.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, sp.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)sp.pszArHandles); } } //卡箍 for (int i = 0;i < m_vtWFlxJoinBoms.size();i++) { WFlxJoinBom &wFlxJnBom = m_vtWFlxJoinBoms.at(i); if (sSys.CompareNoCase(wFlxJnBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("卡箍"); sVal.Format(_T("DN%d %s"), wFlxJnBom.nDn, wFlxJnBom.szDescr); sLen.Format(_T("%d"), wFlxJnBom.nCount); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, wFlxJnBom.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, wFlxJnBom.szDescr, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, wFlxJnBom.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)wFlxJnBom.pszArHandles); } } //垫片 if (!m_bNoGasket) { for (int i = 0; i < m_vtWGasketBoms.size(); i++) { WGasket &wgst = m_vtWGasketBoms.at(i); if (sSys.CompareNoCase(wgst.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("垫片"); sVal = wgst.szDescr; sLen.Format(_T("%d"), wgst.nCount); sRem.Format(_T("%s (%s)"), wgst.szSys, wgst.szLevel); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, wgst.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("片"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, wgst.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)wgst.pszArHandles); } } } //螺栓 for (int i = 0; i < m_vtWBoltBoms.size(); i++) { WBolt &wblt = m_vtWBoltBoms.at(i); if (sSys.CompareNoCase(wblt.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = wblt.szType; sVal = wblt.szDescr; sLen.Format(_T("%d"), wblt.nCount); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, wblt.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, wblt.szLevel, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, wblt.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)wblt.pszArHandles); } } //螺母 for (int i = 0; i < m_vtWNutBoms.size(); i++) { WNut &wnt = m_vtWNutBoms.at(i); if (sSys.CompareNoCase(wnt.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = wnt.szType; sVal = wnt.szDescr; sLen.Format(_T("%d"), wnt.nCount); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, wnt.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, wnt.szLevel, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, wnt.szStd, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)wnt.pszArHandles); } } //WEquBom for (int i = 0;i < m_vtWEquBoms.size();i++) { WEquBom& wqBom = m_vtWEquBoms.at(i); if (sSys.CompareNoCase(wqBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sLen.Format(_T("%d"),wqBom.nCount); sVal = wqBom.szName; sSpec = _T(""); nPos = sVal.Find(_T("DN")); if (nPos != -1) { sSpec = sVal.Mid(nPos); sSpec += _T(" "); sSpec += wqBom.szLevel; } hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,wqBom.szName,0,0,0,0,0);//名称 m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sSpec,0,0,0,0,0);//尺寸 m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,_T("成品"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT, wqBom.szLevel,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT, wqBom.szStd,0,0,0,0,0);// m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)wqBom.pszArHandles); wqBom.bBomed = TRUE; } } nABCD += 1; if (nNo == 0) { m_wndObjTreeList.DeleteItem(pRoot); } } //线管... if (!m_vtXGPipeBoms.empty()) { pRoot = m_wndObjTreeList.InsertItem(_T(""), IMG_SYS, IMG_SYS, TVI_ROOT); m_wndObjTreeList.SetItem(pRoot, 1, TVIF_TEXT, _T("线管"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 2, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 4, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 5, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); for (int i = 0;i < m_vtXGPipeBoms.size();i++) { XGPipeBom &pBom = m_vtXGPipeBoms.at(i); sPipe = pBom.szPName; sSpec = pBom.szModel; sLen.Format(_T("%.1f"), pBom.dLen / 1000.0); sVal.Format(_T("阻燃等级:%s 结构形式:%s"),pBom.szFlameR,pBom.szStruF); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_PIPE, IMG_PIPE, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sPipe, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, pBom.szMaterial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("米"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, pBom.szStruF, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)pBom.pszArHandles); } } //套管 //其他设备 if (!m_vtCoverPipeBoms.empty()) { pRoot = m_wndObjTreeList.InsertItem(_T(""), IMG_SYS, IMG_SYS, TVI_ROOT); m_wndObjTreeList.SetItem(pRoot, 1, TVIF_TEXT, _T("套管"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 2, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 4, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 5, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); //CoverPipeBom nNo = 0; for (int i = 0; i < m_vtCoverPipeBoms.size(); i++) { CoverPipeBom &cpBom = m_vtCoverPipeBoms.at(i); nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sLen.Format(_T("%d"), cpBom.nCount); sSpec.Format(_T("D%dx%.1f"), (int)(cpBom.nD + 0.5), cpBom.fThick); sVal = _T(""); if (cpBom.nD2 > 0) sVal.Format(_T("翼环D%d 数量%d个"), cpBom.nD2, cpBom.nD2s); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, cpBom.szName, 0, 0, 0, 0, 0);//名称 m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0);//尺寸 m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, cpBom.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("个"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, sVal, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);// m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)cpBom.pszArHandles); nABCD += 1; if (nNo == 0) { m_wndObjTreeList.DeleteItem(pRoot); } } } //其他设备 pRoot = m_wndObjTreeList.InsertItem(_T(""),IMG_SYS,IMG_SYS,TVI_ROOT); m_wndObjTreeList.SetItem(pRoot,1,TVIF_TEXT,_T("其他设备"),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,2,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,3,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,4,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,5,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,6,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,7,TVIF_TEXT,_T(""),0,0,0,0,0); //WEquBom nNo = 0; for (int i = 0;i < m_vtWEquBoms.size();i++) { WEquBom& wqBom = m_vtWEquBoms.at(i); if (wqBom.bBomed) continue; nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sLen.Format(_T("%d"),wqBom.nCount); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,wqBom.szName,0,0,0,0,0);//名称 m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,wqBom.szSpec,0,0,0,0,0);//尺寸 规格 m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,_T("成品"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT, wqBom.szSys,0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,_T(""),0,0,0,0,0);// m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)wqBom.pszArHandles); } if (nNo > 0) nABCD += 1; if (nNo == 0) { m_wndObjTreeList.DeleteItem(pRoot); } //暖通 for (POSITION ps = m_lstHSys.GetHeadPosition();ps != NULL;) { sSys = m_lstHSys.GetNext(ps); if (!m_bNoNotOnClass) nNo = 0; sSysName = sSys; if (sSysName.Find(_T("系统")) == -1) { sSysName += _T("系统"); } pRoot = m_wndObjTreeList.InsertItem(_T(""),IMG_SYS,IMG_SYS,TVI_ROOT); m_wndObjTreeList.SetItem(pRoot,1,TVIF_TEXT,sSysName,0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,2,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,3,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,4,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,5,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,6,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,7,TVIF_TEXT,_T(""),0,0,0,0,0); //pipe for (int i = 0;i < m_vtDuctBoms.size();i++) { DuctBom& dBom = m_vtDuctBoms.at(i); if (sSys.CompareNoCase(dBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec.Format(_T("%dx%dx%.1f"),(int)(dBom.dW+0.5),(int)(dBom.dH+0.5),dBom.dt); sLen.Format(_T("%.1f"),dBom.dLen); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_PIPE,IMG_PIPE,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,_T("风管"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,dBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("米"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)dBom.pszArHandles); } } //HElbow for (int i = 0;i < m_vtHElbowBoms.size();i++) { HElbowBom& hEBom = m_vtHElbowBoms.at(i); if (sSys.CompareNoCase(hEBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("风管弯头"); sLen.Format(_T("%d"),hEBom.nCount); sVal.Format(_T("%dx%d H%dx%d t=%.1f"),(int)(hEBom.dSw + 0.5),hEBom.dSh,hEBom.dEw,hEBom.dEh,hEBom.dt); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,hEBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)hEBom.pszArHandles); } } //HTeeBom for (int i = 0;i < m_vtHTeeBoms.size();i++) { HTeeBom& hTBom = m_vtHTeeBoms.at(i); if (sSys.CompareNoCase(hTBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("风管三通"); sLen.Format(_T("%d"),hTBom.nCount); sVal.Format(_T("%dx%d %dx%d %dx%d t=%.1f"),(int)(hTBom.dSw+0.5),(int)(hTBom.dSh+0.5), (int)(hTBom.dEw+0.5),(int)(hTBom.dEh+0.5), (int)(hTBom.dBw+0.5),(int)(hTBom.dBh+0.5), hTBom.dt); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,hTBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)hTBom.pszArHandles); } } //HCrossBom for (int i = 0;i < m_vtHCrossBoms.size();i++) { HCrossBom& hCrsBom = m_vtHCrossBoms.at(i); if (sSys.CompareNoCase(hCrsBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("风管四通"); sLen.Format(_T("%d"),hCrsBom.nCount); sVal.Format(_T("%dx%d %dx%d %dx%d %dx%d t=%.1f"),(int)(hCrsBom.dSw+0.5),(int)(hCrsBom.dSh+0.5), (int)(hCrsBom.dEw+0.5),(int)(hCrsBom.dEh+0.5), (int)(hCrsBom.dBw1+0.5),(int)(hCrsBom.dBh1+0.5), (int)(hCrsBom.dBw2+0.5),(int(hCrsBom.dBh2+0.5), hCrsBom.dt)); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,hCrsBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)hCrsBom.pszArHandles); } } //HOffsetBom for (int i = 0;i < m_vtHOffsetBoms.size();i++) { HOffsetBom& hOff = m_vtHOffsetBoms.at(i); if (sSys.CompareNoCase(hOff.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("风管四通"); sLen.Format(_T("%d"),hOff.nCount); sVal.Format(_T("%dx%d L=%d W=%d %d度,%.1f"),(int)(hOff.dSw+0.5),(int)(hOff.dEw+0.5), (int)(hOff.dOffL + 0.5),(int)(hOff.dOffW+0.5),(int)(hOff.dAngle+0.5),hOff.dt); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,hOff.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)hOff.pszArHandles); } } nABCD++; } //桥架 for (POSITION ps = m_lstESys.GetHeadPosition();ps != NULL;) { sSys = m_lstESys.GetNext(ps); if (!m_bNoNotOnClass) nNo = 0; sSysName = sSys; if (sSysName.Find(_T("系统")) == -1) { sSysName += _T("系统"); } pRoot = m_wndObjTreeList.InsertItem(_T(""),IMG_SYS,IMG_SYS,TVI_ROOT); m_wndObjTreeList.SetItem(pRoot,1,TVIF_TEXT,sSysName,0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,2,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,3,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,4,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,5,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,6,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,7,TVIF_TEXT,_T(""),0,0,0,0,0); for(int i = 0;i < m_vtECabletryBoms.size();i++) { ECabletryBom& eCBom = m_vtECabletryBoms.at(i); if (sSys.CompareNoCase(eCBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("桥架"); sLen.Format(_T("%.1f"),eCBom.dLen); sVal.Format(_T("%dx%d t=%.1f"),(int)(eCBom.dW+0.5),(int)(eCBom.dH+0.5),eCBom.dt); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,eCBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)eCBom.pszArHandles); } } for (int i = 0;i < m_vtECabFitBoms.size();i++) { ECabFitBom& eBom = m_vtECabFitBoms.at(i); if (sSys.CompareNoCase(eBom.szSys) == 0) { nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sLen.Format(_T("%d"),eBom.nCount); EFittingType eType = (EFittingType)eBom.nType; switch(eType) { case eElbow: { sSpec = _T("弯头"); sVal.Format(_T("%dx%d A=%.1f度 t=%.1f"),(int)(eBom.dW+0.5),(int)(eBom.dH+0.5),eBom.dAngle,eBom.dt); break; } case eTee: { sSpec = _T("三通"); sVal.Format(_T("%dx%d L=%.1f t=%.1f"),(int)(eBom.dW+0.5),(int)(eBom.dH+0.5),eBom.dLx,eBom.dt); break; } case eCross: { sSpec = _T("四通"); sVal.Format(_T("%dx%d L=%.1f t=%.1f"),(int)(eBom.dW+0.5),(int)(eBom.dH+0.5),eBom.dLx,eBom.dt); break; } default: break; } hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,eBom.szMertial,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)eBom.pszArHandles); } } nABCD++; } //门窗 if ( !m_vtOpeningBoms.empty() ) { pRoot = m_wndObjTreeList.InsertItem(_T(""),IMG_SYS,IMG_SYS,TVI_ROOT); m_wndObjTreeList.SetItem(pRoot,1,TVIF_TEXT,_T("门窗"),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,2,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,3,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,4,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,5,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,6,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(pRoot,7,TVIF_TEXT,_T(""),0,0,0,0,0); } if (!m_bNoNotOnClass) nNo = 0; for(int i= 0;i < m_vtOpeningBoms.size();i++) { OpeningBom& opBom = m_vtOpeningBoms.at(i); nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sLen.Format(_T("%d"),opBom.nCount); sSpec = opBom.szName; sVal.Format(_T("宽高 %dx%d"),(int)(opBom.dWidth+0.5),(int)(opBom.dHeight+0.5)); hSub = m_wndObjTreeList.InsertItem(sNo,IMG_FIT,IMG_FIT,pRoot); m_wndObjTreeList.SetItem(hSub,1,TVIF_TEXT,sSpec,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,2,TVIF_TEXT,sVal,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,3,TVIF_TEXT,_T(""),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,4,TVIF_TEXT,_T("个"),0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,5,TVIF_TEXT,sLen,0,0,0,0,0); m_wndObjTreeList.SetItem(hSub,6,TVIF_TEXT,_T(""),0,0,0,0,0);//备注 m_wndObjTreeList.SetItem(hSub,7,TVIF_TEXT,opBom.szFactory,0,0,0,0,0);//备注 m_wndObjTreeList.SetItemData(hSub,(DWORD_PTR)opBom.pszArHandles); } //支吊架 if (!m_vtAngSteelBoms.empty()) { pRoot = m_wndObjTreeList.InsertItem(_T(""), IMG_SYS, IMG_SYS, TVI_ROOT); m_wndObjTreeList.SetItem(pRoot, 1, TVIF_TEXT, _T("支吊架角钢"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 2, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 4, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 5, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); } if (!m_bNoNotOnClass) nNo = 0; for (int i = 0;i < m_vtAngSteelBoms.size();i++) { AngSteelBom &ast = m_vtAngSteelBoms.at(i); nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("支吊架"); sVal.Format(_T("角钢 %.1fx%.1f t=%.1f"), ast.dW, ast.dW,ast.dt); sLen.Format(_T("%.1f"), ast.dLen); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, ast.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("长度(米)"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)ast.pszArHandles); } //支吊架吊杆 if (!m_vtTierods.empty()) { pRoot = m_wndObjTreeList.InsertItem(_T(""), IMG_SYS, IMG_SYS, TVI_ROOT); m_wndObjTreeList.SetItem(pRoot, 1, TVIF_TEXT, _T("支吊架吊杆"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 2, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 4, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 5, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); } if (!m_bNoNotOnClass) nNo = 0; for (int i = 0;i < m_vtTierods.size();i++) { TierodBom &tb = m_vtTierods.at(i); nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("支吊架吊杆"); sVal.Format(_T("钢杆 D%.1f"), tb.dD); sLen.Format(_T("L=%.1f"), tb.dL / 1000.0); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, tb.szMertial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("长度(米)"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)tb.pszArHandles); } //托架 if (!m_vtPipeHgBoms.empty()) { pRoot = m_wndObjTreeList.InsertItem(_T(""), IMG_SYS, IMG_SYS, TVI_ROOT); m_wndObjTreeList.SetItem(pRoot, 1, TVIF_TEXT, _T("管托架支座"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 2, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 4, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 5, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); if (!m_bNoNotOnClass) nNo = 0; for (int i = 0;i < m_vtPipeHgBoms.size();i++) { PipeHanger &pgr = m_vtPipeHgBoms.at(i); nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = pgr.szName; sVal.Format(_T("%d 个"), pgr.nCount); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, pgr.szSubTxt, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("数量(个)"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, pgr.szRem, 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, _T("《03S402室内管道支架及吊架》"), 0, 0, 0, 0, 0);//标准号 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)pgr.pszArHandles); } } //护栏 if (!m_vtGuarBarBoms.empty()) { pRoot = m_wndObjTreeList.InsertItem(_T(""), IMG_SYS, IMG_SYS, TVI_ROOT); m_wndObjTreeList.SetItem(pRoot, 1, TVIF_TEXT, _T("护栏"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 2, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 4, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 5, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); } if (!m_bNoNotOnClass) nNo = 0; for (int i = 0;i < m_vtGuarBarBoms.size();i++) { GuarBarBom& gbb = m_vtGuarBarBoms.at(i); nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("护栏"); sVal.Format(_T("护栏 %.1fx%.1f"), gbb.dD, gbb.dt); sLen.Format(_T("%.1f"), gbb.dLen); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, gbb.m_sMaterial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("长度(米)"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)gbb.pszArHandles); } //爬梯 if (!m_vtClimbStairBoms.empty()) { pRoot = m_wndObjTreeList.InsertItem(_T(""), IMG_SYS, IMG_SYS, TVI_ROOT); m_wndObjTreeList.SetItem(pRoot, 1, TVIF_TEXT, _T("爬梯"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 2, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 4, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 5, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); } if (!m_bNoNotOnClass) nNo = 0; for (int i = 0;i < m_vtClimbStairBoms.size();i++) { ClimbStairBom &csb = m_vtClimbStairBoms.at(i); nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("护栏"); sVal.Format(_T("护栏直径=%.1f H=%.1f"), csb.dD, csb.dH); sLen.Format(_T("%.1f"), csb.dH / 1000); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, csb.m_sMaterial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("总套长度(米)"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)csb.pszArHandles); } //直梯 圆弧梯 if (!m_vtLineStairBoms.empty()) { pRoot = m_wndObjTreeList.InsertItem(_T(""), IMG_SYS, IMG_SYS, TVI_ROOT); m_wndObjTreeList.SetItem(pRoot, 1, TVIF_TEXT, _T("直梯,圆弧梯"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 2, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 3, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 4, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 5, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(pRoot, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0); } if (!m_bNoNotOnClass) nNo = 0; for (int i = 0; i < m_vtLineStairBoms.size(); i++) { LineStairBom &lsb = m_vtLineStairBoms.at(i); nNo += 1; if (m_bIsdigitNo) { sNo.Format(_T("%d"), nNo); } else { sNo.Format(_T("%c%d"), sABCD.GetAt(nABCD), nNo); } sSpec = _T("直梯,圆弧梯"); sVal.Format(_T("直梯,圆弧梯 高度=%.1f 宽度=%.1f"), lsb.dH,lsb.dW); sLen.Format(_T("%.1f"), lsb.dLen); hSub = m_wndObjTreeList.InsertItem(sNo, IMG_FIT, IMG_FIT, pRoot); m_wndObjTreeList.SetItem(hSub, 1, TVIF_TEXT, sSpec, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 2, TVIF_TEXT, sVal, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 3, TVIF_TEXT, lsb.m_sMaterial, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 4, TVIF_TEXT, _T("总套长度(米)"), 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 5, TVIF_TEXT, sLen, 0, 0, 0, 0, 0); m_wndObjTreeList.SetItem(hSub, 6, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 7, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//备注 m_wndObjTreeList.SetItem(hSub, 8, TVIF_TEXT, _T(""), 0, 0, 0, 0, 0);//h m_wndObjTreeList.SetItemData(hSub, (DWORD_PTR)lsb.pszArHandles); } } void CBomReportExDlg::WriteBomNoToEnt(HTREEITEM hParent) { AcDbDatabase* pDb = acdbCurDwg(); CString sNo,sHandle,sRem,sMat; AcDbObjectId id; HTREEITEM hChild = m_wndObjTreeList.GetChildItem(hParent); while(hChild != NULL) { sNo = m_wndObjTreeList.GetItemText(hChild); //{_T("序号"),_T("名称"),_T("规格"),_T("材料"),_T("单位"),_T("数量"),_T("备注") //sMat = m_wndObjTreeList.GetItemText(hChild,3); //sRem = m_wndObjTreeList.GetItemText(hChild,6); DWORD_PTR pXData = m_wndObjTreeList.GetItemData(hChild); if (pXData != NULL) { CStringArray* pszArHandles = (CStringArray*)pXData; if (pszArHandles == NULL) continue; for (int i = 0;i < pszArHandles->GetSize();i++) { sHandle = pszArHandles->GetAt(i); AcDbHandle hd((LPCTSTR)sHandle); if ( Acad::eOk == pDb->getAcDbObjectId(id,false,hd) ) { AcDbEntity* pEnt = NULL; AecDbObjXDataMap* pMap = NULL; if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForWrite)) { AecDbEntityBase* pEntBase = AecDbEntityBase::cast(pEnt); if (pEntBase != NULL) { pMap = pEntBase->GetSpecialtyData(AcDb::kForWrite); if (pMap != NULL) { pMap->SetAt(KEY_BOMNO,sNo); //pMap->SetAt(KEY_REM,sRem); pEntBase->UpdateDrableSpecData(BIMDATA_APP,KEY_BOMNO,sNo); } } AecDbCurveBase* pCrvBase = AecDbCurveBase::cast(pEnt); if (pCrvBase != NULL) { pMap = pCrvBase->GetSpecialtyData(AcDb::kForWrite); if (pMap != NULL) { pMap->SetAt(KEY_BOMNO,sNo); //pMap->SetAt(KEY_REM,sRem); pCrvBase->UpdateDrableSpecData(BIMDATA_APP,KEY_BOMNO,sNo); } } pEnt->close(); } } } } //acutPrintf(_T("\nNO=%s"),sNo); hChild = m_wndObjTreeList.GetNextSiblingItem(hChild); } } void CBomReportExDlg::ReSortBomNo(HTREEITEM hParent,int& nGlobalIndex,int nABCD) { CString sNo,sL = _T(""),sTmpL = _T(""),sNoT; static CString sABCD = _T("ABCDEFGHIJKLMNOPQRSTUVWXYZ0"); int nFr = nGlobalIndex; HTREEITEM hChild = m_wndObjTreeList.GetChildItem(hParent); while(hChild != NULL) { sNo = m_wndObjTreeList.GetItemText(hChild); //字母加数字 sTmpL = _T(""); for(int i = 0;i < sNo.GetLength();i++) { TCHAR tCh = sNo.GetAt(i); if (isdigit(tCh))//数字 { break; } else { sTmpL += tCh; } } sNo.TrimLeft(sTmpL); if (sTmpL.IsEmpty()) { sNoT.Format(_T("%d"),nFr); } else { if (sL.IsEmpty()) { if (m_bIsdigitNo) { sNoT.Format(_T("%d"), nFr); } else { if (nABCD < 26 && !m_bNoNotOnClass) { sNoT.Format(_T("%s%d"), CString(sABCD.GetAt(nABCD)), nFr); } else { sNoT.Format(_T("%s%d"), sTmpL, nFr); sL = sTmpL; } } } else { if (m_bIsdigitNo) { sNoT.Format(_T("%d"), nFr); } else { if (nABCD < 26 && !m_bNoNotOnClass) { sNoT.Format(_T("%s%d"), CString(sABCD.GetAt(nABCD)), nFr); } else { sNoT.Format(_T("%s%d"), sTmpL, nFr); } } /*if (sL.CompareNoCase(sTmpL) == 0) { sNoT.Format(_T("%s%d"),sTmpL,nFr); } else { nFr = 0;//新的段开始 }*/ } } nFr++; m_wndObjTreeList.SetItemText(hChild,sNoT); //acutPrintf(_T("\nNO=%s"),sNo); hChild = m_wndObjTreeList.GetNextSiblingItem(hChild); } if (m_bIsdigitNo) { nGlobalIndex = nFr; } } void CBomReportExDlg::OnBnClickedButton1() { AcAxDocLock lock; HTREEITEM hRoot = m_wndObjTreeList.GetRootItem(); while (hRoot != NULL) { WriteBomNoToEnt(hRoot); hRoot = m_wndObjTreeList.GetNextSiblingItem(hRoot); } AfxMessageBox(_T("报表物料编号写入完毕!")); } void CBomReportExDlg::OnBnClickedButton2() { UpdateData(); int nGlobalIndex = 1; int nABCD = 0; HTREEITEM hRoot = m_wndObjTreeList.GetRootItem(); while (hRoot != NULL) { ReSortBomNo(hRoot, nGlobalIndex,nABCD); hRoot = m_wndObjTreeList.GetNextSiblingItem(hRoot); nABCD += 1; } } void CBomReportExDlg::OnBnClickedButton3() { HTREEITEM hSel = m_wndObjTreeList.GetSelectedItem(); if (hSel != NULL) { CString sNo = m_wndObjTreeList.GetItemText(hSel); //{_T("序号"),_T("名称"),_T("规格"),_T("材料"),_T("单位"),_T("数量"),_T("备注") //sMat = m_wndObjTreeList.GetItemText(hChild,3); //sRem = m_wndObjTreeList.GetItemText(hChild,6); DWORD_PTR pXData = m_wndObjTreeList.GetItemData(hSel); if (pXData != NULL) { CStringArray* pszArHandles = (CStringArray*)pXData; CString sWar; sWar.Format(_T("行序号=%s 删除为永久删除,可能导致报表不严谨!确实要删除吗?"),sNo); int nRes = AfxMessageBox(sWar,MB_YESNO); if (nRes == IDYES) { delete pszArHandles; m_wndObjTreeList.DeleteItem(hSel); } } } } void CBomReportExDlg::OnBnClickedBtTmpl() { UpdateData(); CAcModuleResourceOverride resOverride; const TCHAR *pszFilter = _T("dwg文件 (*.dwg;)|*.dwg|"); CFileDialog dlg(TRUE, _T("dwg"), NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER, pszFilter, NULL); TCHAR strFileName[MAX_PATH] = _T(""); TCHAR strFileTitle[] = _T("选择报表模板文件"); int maxChar = MAX_PATH; dlg.m_ofn.lpstrFile = strFileName; dlg.m_ofn.nMaxFile = maxChar; dlg.m_ofn.lpstrTitle = strFileTitle; if(dlg.DoModal() != IDOK) { return; } m_sBomDwg = dlg.GetPathName(); UpdateData(FALSE); } void CBomReportExDlg::OnBnClickedOk() { UpdateData(); /* old m_wndBomList.InsertColumn(0,_T("序号"),LVCFMT_LEFT,80,80); m_wndBomList.InsertColumn(1,_T("名称"),LVCFMT_LEFT,160,160); m_wndBomList.InsertColumn(2,_T("规格"),LVCFMT_LEFT,200,200); m_wndBomList.InsertColumn(3,_T("单位"),LVCFMT_LEFT,60,60); m_wndBomList.InsertColumn(4,_T("数量"),LVCFMT_LEFT,80,80); m_wndBomList.InsertColumn(6,_T("材料"),LVCFMT_LEFT,120,120); m_wndBomList.InsertColumn(6,_T("备注"),LVCFMT_LEFT,120,120); */ //new //{_T("序号"),_T("名称"),_T("规格"),_T("材料"),_T("单位"),_T("数量"),_T("备注"),_T("H"),NULL}; CopyToListCtrl(); //测试 //m_wndObjTreeList.ShowWindow(SW_HIDE); //m_wndBomList.ShowWindow(SW_SHOW); ShowWindow(SW_HIDE); DwgBomWrite(); OnOK(); delete this; } void CBomReportExDlg::DeepCopyToListCtrl(HTREEITEM hParent) { CStringArray* pszArHandles = NULL; CStringArray arHdTmps; HTREEITEM hChild = m_wndObjTreeList.GetChildItem(hParent); while(hChild != NULL) { DWORD_PTR pXData = m_wndObjTreeList.GetItemData(hChild); if (pXData == NULL) pXData = (DWORD_PTR)&arHdTmps; if (pXData != NULL) { pszArHandles = (CStringArray*)pXData; if (pszArHandles != NULL) { /* old m_wndBomList.InsertColumn(0,_T("序号"),LVCFMT_LEFT,80,80); m_wndBomList.InsertColumn(1,_T("名称"),LVCFMT_LEFT,160,160); m_wndBomList.InsertColumn(2,_T("规格"),LVCFMT_LEFT,200,200); m_wndBomList.InsertColumn(3,_T("单位"),LVCFMT_LEFT,60,60); m_wndBomList.InsertColumn(4,_T("数量"),LVCFMT_LEFT,80,80); m_wndBomList.InsertColumn(5,_T("材质"),LVCFMT_LEFT,120,120); m_wndBomList.InsertColumn(6,_T("备注"),LVCFMT_LEFT,120,120); m_wndBomList.InsertColumn(7,_T("标准号"),LVCFMT_LEFT,0,0); m_wndBomList.InsertColumn(8,_T("H"),LVCFMT_LEFT,0,0); */ //new //{_T("序号"),_T("名称"),_T("规格"),_T("材料"),_T("单位"),_T("数量"),_T("备注"),_T("标准号"),_T("H"),NULL}; TCHAR szBuffer[MAX_PATH]; TCHAR szBuff2[MAX_PATH]; HDITEM hItem; hItem.mask = HDI_TEXT; hItem.pszText = szBuffer; hItem.cchTextMax = MAX_PATH; HDITEM hdm; hdm.mask = HDI_TEXT; hdm.pszText = szBuff2; hdm.cchTextMax = MAX_PATH; int nColCount = m_wndObjTreeList.GetColumnCount(); //先插入一空行 int nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),_T("")); for (int i = 0;i < nColCount;i++) { m_wndObjTreeList.GetHeaderCtrl()->GetItem(i,&hItem); LPCTSTR pszText1 = m_wndObjTreeList.GetItemText(hChild,i); //对应 for (int j = 0;j < m_wndBomList.GetHeaderCtrl()->GetItemCount();j++) { m_wndBomList.GetHeaderCtrl()->GetItem(j,&hdm); if (_tcscmp(szBuffer,szBuff2) == 0) { m_wndBomList.SetItemText(nItem,j,pszText1); break; } } } //句柄 CString sHandles = _T(""); for (int n = 0;n < pszArHandles->GetSize();n++) { sHandles += pszArHandles->GetAt(n); sHandles += _T(','); } sHandles.TrimRight(_T(',')); //最后一列句柄 m_wndBomList.SetItemText(nItem,m_wndBomList.GetHeaderCtrl()->GetItemCount() - 1,sHandles); } } DeepCopyToListCtrl(hChild); //下一行 hChild = m_wndObjTreeList.GetNextSiblingItem(hChild); } } void CBomReportExDlg::CopyToListCtrl() { m_wndBomList.DeleteAllItems(); TCHAR szBuffer[MAX_PATH]; TCHAR szBuff2[MAX_PATH]; HDITEM hItem; hItem.mask = HDI_TEXT; hItem.pszText = szBuffer; hItem.cchTextMax = MAX_PATH; HDITEM hdm; hdm.mask = HDI_TEXT; hdm.pszText = szBuff2; hdm.cchTextMax = MAX_PATH; HTREEITEM hRoot = m_wndObjTreeList.GetRootItem(); while (hRoot != NULL) { int nColCount = m_wndObjTreeList.GetColumnCount(); //先插入一空行 int nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),_T("")); for (int i = 0;i < nColCount;i++) { m_wndObjTreeList.GetHeaderCtrl()->GetItem(i,&hItem); LPCTSTR pszText1 = m_wndObjTreeList.GetItemText(hRoot,i); //对应 for (int j = 0;j < m_wndBomList.GetHeaderCtrl()->GetItemCount();j++) { m_wndBomList.GetHeaderCtrl()->GetItem(j,&hdm); if (_tcscmp(szBuffer,szBuff2) == 0) { m_wndBomList.SetItemText(nItem,j,pszText1); break; } } } //句柄 DWORD_PTR pXData = m_wndObjTreeList.GetItemData(hRoot); if (pXData != NULL) { CStringArray* pszArHandles = (CStringArray*)pXData; if (pszArHandles != NULL) { CString sHandles; for (int n = 0;n < pszArHandles->GetSize();n++) { sHandles += pszArHandles->GetAt(n); sHandles += _T(','); } sHandles.TrimRight(_T(',')); //最后一列句柄 m_wndBomList.SetItemText(nItem,m_wndBomList.GetHeaderCtrl()->GetItemCount() - 1,sHandles); } else { m_wndBomList.SetItemText(nItem, m_wndBomList.GetHeaderCtrl()->GetItemCount() - 1, _T("")); } } DeepCopyToListCtrl(hRoot); hRoot = m_wndObjTreeList.GetNextSiblingItem(hRoot); } } void CBomReportExDlg::ExcelBomWrite() { TCHAR szBomXlsIni[MAX_PATH]; CString sBomXlsIni = FilePath::GetSysDir() + _T("\\BOMReportZ.ini"); CFileFind find; if (!find.FindFile(sBomXlsIni)) { AfxMessageBox(_T("系统没有找到报表模板配置BOMReportZ.ini文件!请检查软件是否正确安装!")); return; } _tcscpy(szBomXlsIni,(LPCTSTR)sBomXlsIni); CExcelWrite ExcelWrite; ExcelWrite.ExcelWrite(&m_wndBomList, szBomXlsIni); } /* #define PRONO_GRP _T("PRONO") #define DWGNO_GRP _T("DWGNO") #define PAGENO_GRP _T("PAGENO") #define TOTALNO_GRP _T("TOTALNO") #define LINEPRE_GRP _T("LINE") */ static void FindGroup(AcDbDatabase* pDb,LPCTSTR pszLineGrp,AcDbObjectId& idGrp) { AcDbDictionary* pDict = NULL; if ( Acad::eOk == pDb->getGroupDictionary(pDict,AcDb::kForRead )) { CString sName; AcDbGroup* pGrp = NULL; AcDbDictionaryIterator* pIt = pDict->newIterator(); for (;!pIt->done();pIt->next()) { if ( Acad::eOk == pIt->getObject((AcDbObject*&)pGrp,AcDb::kForRead) ) { sName = pGrp->name(); if (sName.CompareNoCase(pszLineGrp) == 0) { idGrp = pGrp->objectId(); pGrp->close(); break; } pGrp->close(); } } delete pIt; pDict->close(); } } static void FindGroupEntities(AcDbObjectId& idGroup,AcDbObjectIdArray& arIds) { AcDbGroup* pGroup = NULL; if (Acad::eOk == acdbOpenObject(pGroup,idGroup,AcDb::kForRead) ) { AcDbGroupIterator* pIter = pGroup->newIterator(); for(;!pIter->done();pIter->next()) { arIds.append(pIter->objectId()); } delete pIter; pGroup->close(); } } static void ReplaceText(AcDbDatabase* pDb,LPCTSTR pszText,LPCTSTR pszGrpname) { AcDbObjectId idGrp; FindGroup(pDb,pszGrpname,idGrp); AcDbObjectIdArray arIds; FindGroupEntities(idGrp,arIds); if (arIds.length() > 0) { AcDbEntity* pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt,arIds.first(),AcDb::kForWrite)) { AcDbText* pText = AcDbText::cast(pEnt); if (pText != NULL) { pText->setTextString(pszText); } pEnt->close(); } } } static double GetTextBox(LPCTSTR pszTxt,const AcDbObjectId& idSt,double dXScale,double dTxtH) { CString sTxt = pszTxt; //sTxt.Replace(_T(" "),_T("A")); AcGiTextStyle style; fromAcDbTextStyle(style,idSt); style.setTextSize(dTxtH); style.setXScale(dXScale); AcGePoint2d ptMin,ptMax; style.extentsBox(sTxt,Adesk::kTrue,sTxt.GetLength(),Adesk::kFalse,ptMin,ptMax); return (ptMax.x - ptMin.x); } static bool GetTextBox(LPCTSTR pszTxt, const AcDbObjectId &idSt, double dXScale, double dTxtH, AcGePoint2d& ptMin, AcGePoint2d & ptMax) { CString sTxt = pszTxt; //sTxt.Replace(_T(" "), _T("W")); AcGiTextStyle style; fromAcDbTextStyle(style, idSt); style.setTextSize(dTxtH); style.setXScale(dXScale); style.extentsBox(sTxt, Adesk::kTrue, sTxt.GetLength(), Adesk::kFalse, ptMin, ptMax); return true; } void SetFitText(CString& sTemp, LPCTSTR pszTxt, AcDbText* pText) { double dW1 = GetTextBox(pszTxt, pText->textStyle(), pText->widthFactor(), pText->height()); double dW2 = GetTextBox(sTemp, pText->textStyle(), pText->widthFactor(), pText->height()); pText->setTextString(sTemp); if (sTemp.IsEmpty()) return; double dXScale = pText->widthFactor(); while (dW2 > dW1) { dXScale -= 0.05; if (dXScale < 0.4) { pText->setWidthFactor(0.4); break; } pText->setWidthFactor(dXScale); dW2 = GetTextBox(sTemp, pText->textStyle(), pText->widthFactor(), pText->height()); dXScale *= 0.8; if (dXScale < 0.4) { pText->setWidthFactor(0.4); break; } pText->setWidthFactor(dXScale); } } void CBomReportExDlg::DwgBomWrite() { //文档锁定 AcAxDocLock lock; TCHAR szBomDwg[MAX_PATH]; CFileFind find; if (!find.FindFile(m_sBomDwg)) { AfxMessageBox(_T("系统没有找到报表模板wbom文件!请检查软件是否正确安装!")); return; } _tcscpy(szBomDwg,m_sBomDwg); TCHAR szBomXlsIni[MAX_PATH]; CString sBomXlsIni = FilePath::GetSysDir() + _T("\\BOMReportZ.ini"); if (!find.FindFile(sBomXlsIni)) { AfxMessageBox(_T("系统没有找到报表模板配置BOMReportZ.ini文件!请检查软件是否正确安装!")); return; } _tcscpy(szBomXlsIni,(LPCTSTR)sBomXlsIni); ::WritePrivateProfileString(_T("FILE"),_T("DwgTmpl"), szBomDwg,szBomXlsIni); AcApDocument* pDoc = acDocManager->curDocument(); //清理一下wbom*** 的块 AcDbBlockTable* pTable = NULL; pDoc->database()->getBlockTable(pTable,AcDb::kForRead); if (pTable != NULL) { AcDbBlockTableIterator* pIt = NULL; pTable->newIterator(pIt); AcDbObjectIdArray arIds1; if (pIt != NULL) { AcDbObjectId idRec; for(pIt->start();!pIt->done();pIt->step()) { pIt->getRecordId(idRec); arIds1.append(idRec); } } CString sName; AcDbObjectIdArray ids; AcDbBlockTableRecord* pRec = NULL; for (int j = 0;j < arIds1.length();j++) { if (Acad::eOk == acdbOpenAcDbObject((AcDbObject*&)pRec,arIds1.at(j),AcDb::kForWrite)) { ids.setLogicalLength(0); ids.append(arIds1.at(j)); LPCTSTR pName = NULL; pRec->getName(pName); sName = pName; if (sName.Find(_T("WBOM")) != -1 ) { Adesk::UInt32 nCountX[2]; memset(nCountX,0,sizeof(nCountX)); pDoc->database()->countHardReferences(ids,nCountX); if (nCountX[0] == 0) { pRec->erase(); } } pRec->close(); } } pTable->close(); } //请选择插入基点 ads_point pt; int nRes = acedGetPoint(NULL,_T("请选择材料报表的插入点:"),pt); if (nRes != RTNORM) { return; } acdbUcs2Wcs(pt,pt,false); AcGePoint3d ptIns = asPnt3d(pt); AcGePoint3d ptCen, ptPos; AcGePoint2d ptMin, ptMax; double dR = 3.0;//行高8 double dScale = PipelineTools::getPScale(); dR *= dScale; AcGeScale3d gscale(dScale,dScale,dScale); AcDbObjectId idBlk,idGrp,id; AcDbObjectIdArray arIds; AcDbEntity* pEnt = NULL; CString sPageno,sTotalno,sNoT,sHandles; CString sBomBlkName,sTime,sGroup,sLineGrp,sText,sNo,sTemp; bool bIsClass = false; bool bSetNull = false; int nIndex = 0; int nCount = m_wndBomList.GetItemCount(); int nLoop = nCount / 27; int nMode = nCount % 27; if (nMode > 0) nLoop += 1; AecDbObjXDataMap xData; //列名对应位置 HDITEM hItem; hItem.mask = HDI_TEXT; TCHAR szBuffer[65];// hItem.pszText = szBuffer; hItem.cchTextMax = MAX_PATH; CMap mapNameToColPos; for (int k = 0;k < m_wndBomList.GetHeaderCtrl()->GetItemCount();k++) { m_wndBomList.GetHeaderCtrl()->GetItem(k, &hItem); mapNameToColPos.SetAt(szBuffer, k); } sTotalno.Format(_T("%d"),nLoop); for (int i = 0;i < nLoop; i++ ) //一共27行每页 { CTime t1 = CTime::GetCurrentTime(); sTime = t1.Format(_T("%y-%m-%d-%H-%M")); sBomBlkName.Format(_T("WBOM%s%d"),sTime,i); sPageno.Format(_T("%d"),i + 1); AcDbDatabase db(Adesk::kFalse); if (Acad::eOk == db.readDwgFile(szBomDwg)) { //第页 ReplaceText(&db,sPageno,PAGENO_GRP); //总页 ReplaceText(&db,sTotalno,TOTALNO_GRP); //工程号 ReplaceText(&db,m_sProno,PRONO_GRP); //图号 ReplaceText(&db,m_sDwgno,DWGNO_GRP); //明细 for (int ii = 0;ii < 27;ii++) { nIndex = i * 27 + ii; if (nIndex > nCount) { bSetNull = true; } sNo.Format(_T("B%d"),nIndex + 1); sLineGrp.Format(_T("%s%d"),LINEPRE_GRP,ii); FindGroup(&db,sLineGrp,idGrp); arIds.setLogicalLength(0); FindGroupEntities(idGrp,arIds); int nSubItem = 0; bIsClass = false; for (int jj = 0;jj < arIds.length();jj++) { if (Acad::eOk == acdbOpenAcDbEntity(pEnt,arIds.at(jj),AcDb::kForWrite)) { AcDbText* pText = AcDbText::cast(pEnt); if (pText != NULL) { #if ARX < 17 LPCTSTR pszTxt = pText->textString(); #else LPCTSTR pszTxt = pText->textStringConst(); #endif LPCTSTR pszStyle = _T("Standard"); AcDbTextStyleTableRecord* pRec = NULL; if (Acad::eOk == acdbOpenObject((AcDbObject*&)pRec,pText->textStyle(),AcDb::kForRead)) { pRec->getName(pszStyle); pRec->close(); } sText = pszTxt; sText.TrimLeft(); sText.TrimRight(); //{_T("序号"),_T("名称"),_T("规格"),_T("材料"),_T("单位"),_T("数量"),_T("备注"),_T("标准号"),NULL} //{_T("序号"), _T("名称"), _T("规格"), _T("材料"), _T("单位"), _T("数量"), _T("备注"), _T("标准号"), _T("H"), NULL}; sNoT.Format(_T("%d"),ii); if (sText.CompareNoCase(sNoT) ==0) //序号 { mapNameToColPos.Lookup(_T("序号"), nSubItem); sNo = m_wndBomList.GetItemText(nIndex, nSubItem); //sNo.Format(_T("%d"),nIndex + 1); pText->setTextString(bSetNull ? _T(" "):(LPCTSTR)sNo); sHandles = m_wndBomList.GetItemText(nIndex,m_wndBomList.GetHeaderCtrl()->GetItemCount() - 1); xData.SetAt(KEY_HANDLES,sHandles); if ( xData.Write(pText,BIMDATA_APP,TRUE) ) { //acutPrintf(_T("\nSuccess write xdata!")); } else { //acutPrintf(_T("\nFailed write xdata!")); } if (sNo.IsEmpty()) bIsClass = true; } else if (sText.CompareNoCase(NAME_CELL) == 0) //名称 { nSubItem = 1; mapNameToColPos.Lookup(_T("名称"), nSubItem); if (!bSetNull) { sTemp = m_wndBomList.GetItemText(nIndex, nSubItem); SetFitText(sTemp, pszTxt, pText); } else { pText->setTextString(_T(" ")); } } else if (sText.CompareNoCase(SPEC_CELL) == 0)//规格 { nSubItem = 3; mapNameToColPos.Lookup(_T("规格"), nSubItem); if (!bSetNull) { sTemp = m_wndBomList.GetItemText(nIndex, nSubItem); SetFitText(sTemp, pszTxt, pText); } else { pText->setTextString(_T(" ")); } } else if (sText.CompareNoCase(UNIT_CELL) == 0) //单位 { nSubItem = 4; mapNameToColPos.Lookup(_T("单位"), nSubItem); if (!bSetNull) { sTemp = m_wndBomList.GetItemText(nIndex, nSubItem); pText->setTextString(sTemp); } else { pText->setTextString(_T(" ")); } } else if (sText.CompareNoCase(COUNT_CELL) == 0)//数量 { nSubItem = 5; mapNameToColPos.Lookup(_T("数量"), nSubItem); if (!bSetNull) { sTemp = m_wndBomList.GetItemText(nIndex,5); pText->setTextString(sTemp); } else { pText->setTextString(_T(" ")); } } else if (sText.CompareNoCase(MATERIAL_CELL) == 0) //材料 { nSubItem = 3; mapNameToColPos.Lookup(_T("材料"), nSubItem); if (!bSetNull) { sTemp = m_wndBomList.GetItemText(nIndex, 3); SetFitText(sTemp, pszTxt, pText); } else { pText->setTextString(_T(" ")); } } else if (sText.CompareNoCase(REM_CELL) == 0) //备注 { nSubItem = 6; mapNameToColPos.Lookup(_T("备注"), nSubItem); if (!bSetNull) { sTemp = m_wndBomList.GetItemText(nIndex, nSubItem); SetFitText(sTemp, pszTxt, pText); } else { pText->setTextString(_T(" ")); } } else if (sText.CompareNoCase(WEIGHT_CELL) == 0) //单重 { pText->setTextString(_T(" ")); } else if (sText.CompareNoCase(TWEIGHT_CELL) == 0) //总重 { pText->setTextString(_T(" ")); } else if (sText.CompareNoCase(STD_CELL) == 0) //标准号 { nSubItem = 7; mapNameToColPos.Lookup(_T("标准号"), nSubItem); if (!bSetNull) { sTemp = m_wndBomList.GetItemText(nIndex, nSubItem); pText->setTextString(sTemp); } else { pText->setTextString(_T(" ")); } } else { //... } } AcDbCircle *pCir = AcDbCircle::cast(pEnt); if (pCir != NULL) { if (m_bNoAddCircle && !bIsClass && !bSetNull) { pCir->setVisibility(AcDb::kVisible); } } pEnt->close(); } } } } //插入; AcDbEntity *pEntT = NULL; db.setInsbase(AcGePoint3d::kOrigin); if (acdbCurDwg()->insert(idBlk, sBomBlkName, &db) == Acad::eOk) { //然后放大倍数 AcDbBlockReference *pRef = new AcDbBlockReference; pRef->setScaleFactors(gscale); pRef->setPosition(ptIns); pRef->setBlockTableRecord(idBlk); CoreTools::AddToModelSpace(pRef); //平移动一下 ptIns += PipelineTools::getPScale() * 250.0 * AcGeVector3d::kXAxis; } else acutPrintf(_T("\n插入块失败!")); } } void CBomReportExDlg::OnClose() { CDialog::OnClose(); delete this; } void CBomReportExDlg::OnBnClickedCancel() { EndDialog(IDCANCEL); delete this; } void CBomReportExDlg::OnDestroy() { FreeXDataBuf(); CDialog::OnDestroy(); } void CBomReportExDlg::FreeXDataBuf() { HTREEITEM hRoot = m_wndObjTreeList.GetRootItem(); while (hRoot != NULL) { DeleteItemXData(hRoot); hRoot = m_wndObjTreeList.GetNextSiblingItem(hRoot); } } void CBomReportExDlg::DeleteItemXData(HTREEITEM hParent) { AcDbDatabase* pDb = acdbCurDwg(); CString sNo,sHandle; AcDbObjectId id; CStringArray* pszArHandles = NULL; HTREEITEM hChild = m_wndObjTreeList.GetChildItem(hParent); while(hChild != NULL) { sNo = m_wndObjTreeList.GetItemText(hChild); DWORD_PTR pXData = m_wndObjTreeList.GetItemData(hChild); if (pXData != NULL) { pszArHandles = (CStringArray*)pXData; if (pszArHandles != NULL) { delete pszArHandles; } m_wndObjTreeList.SetItemData(hChild,NULL); } DeleteItemXData(hChild); hChild = m_wndObjTreeList.GetNextSiblingItem(hChild); } } void CBomReportExDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult) { CPoint point,ptcursor; ::GetCursorPos(&point); ptcursor = point; m_wndObjTreeList.ScreenToClient(&point); UINT uFlags; HTREEITEM hItem = m_wndObjTreeList.HitTest(point, &uFlags), hP(NULL); if (hItem != NULL) { DWORD_PTR pXData = m_wndObjTreeList.GetItemData(hItem); if (pXData != NULL) { CStringArray* pszArHandles = (CStringArray*)pXData; if (pszArHandles != NULL) { AcAxDocLock lock; AcDbObjectId id; AcDbObjectIdArray arIds; CString sHandle; for (int i = 0;i < pszArHandles->GetSize();i++) { sHandle = pszArHandles->GetAt(i); AcDbHandle hd((LPCTSTR)sHandle); if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(id,false,hd) ) { arIds.append(id); } } if (!arIds.isEmpty()) { acedSSSetFirst(NULL, NULL); //加入选择集 ads_name ssPick,ent; acedSSAdd(NULL, NULL, ssPick); for (int i = 0;i < arIds.length();i++) { acdbGetAdsName(ent, arIds.at(i)); acedSSAdd(ent, ssPick, ssPick); } acedSSSetFirst(ssPick, ssPick); acedSSFree(ssPick); } } } } }