1511 lines
37 KiB
C++
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(""));
|
|
}
|
|
} |