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

1511 lines
37 KiB
C++

#include "stdafx.h"
#include "StdArx.h"
#include "BomReportDlg.h"
#include "CoreTools.h"
#include <algorithm>
#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")
extern Acad::ErrorStatus AddToModelSpace(AcDbEntity* pEnt, AcDbObjectId& id, AcDbDatabase* pDb, bool bClose);
IMPLEMENT_DYNAMIC(CBomReportDlg, CDialog)
CBomReportDlg::CBomReportDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBomReportDlg::IDD, pParent)
, m_sProno(_T("SH-001"))
, m_sDwgno(_T("SH-001"))
, m_sBomDwg(_T("WBOM.dwg"))
{
}
CBomReportDlg::~CBomReportDlg()
{
}
void CBomReportDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BOMLIST, m_wndBomList);
DDX_Text(pDX, IDC_EDITPRONO, m_sProno);
DDX_Text(pDX, IDC_EDITDRWNO, m_sDwgno);
DDX_Text(pDX, IDC_EDITBOMTMPL, m_sBomDwg);
}
BEGIN_MESSAGE_MAP(CBomReportDlg, CDialog)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BTTMPL, &CBomReportDlg::OnBnClickedBtTmpl)
ON_BN_CLICKED(IDOK, &CBomReportDlg::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &CBomReportDlg::OnBnClickedCancel)
ON_WM_DESTROY()
END_MESSAGE_MAP()
BOOL CBomReportDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CBitmap bmp;
if (!bmp.LoadBitmap (IDB_BITMAPI))
{
AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAPI);
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));
m_wndBomList.SetImageList(&m_imageList,LVSIL_SMALL);
m_wndBomList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
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.SetColumnItemData(2,NULL,ET_Edit);
m_wndBomList.SetColumnItemData(4,NULL,ET_Edit);
m_wndBomList.SetColumnItemData(5,NULL,ET_Edit);
CString sBomXlsIni = FilePath::GetSysDir() + _T("\\BOMReport.ini");
m_sBomDwg = FilePath::GetSysDir() + _T("\\WBOM.dwg");
OnBnClickedBtselents();
UpdateData(FALSE);
return TRUE;
}
void CBomReportDlg::OnClose()
{
CDialog::OnClose();
}
void CBomReportDlg::OnBnClickedBtselfile()
{
//选一堆dwg文件
CAcModuleResourceOverride resOverride;
const TCHAR *pszFilter = _T("dwg文件 (*.dwg;)|*.dwg|");
CFileDialog dlg(TRUE, _T("dwg"), NULL,OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_ALLOWMULTISELECT, pszFilter, NULL);
TCHAR strFileName[MAX_PATH] = _T("");
TCHAR strFileTitle[] = _T("选择要物料统计的DWG文件");
int maxChar = MAX_PATH;
dlg.m_ofn.lpstrFile = strFileName;
dlg.m_ofn.nMaxFile = maxChar;
dlg.m_ofn.lpstrTitle = strFileTitle;
if(dlg.DoModal() != IDOK)
{
return;
}
CString sFileName;
POSITION ps = dlg.GetStartPosition();
while(ps != NULL)
{
sFileName = dlg.GetNextPathName(ps);
sFileName.Replace( _T("\\\\"), _T("\\"));
//读取文件统计
BomFromReadDwg(sFileName);
}
ShowtoReportlist();
}
void CBomReportDlg::OnBnClickedBtTmpl()
{
//选一堆dwg文件
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 CBomReportDlg::BomFromReadDwg(CString& sFileName)
{
}
void CBomReportDlg::OnBnClickedBtselents()
{
AcDbEntity* pEnt = NULL;
for (long i = 0;i < m_arAddtionPtrs.length();i++)
{
pEnt = (AcDbEntity*)m_arAddtionPtrs.at(i);
ExtractBomOfEntity(pEnt);
}
ShowtoReportlist();
}
void CBomReportDlg::AddPipeLineEntPtr(AcDbEntity* pEnt)
{
if (pEnt != NULL)
{
m_arAddtionPtrs.append(pEnt);
}
}
void CBomReportDlg::ExtractBomOfEntity(AcDbEntity* pEnt)
{
//
int nFitType = 0;
CString sMater,sText,sModel,sFact;
double dDn = 0.0,dLen = 0.0;
double dEDn = 0.0,dED = 0.0,dL = 0.0,dB = 0.0;
double dD = 0.0,dThick = 0.0,dRatio = 0.0,dE = 0.0,dM = 0.0;
//管子
PipeBom* pPipeBom = NULL;
//std::vector<PipeBom*> vtPipeBomPtrs;
//CMapStringToPtr mapPipeBom;
CableBom* pCabBom = NULL;
//弯头
ElbowBom* pElbowBom = NULL;
//std::vector<ElbowBom*> vtElbowBomPtrs;
//CMapStringToPtr mapElbowBom;
//大小头
ReducerBom* pReducerBom = NULL;
//std::vector<ReducerBom*> vtReducerBomPtrs;
//CMapStringToPtr mapReducerBom;
//三通
TeeBom* pTeeBom = NULL;
//std::vector<TeeBom*> vtTeeBomPtrs;
//CMapStringToPtr mapTeeBom;
//L三通
LTeeBom* pLTeeBom = NULL;
//std::vector<LTeeBom*> vtLTeeBomPtrs;
//CMapStringToPtr mapLTeeBom;
//WYE
WyeBom* pWyeBom = NULL;
//std::vector<WyeBom*> vtWyeBomPtrs;
//CMapStringToPtr mapWyeBom;
//四通
CrossBom* pCrossBom = NULL;
//std::vector<CrossBom*> vtCrossBomPtrs;
//CMapStringToPtr mapCrossBom;
//堵头
WCapBom* pWCap = NULL;
//std::vector<WCapBom*> vtWCapBomPtrs;
//CMapStringToPtr mapWCapBom;
WFlangeBom* pFlangeBom = NULL;
//设备
//CMapStringToPtr mapName2Count;
double dAng = 0.0;
AcGeVector3d vtOff;
AecDbObjXDataMap* pMap = NULL;
//1.管子
AecDbEwPipe* pWpipe = AecDbEwPipe::cast(pEnt);
if (pWpipe != NULL)
{
pMap = pWpipe->GetSpecialtyData();
//规格
pMap->GetAt(PIPE_DN,dDn);
pMap->GetAt(PIPE_OD,dD);
pMap->GetAt(PIPE_THICK,dThick);
pMap->GetAt(PIPE_MATERIAL,sMater);
dLen = pWpipe->EndPoint().distanceTo(pWpipe->StartPoint() );//默认是米单位
dDn = AS_M2MM(dDn);
dD = AS_M2MM(dD);
dThick = AS_M2MM(dThick);
sText.Format(_T("%d-%d-%.1f-%s"),(short)(AS_M2MM(dDn) + 0.5),(short)(dD + 0.5),dThick,sMater);
if (!m_mapPipeBom.Lookup(sText,(void*&)pPipeBom))
{
pPipeBom = new PipeBom;
pPipeBom->nDn = (short)(dDn + 0.5);
pPipeBom->nD = (short)(dD + 0.5);
pPipeBom->fThick = (float)dThick;
pPipeBom->dLen = dLen;
_tcscpy(pPipeBom->szMertial,sMater);
m_mapPipeBom.SetAt(sText,pPipeBom);
m_vtPipeBomPtrs.push_back(pPipeBom);
}
else
{
pPipeBom->dLen += dLen;
}
}
AecDbEwCable* pCable = AecDbEwCable::cast(pEnt);
if (pCable != NULL)
{
pMap = pCable->GetSpecialtyData();
//规格
pMap->GetAt(CABLE_D,dD);
pMap->GetAt(CABLE_MODEL,sModel);
pMap->GetAt(CABLE_FACTORY,sFact);
sText.Format(_T("%d-%s-%s"),(short)(AS_M2MM(dD) + 0.5),sMater,sFact);
pCable->getEndParam(dLen);//默认是米单位
if (!m_mapCableBom.Lookup(sText,(void*&)pCabBom))
{
pCabBom = new CableBom;
pCabBom->nD = (short)(AS_M2MM(dD) + 0.5);
pCabBom->dLen = dLen;
_tcscpy(pCabBom->szModel,sModel);
_tcscpy(pCabBom->szFactory,sFact);
m_mapCableBom.SetAt(sText,pCabBom);
m_vtCableBomPtrs.push_back(pCabBom);
}
else
{
pCabBom->dLen += dLen;
}
}
//2.管件
AecDbEwFitting* pWFit = AecDbEwFitting::cast(pEnt);
if (pWFit != NULL)
{
pMap = pWFit->GetSpecialtyData();
pMap->GetAt(KEY_RUNTIME,nFitType);
switch(nFitType)
{
case eElbow:
{
//规格
pMap->GetAt(PIPE_DN,dDn);
pMap->GetAt(PIPE_OD,dD);
pMap->GetAt(PIPE_THICK,dThick);
pMap->GetAt(PIPE_MATERIAL,sMater);
pMap->GetAt(PIPE_RATIO,dRatio);
pMap->GetAt(PIPE_ELBOWANG,dAng);
dAng *= 180.0 / PI;
dDn = AS_M2MM(dDn);
dD = AS_M2MM(dD);
dThick = AS_M2MM(dThick);
sText.Format(_T("%d-%d-%d-%.1f-%.1f-%s"),(short)(dDn + 0.5),(short)(dD + 0.5),(short)(dAng + 0.5),dThick,dRatio,sMater);
if (!m_mapElbowBom.Lookup(sText,(void*&)pElbowBom))
{
pElbowBom = new ElbowBom;
pElbowBom->nDn = (short)(dDn + 0.5);
pElbowBom->nD = (short)(dD + 0.5);
pElbowBom->fThick = (float)dThick;
pElbowBom->fRRatio = (float)dRatio;
pElbowBom->nAngle = (short)(dAng + 0.5);
_tcscpy(pElbowBom->szMertial,sMater);
pElbowBom->nCount = 1;
m_vtElbowBomPtrs.push_back(pElbowBom);
m_mapElbowBom.SetAt(sText,pElbowBom);
}
else
{
pElbowBom->nCount += 1;
}
break;
}
case eReduceElbow:
{
break;
}
case eReduce:
{
//规格
pMap->GetAt(PIPE_DN,dDn);
pMap->GetAt(PIPE_OD,dD);
pMap->GetAt(PIPE_EDN,dEDn);
pMap->GetAt(PIPE_EOD,dED);
pMap->GetAt(PIPE_THICK,dThick);
pMap->GetAt(PIPE_MATERIAL,sMater);
pMap->GetAt(KEY_Length,dLen);
pMap->GetAt(KEY_OFFSET,vtOff);
dDn = AS_M2MM(dDn);
dD = AS_M2MM(dD);
dThick = AS_M2MM(dThick);
dEDn = AS_M2MM(dEDn);
dED = AS_M2MM(dED);
dLen = AS_M2MM(dLen);
sText.Format(_T("%d-%d-%d-%d-%d-%.1f-%.1f-%s"),
(short)(__min(dDn,dEDn) + 0.5),
(short)(__max(dDn,dEDn) + 0.5),
(short)(__min(dD,dED) + 0.5),
(short)(__max(dD,dED) + 0.5),
vtOff.isZeroLength(),
dThick,dRatio,sMater);
if (!m_mapReducerBom.Lookup(sText,(void*&)pReducerBom))
{
pReducerBom = new ReducerBom;
pReducerBom->nDn = (short)(__max(dDn,dEDn) + 0.5);
pReducerBom->nD = (short)(__max(dD,dED) + 0.5);
pReducerBom->nTDn = (short)(__min(dDn,dEDn) + 0.5);
pReducerBom->nTD = (short)(__min(dD,dED) + 0.5);
pReducerBom->nCount = 1;
pReducerBom->fThick = (float)dThick;
pReducerBom->nLen = (short)(dLen + 0.5);
_tcscpy(pReducerBom->szMertial,sMater);
pReducerBom->nOffset = vtOff.isZeroLength() ? FALSE : TRUE;
m_vtReducerBomPtrs.push_back(pReducerBom);
m_mapReducerBom.SetAt(sText,pReducerBom);
}
else
{
pReducerBom->nCount += 1;
}
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(PIPE_THICK,dThick);
pMap->GetAt(PIPE_MATERIAL,sMater);
pMap->GetAt(KEY_L,dL);
pMap->GetAt(KEY_T,dB);
dDn = AS_M2MM(dDn);
dD = AS_M2MM(dD);
dThick = AS_M2MM(dThick);
dEDn = AS_M2MM(dEDn);
dED = AS_M2MM(dED);
dL = AS_M2MM(dL);
dB = AS_M2MM(dB);
sText.Format(_T("%d-%d-%d-%d-%.1f-%s"),(short)(dDn + 0.5),(short)(dD + 0.5),(short)(dEDn + 0.5),(short)(dED + 0.5),dThick,sMater);
if (!m_mapTeeBom.Lookup(sText,(void*&)pTeeBom))
{
pTeeBom = new TeeBom;
pTeeBom->nDn = (short)(dDn + 0.5);
pTeeBom->nD = (short)(dD + 0.5);
pTeeBom->nTDn = (short)(dEDn + 0.5);
pTeeBom->nTD = (short)(dED + 0.5);
pTeeBom->nL = (short)(dL + 0.5);
pTeeBom->nB = (short)(dB + 0.5);
pTeeBom->fThick = (float)dThick;
pTeeBom->nCount = 1;
_tcscpy(pTeeBom->szMertial,sMater);
m_mapTeeBom.SetAt(sText,pTeeBom);
m_vtTeeBomPtrs.push_back(pTeeBom);
}
else
{
pTeeBom->nCount += 1;
}
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_THICK,dThick);
pMap->GetAt(PIPE_MATERIAL,sMater);
pMap->GetAt(PIPE_E,dE);
pMap->GetAt(PIPE_M,dM);
pMap->GetAt(PIPE_B,dB);
dDn = AS_M2MM(dDn);
dD = AS_M2MM(dD);
dThick = AS_M2MM(dThick);
dEDn = AS_M2MM(dEDn);
dED = AS_M2MM(dED);
dE = AS_M2MM(dE);
dM = AS_M2MM(dM);
dB = AS_M2MM(dB);
sText.Format(_T("%d-%d-%d-%d-%.1f-%s"),(short)(dDn + 0.5),(short)(dD + 0.5),(short)(dEDn + 0.5),(short)(dED + 0.5),dThick,sMater);
if (!m_mapLTeeBom.Lookup(sText,(void*&)pLTeeBom))
{
pLTeeBom = new LTeeBom;
pLTeeBom->nDn = (short)(dDn + 0.5);
pLTeeBom->nD = (short)(dD + 0.5);
pLTeeBom->nTDn = (short)(dEDn + 0.5);
pLTeeBom->nTD = (short)(dED + 0.5);
pLTeeBom->nE = (short)(dE + 0.5);
pLTeeBom->nM = (short)(dM + 0.5);
pLTeeBom->nB = (short)(dB + 0.5);
pLTeeBom->fThick = dThick;
_tcscpy(pLTeeBom->szMertial,sMater);
pLTeeBom->nCount = 1;
m_mapLTeeBom.SetAt(sText,pLTeeBom);
m_vtLTeeBomPtrs.push_back(pLTeeBom);
}
else
{
pLTeeBom->nCount += 1;
}
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_THICK,dThick);
pMap->GetAt(PIPE_MATERIAL,sMater);
pMap->GetAt(PIPE_M,dM);
pMap->GetAt(PIPE_B,dB);
dDn = AS_M2MM(dDn);
dD = AS_M2MM(dD);
dThick = AS_M2MM(dThick);
dEDn = AS_M2MM(dEDn);
dED = AS_M2MM(dED);
dM = AS_M2MM(dM);
dB = AS_M2MM(dB);
sText.Format(_T("%d-%d-%d-%.1f-%s"),(short)(dDn + 0.5),(short)(dD + 0.5),(short)(dED + 0.5),dThick,sMater);
if (!m_mapWyeBom.Lookup(sText,(void*&)pWyeBom))
{
pWyeBom = new WyeBom;
pWyeBom->nDn = (short)(dDn + 0.5);
pWyeBom->nD = (short)(dD + 0.5);
pWyeBom->nTDn = (short)(dEDn + 0.5);
pWyeBom->nTD = (short)(dED + 0.5);
pWyeBom->nM = (short)(dM + 0.5);
pWyeBom->nB = (short)(dB + 0.5);
pWyeBom->fThick = dThick;
_tcscpy(pWyeBom->szMertial,sMater);
pWyeBom->nCount = 1;
m_mapWyeBom.SetAt(sText,pWyeBom);
m_vtWyeBomPtrs.push_back(pWyeBom);
}
else
{
pWyeBom->nCount += 1;
}
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(PIPE_THICK,dThick);
pMap->GetAt(PIPE_MATERIAL,sMater);
pMap->GetAt(KEY_L,dM);
pMap->GetAt(KEY_T,dB);
dDn = AS_M2MM(dDn);
dD = AS_M2MM(dD);
dThick = AS_M2MM(dThick);
dEDn = AS_M2MM(dEDn);
dED = AS_M2MM(dED);
dM = AS_M2MM(dM);
dB = AS_M2MM(dB);
sText.Format(_T("%d-%d-%d-%d-%.1f-%s"),(short)(dDn + 0.5),(short)(dD + 0.5),(short)(dEDn + 0.5),(short)(dED + 0.5),dThick,sMater);
if (!m_mapCrossBom.Lookup(sText,(void*&)pCrossBom))
{
pCrossBom = new CrossBom;
pCrossBom->nDn = (short)(dDn + 0.5);
pCrossBom->nD = (short)(dD + 0.5);
pCrossBom->nTDn = (short)(dEDn + 0.5);
pCrossBom->nTD = (short)(dED + 0.5);
pCrossBom->nCount = 1;
pCrossBom->nL = (short)(dM + 0.5);
pCrossBom->fThick = (float)(dThick + 0.5);
_tcscpy(pCrossBom->szMertial,sMater);
m_mapCrossBom.SetAt(sText,pCrossBom);
m_vtCrossBomPtrs.push_back(pCrossBom);
}
else
{
pCrossBom->nCount += 1;
}
break;
}
case eWcap:
{
pMap->GetAt(PIPE_DN,dDn);
pMap->GetAt(PIPE_OD,dD);
pMap->GetAt(PIPE_THICK,dThick);
pMap->GetAt(PIPE_MATERIAL,sMater);
pMap->GetAt(KEY_L,dM);
dDn = AS_M2MM(dDn);
dD = AS_M2MM(dD);
dThick = AS_M2MM(dThick);
dM = AS_M2MM(dM);
sText.Format(_T("%d-%d-%.1f-%s"),(short)(dDn + 0.5),(short)(dD + 0.5),dThick,sMater);
if (!m_mapWCapBom.Lookup(sText,(void*&)pWCap))
{
pWCap = new WCapBom;
pWCap->nDn = (short)(dDn + 0.5);
pWCap->nD = (short)(dD + 0.5);
pWCap->nL = (short)(dM + 0.5);
pWCap->fThick = (float)(dThick + 0.5);
_tcscpy(pWCap->szMertial,sMater);
pWCap->nCount = 1;
m_mapWCapBom.SetAt(sText,pWCap);
m_vtWCapBomPtrs.push_back(pWCap);
}
else
{
pWCap->nCount += 1;
}
break;
}
case eFlange:
{
pMap->GetAt(PIPE_DN,dDn);
pMap->GetAt(PIPE_MATERIAL,sMater);
dDn = AS_M2MM(dDn);
sText.Format(_T("DN%d"),(short)(dDn + 0.5));
if (!m_mapWFlangeBom.Lookup(sText,(void*&)pFlangeBom))
{
pFlangeBom = new WFlangeBom;
pFlangeBom->nDn = (short)(dDn+0.5);
pFlangeBom->nCount = 1;
_tcscpy(pFlangeBom->szMertial,sMater);
m_mapWFlangeBom.SetAt(sText,pFlangeBom);
m_vtWFlangeBomPtrs.push_back(pFlangeBom);
}
else
{
pFlangeBom->nCount += 1;
}
break;
}
default:
break;
}
}
//3.设备
AecDbEwEquipment* pWEqu =AecDbEwEquipment::cast(pEnt);
if (pWEqu != NULL)
{
//按名称统计
CString sName,sSpec;
pMap = pWEqu->GetSpecialtyData();
pMap->GetAt(KEY_NAME,sName);
sSpec = sName;
SH_BIM_BLOCK bims;
CoreTools::getBimData(*pMap, _T("规格"), sSpec);
WEquBom* pCount = NULL;
if (!m_mapName2Count.Lookup(sName,(void*&)pCount))
{
pCount = new WEquBom;
pCount->nCount = 1;
_tcscpy(pCount->szName,sName);
_tcscpy(pCount->szSpec,sSpec);
m_mapName2Count.SetAt(sName,pCount);
}
else
{
pCount->nCount += 1;
}
}
}
/*
#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_PTR(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_PTR(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();
}
}
}
void CBomReportDlg::OnBnClickedOk()
{
//写入DWG模板,或者EXCEL 模板
UpdateData();
EnableWindow(FALSE);
CWnd* pFrame = acedGetAcadFrame();
pFrame->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
pFrame->SetFocus();
/*
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);
*/
/*if (m_bCheckExcel) //导到外部excel
{
TCHAR szBomXlsIni[MAX_PATH];
if(!FindFile(_T("BOMReport.ini"), szBomXlsIni))
{
AfxMessageBox(_T("系统没有找到报表模板配置BOMReport.ini文件!请检查软件是否正确安装!"));
return;
}
CExcelWrite ExcelWrite;
ExcelWrite.ExcelWrite(&m_wndBomList, szBomXlsIni);
}
else //导入bom dwg 模板 */
{
//文档锁定
AcAxDocLock lock;
AcApDocument* pDoc = acDocManager->curDocument();
CString sBomXlsIni = FilePath::GetSysDir() + _T("\\BOMReport.ini");
m_sBomDwg = FilePath::GetSysDir() + _T("\\wbom.dwg");
::WritePrivateProfileString(_T("FILE"),_T("DwgTmpl"), m_sBomDwg,sBomXlsIni);
/*if(!FindFile(_T("wbom.dwg"), szBomDwg))
{
AfxMessageBox(_T("系统没有找到报表模板wbom.dwg文件!请检查软件是否正确安装!"));
return;
}*/
//清理一下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.removeAll();
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);
double dScale = 0.001;
AcGeScale3d gscale(dScale,dScale,dScale);
AcDbObjectId idBlk,idGrp,id;
AcDbObjectIdArray arIds;
AcDbEntity* pEnt = NULL;
CString sPageno,sTotalno,sNoT;
CString sBomBlkName,sTime,sGroup,sLineGrp,sText,sNo,sTemp;
bool bSetNull = false;
int nIndex = 0;
int nCount = m_wndBomList.GetItemCount();
int nLoop = nCount / 27;
int nMode = nCount % 27;
if (nMode > 0) nLoop += 1;
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(m_sBomDwg))
{
//第页
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("%d"),nIndex + 1);
sLineGrp.Format(_T("%s%d"),LINEPRE_GRP,ii);
FindGroup(&db,sLineGrp,idGrp);
arIds.removeAll();
FindGroupEntities(idGrp,arIds);
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)
{
LPCTSTR pszTxt = pText->textStringConst();
sText = pszTxt;
sNoT.Format(_T("%d"),ii);
if (sText.CompareNoCase(sNoT) == 0) //序号
{
//sNo.Format(_T("%d"),nIndex + 1);
pText->setTextString(bSetNull ? _T(" "):(LPCTSTR)sNo);
}
else if(sText.CompareNoCase(_T("Name")) == 0) //名称
{
if (!bSetNull)
{
sTemp = m_wndBomList.GetItemText(nIndex,1);
pText->setTextString(sTemp);
}
else
{
pText->setTextString(_T(" "));
}
}
else if(sText.CompareNoCase(_T("Spec")) == 0)//规格
{
if (!bSetNull)
{
sTemp = m_wndBomList.GetItemText(nIndex,2);
pText->setTextString(sTemp);
}
else
{
pText->setTextString(_T(" "));
}
}
else if (sText.CompareNoCase(_T("Unit")) == 0) //单位
{
if (!bSetNull)
{
sTemp = m_wndBomList.GetItemText(nIndex,3);
pText->setTextString(sTemp);
}
else
{
pText->setTextString(_T(" "));
}
}
else if (sText.CompareNoCase(_T("Count")) == 0)//数量
{
if (!bSetNull)
{
sTemp = m_wndBomList.GetItemText(nIndex,4);
pText->setTextString(sTemp);
}
else
{
pText->setTextString(_T(" "));
}
}
else if (sText.CompareNoCase(_T("Mertial")) == 0) //材料
{
if (!bSetNull)
{
sTemp = m_wndBomList.GetItemText(nIndex,5);
pText->setTextString(sTemp);
}
else
{
pText->setTextString(_T(" "));
}
}
else if (sText.CompareNoCase(_T("Rem")) == 0) //备注
{
if (!bSetNull)
{
sTemp = m_wndBomList.GetItemText(nIndex,6);
pText->setTextString(sTemp);
}
else
{
pText->setTextString(_T(" "));
}
}
else if (sText.CompareNoCase(_T("Weight")) == 0) //单重
{
pText->setTextString(_T(" "));
}
else if (sText.CompareNoCase(_T("TWeight")) == 0) //纵重
{
pText->setTextString(_T(" "));
}
}
pEnt->close();
}
}
}
}
//插入;
db.setInsbase(AcGePoint3d::kOrigin);
Acad::ErrorStatus es = acdbCurDwg()->insert(idBlk,sBomBlkName,&db);
AcDbBlockTableRecord* pRec = NULL;
if (Acad::eOk == acdbOpenAcDbObject((AcDbObject*&)pRec,idBlk,AcDb::kForWrite))
{
pRec->setOrigin(AcGePoint3d::kOrigin);
pRec->close();
}
//然后放大倍数
AcDbObjectId idRef;
AcDbBlockReference* pRef = new AcDbBlockReference;
pRef->setScaleFactors(gscale);
pRef->setPosition(ptIns);
pRef->setBlockTableRecord(idBlk);
AddToModelSpace(pRef,idRef,NULL,true);
//平移动一下
ptIns += 250.0 * AcGeVector3d::kXAxis;
}
}
EndDialog(IDOK);
}
void CBomReportDlg::OnBnClickedCancel()
{
EndDialog(IDCANCEL);
}
void CBomReportDlg::OnDestroy()
{
CDialog::OnDestroy();
FreeBomBuffer();
}
void CBomReportDlg::FreeBomBuffer()
{
typedef std::vector<PipeBom*>::iterator IT1;
for(IT1 it1 = m_vtPipeBomPtrs.begin();it1 != m_vtPipeBomPtrs.end();it1++)
{
PipeBom* pPipeBom = (*it1);
DELETE_PTR(pPipeBom);
}
}
static bool SortPipeBom(PipeBom* pPipe1,PipeBom* pPipe2)
{
if (pPipe1->nDn <= pPipe2->nDn)
{
return true;
}
return false;
}
static bool SortCableBom(CableBom* pPipe1,CableBom* pPipe2)
{
if (pPipe1->nD <= pPipe2->nD)
{
return true;
}
return false;
}
static bool SortElbowBom(ElbowBom* pPipe1,ElbowBom* pPipe2)
{
if (pPipe1->nDn <= pPipe2->nDn)
{
return true;
}
return false;
}
static bool SortReducerBom(ReducerBom* pPipe1,ReducerBom* pPipe2)
{
if (pPipe1->nDn <= pPipe2->nDn)
{
return true;
}
return false;
}
static bool SortTeeBom(TeeBom* pPipe1,TeeBom* pPipe2)
{
if (pPipe1->nDn <= pPipe2->nDn)
{
return true;
}
return false;
}
static bool SortLTeeBom(LTeeBom* pPipe1,LTeeBom* pPipe2)
{
if (pPipe1->nDn <= pPipe2->nDn)
{
return true;
}
return false;
}
static bool SortWyeBom(WyeBom* pPipe1,WyeBom* pPipe2)
{
if (pPipe1->nDn <= pPipe2->nDn)
{
return true;
}
return false;
}
static bool SortCrossBom(CrossBom* pPipe1,CrossBom* pPipe2)
{
if (pPipe1->nDn <= pPipe2->nDn)
{
return true;
}
return false;
}
static bool SortWCapBom(WCapBom* pPipe1,WCapBom* pPipe2)
{
if (pPipe1->nDn <= pPipe2->nDn)
{
return true;
}
return false;
}
static bool SortFlangeBom(WFlangeBom* pBom1,WFlangeBom* pBom2)
{
if (pBom1->nDn <= pBom2->nDn)
{
return true;
}
return false;
}
void CBomReportDlg::ShowtoReportlist()
{
std::sort(m_vtPipeBomPtrs.begin(),m_vtPipeBomPtrs.end(),SortPipeBom);
std::sort(m_vtCableBomPtrs.begin(),m_vtCableBomPtrs.end(),SortCableBom);
std::sort(m_vtElbowBomPtrs.begin(),m_vtElbowBomPtrs.end(),SortElbowBom);
std::sort(m_vtReducerBomPtrs.begin(),m_vtReducerBomPtrs.end(),SortReducerBom);
std::sort(m_vtTeeBomPtrs.begin(),m_vtTeeBomPtrs.end(),SortTeeBom);
std::sort(m_vtLTeeBomPtrs.begin(),m_vtLTeeBomPtrs.end(),SortLTeeBom);
std::sort(m_vtWyeBomPtrs.begin(),m_vtWyeBomPtrs.end(),SortWyeBom);
std::sort(m_vtCrossBomPtrs.begin(),m_vtCrossBomPtrs.end(),SortCrossBom);
std::sort(m_vtWCapBomPtrs.begin(),m_vtWCapBomPtrs.end(),SortWCapBom);
std::sort(m_vtWFlangeBomPtrs.begin(),m_vtWFlangeBomPtrs.end(),SortFlangeBom);
//std::sort(m_vtWGasketBomPtrs.begin(),m_vtWGasketBomPtrs.end(),SortGasketBom);
/*
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.DeleteAllItems();
int nItem = 0;
CString sText,sTemp;
//PIPE
PipeBom* pPipe = NULL;
typedef std::vector<PipeBom*>::iterator PBomIT;
//for (int i = 0;i < m_vtPipeBomPtrs.size();i++)
for(PBomIT it1 = m_vtPipeBomPtrs.begin();it1 != m_vtPipeBomPtrs.end();it1++)
{
//pPipe = m_vtPipeBomPtrs[i];
pPipe = (*it1);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("管");
sTemp = pPipe->szMertial;
sTemp.TrimRight();
if (sTemp.IsEmpty())
{
sText = _T("焊接钢管");
}
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("D%dx%.1f"),pPipe->nD,pPipe->fThick);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("米");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),(short)(pPipe->dLen + 0.5));
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pPipe->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
CableBom* pCable = NULL;
typedef std::vector<CableBom*>::iterator CabBomIT;
for(CabBomIT it1 = m_vtCableBomPtrs.begin();it1 != m_vtCableBomPtrs.end();it1++)
{
pCable = (*it1);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("电缆");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("%s D%d"),pCable->szModel,pCable->nD);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("米");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),(short)(pCable->dLen + 0.5));
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pCable->szModel);
m_wndBomList.SetItemText(nItem,6,pCable->szFactory);
}
//Elbow
ElbowBom* pElbow = NULL;
typedef std::vector<ElbowBom*>::iterator EBomIT;
for(EBomIT it2 = m_vtElbowBomPtrs.begin();it2 != m_vtElbowBomPtrs.end();it2++)
//for (int i = 0;i < m_vtElbowBomPtrs.size();i++)
{
//pElbow = m_vtElbowBomPtrs[i];
pElbow = (*it2);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("弯头");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("%d度弯头 D%dx%.1f"),pElbow->nAngle,pElbow->nD,pElbow->fThick);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pElbow->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pElbow->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
//Reducer
ReducerBom* pReducer = NULL;
typedef std::vector<ReducerBom*>::iterator RBomIT;
//for (int i = 0;i < m_vtReducerBomPtrs.size();i++)
for (RBomIT it3 = m_vtReducerBomPtrs.begin();it3 != m_vtReducerBomPtrs.end();it3++)
{
//pReducer = m_vtReducerBomPtrs[i];
pReducer = (*it3);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = pReducer->nOffset ? _T("偏心变径") : _T("变径");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("D%dx%.1f-D%dx%.1f L=%d"),pReducer->nD,pReducer->fThick,pReducer->nTD,pReducer->fThick,pReducer->nLen);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pReducer->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pReducer->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
//Tee
TeeBom* pTee = NULL;
typedef std::vector<TeeBom*>::iterator TBomIT;
//for (int i = 0;i < m_vtTeeBomPtrs.size();i++)
for(TBomIT it4 = m_vtTeeBomPtrs.begin();it4 != m_vtTeeBomPtrs.end();it4++)
{
//pTee = m_vtTeeBomPtrs[i];
pTee = (*it4);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("三通");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("D%dx%.1f-D%dx%.1f L=%d B=%d"),pTee->nD,pTee->fThick,pTee->nTD,pTee->fThick,pTee->nL,pTee->nB);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pTee->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pTee->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
//LTee
LTeeBom* pLTee = NULL;
typedef std::vector<LTeeBom*>::iterator LTBomIT;
//for (int i = 0;i < m_vtLTeeBomPtrs.size();i++)
for(LTBomIT it5 = m_vtLTeeBomPtrs.begin();it5 != m_vtLTeeBomPtrs.end();it5++)
{
//pLTee = m_vtLTeeBomPtrs[i];
pLTee = (*it5);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("L三通");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("D%dx%.1f-D%dx%.1f E=%d M=%d B=%d"),pLTee->nD,
pLTee->fThick,
pLTee->nTD,
pLTee->fThick,
pLTee->nE,
pLTee->nM,
pLTee->nB);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pLTee->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pLTee->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
//WYE
WyeBom* pWye = NULL;
typedef std::vector<WyeBom*>::iterator WyBomIT;
//for (int i = 0;i < m_vtWyeBomPtrs.size();i++)
for(WyBomIT it6 = m_vtWyeBomPtrs.begin();it6 != m_vtWyeBomPtrs.end();it6++)
{
//pWye = m_vtWyeBomPtrs[i];
pWye = (*it6);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("Y三通");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("D%dx%.1f-D%dx%.1f M=%d B=%d"),pWye->nD,
pWye->fThick,pWye->nTD,pWye->fThick,pWye->nM,pWye->nB);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pWye->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pWye->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
//Cross
CrossBom* pCross = NULL;
typedef std::vector<CrossBom*>::iterator CBomIT;
//for (int i = 0;i < m_vtCrossBomPtrs.size();i++)
for (CBomIT it7 = m_vtCrossBomPtrs.begin();it7 != m_vtCrossBomPtrs.end();it7++)
{
//pCross = m_vtCrossBomPtrs[i];
pCross = (*it7);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("四通");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("D%dx%.1f-D%dx%.1f L=%d B=%d"),pCross->nD,pCross->fThick,pCross->nTD,pCross->fThick,pCross->nL,pCross->nB);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pCross->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pCross->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
//WCap
WCapBom* pWcap = NULL;
typedef std::vector<WCapBom*>::iterator WCBomIT;
//for (int i = 0;i <m_vtWCapBomPtrs.size();i++)
for(WCBomIT it8 = m_vtWCapBomPtrs.begin();it8 != m_vtWCapBomPtrs.end();it8++)
{
//pWcap = m_vtWCapBomPtrs[i];
pWcap = (*it8);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("堵头");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("D%dx%.1f L=%d"),pWcap->nD,pWcap->fThick,pWcap->nL);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pWcap->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pWcap->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
//Flange
WFlangeBom* pFlangeBom = NULL;
typedef std::vector<WFlangeBom*>::iterator WFlangeBomIT;
//for (int i = 0;i <m_vtWFlangeBomPtrs.size();i++)
for(WFlangeBomIT it9 = m_vtWFlangeBomPtrs.begin();it9 != m_vtWFlangeBomPtrs.end();it9++)
{
pFlangeBom = (*it9);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
sText = _T("法兰");
m_wndBomList.SetItemText(nItem,1,sText);
sText.Format(_T("DN%d"),pFlangeBom->nDn);
m_wndBomList.SetItemText(nItem,2,sText);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pFlangeBom->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,pFlangeBom->szMertial);
m_wndBomList.SetItemText(nItem,6,_T(""));
}
//设备
CString sName;
WEquBom* pCount = NULL;
for (POSITION ps = m_mapName2Count.GetStartPosition();ps != NULL;)
{
m_mapName2Count.GetNextAssoc(ps,sName,(void*&)pCount);
sText.Format(_T("%d"),m_wndBomList.GetItemCount() + 1);
nItem = m_wndBomList.InsertItem(m_wndBomList.GetItemCount(),sText);
m_wndBomList.SetItemText(nItem,1,sName);
m_wndBomList.SetItemText(nItem,2,pCount->szSpec);
sText = _T("个");
m_wndBomList.SetItemText(nItem,3,sText);
sText.Format(_T("%d"),pCount->nCount);
m_wndBomList.SetItemText(nItem,4,sText);
m_wndBomList.SetItemText(nItem,5,_T(""));
m_wndBomList.SetItemText(nItem,6,_T(""));
}
}