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

7762 lines
194 KiB
C++

#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<LPTSTR>(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<AecInterface> 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(&param1, pParam, sizeof(WPipe::PipeParam));
BomFlangeGet(&param1, 1);
param1.m_dDN = dEDn;
BomFlangeGet(&param1, 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(&param1, pParam, sizeof(WPipe::PipeParam));
BomFlangeGet(&param1, 2);
param1.m_dDN = dEDn;
BomFlangeGet(&param1, 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(&ltBom,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(&param1, pParam, sizeof(WPipe::PipeParam));
BomFlangeGet(&param1, 2);
param1.m_dDN = dEDn;
BomFlangeGet(&param1, 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(&param1, pParam, sizeof(WPipe::PipeParam));
BomFlangeGet(&param1, 1);
param1.m_dDN = dEDn;
BomFlangeGet(&param1, 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(&param1, pParam, sizeof(WPipe::PipeParam));
BomFlangeGet(&param1, 2);
param1.m_dDN = dEDn;
BomFlangeGet(&param1, 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<CString,LPCTSTR,int,int> 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);
}
}
}
}
}