973 lines
23 KiB
C++
973 lines
23 KiB
C++
// LineNumDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "LineNumDlg.h"
|
|
#include "earthwormdef.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLineNumDlg dialog
|
|
|
|
|
|
CLineNumDlg::CLineNumDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CLineNumDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CLineNumDlg)
|
|
m_dCPressure = 1.0;
|
|
m_dCTemper = 100.0;
|
|
m_dDPressure = 1.0;
|
|
m_dDTemper = 100.0;
|
|
m_sEnd = _T("");
|
|
m_sInsMaterial = _T("");
|
|
m_sInsThinkness = _T("");
|
|
m_sMedium = _T("");
|
|
m_sPipeGA = _T("");
|
|
m_sPipeDn = _T("");
|
|
m_sPipeNum = _T("");
|
|
m_sPrjName = _T("");
|
|
m_sSpec = _T("");
|
|
m_sStart = _T("");
|
|
m_sTPipeDn = _T("");
|
|
m_iTPipeCount = 0;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CLineNumDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CLineNumDlg)
|
|
DDX_Control(pDX, IDC_SELECTST, m_CtlStart);
|
|
DDX_Control(pDX, IDC_SELECTEND, m_CtlEnd);
|
|
DDX_Control(pDX, IDC_SPEC, m_CtlSpec);
|
|
DDX_Control(pDX, IDC_MEDIUM, m_CtlMedium);
|
|
DDX_Control(pDX, IDC_TPIPEDN, m_CtlTPipeDn);
|
|
DDX_Control(pDX, IDC_PRJNAME, m_CtlPrjName);
|
|
DDX_Control(pDX, IDC_PIPEDN, m_CtlPipeDn);
|
|
DDX_Control(pDX, IDC_LINENUMTREE, m_CtlLineNum);
|
|
DDX_Text(pDX, IDC_CPRESSURE, m_dCPressure);
|
|
DDX_Text(pDX, IDC_CTEMPER, m_dCTemper);
|
|
DDX_Text(pDX, IDC_DPRESSURE, m_dDPressure);
|
|
DDX_Text(pDX, IDC_DTEMPER, m_dDTemper);
|
|
DDX_Text(pDX, IDC_END, m_sEnd);
|
|
DDX_Text(pDX, IDC_INSMATERIAL, m_sInsMaterial);
|
|
DDX_Text(pDX, IDC_INSTHINKNESS, m_sInsThinkness);
|
|
DDX_CBString(pDX, IDC_MEDIUM, m_sMedium);
|
|
DDX_CBString(pDX, IDC_PIPEGA, m_sPipeGA);
|
|
DDX_CBString(pDX, IDC_PIPEDN, m_sPipeDn);
|
|
DDX_CBString(pDX, IDC_PIPENUM, m_sPipeNum);
|
|
DDX_CBString(pDX, IDC_PRJNAME, m_sPrjName);
|
|
DDX_CBString(pDX, IDC_SPEC, m_sSpec);
|
|
DDX_Text(pDX, IDC_START, m_sStart);
|
|
DDX_CBString(pDX, IDC_TPIPEDN, m_sTPipeDn);
|
|
DDX_Text(pDX, IDC_TPIPECOUNT, m_iTPipeCount);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CLineNumDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CLineNumDlg)
|
|
ON_NOTIFY(NM_CLICK, IDC_LINENUMTREE, OnClickLinenumtree)
|
|
ON_BN_CLICKED(IDC_SAVEDATE, OnSavedate)
|
|
ON_BN_CLICKED(IDC_SELECTST, OnSelectst)
|
|
ON_BN_CLICKED(IDC_SELECTEND, OnSelectend)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLineNumDlg message handlers
|
|
|
|
void CLineNumDlg::OnOK()
|
|
{
|
|
AcDbBlockTable* pTable = NULL;
|
|
if (Acad::eOk != acdbHostApplicationServices()->workingDatabase()->getBlockTable(pTable,AcDb::kForRead))
|
|
{
|
|
return;
|
|
}
|
|
|
|
AcDbBlockTableRecord* pTableRecord = NULL;
|
|
if (Acad::eOk !=pTable->getAt(ACDB_MODEL_SPACE,pTableRecord,AcDb::kForRead))
|
|
{
|
|
pTable->close();
|
|
return;
|
|
}
|
|
pTable->close();
|
|
|
|
AcDbBlockTableRecordIterator* pTRIterator = NULL;
|
|
if(Acad::eOk != pTableRecord->newIterator(pTRIterator))
|
|
{
|
|
pTableRecord->close();
|
|
return;
|
|
}
|
|
pTableRecord->close();
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
AecDbObjXDataMap objXData;
|
|
BOOL bFind;
|
|
CString sLineNum = _T("");
|
|
AcDbObjectId idTemp = NULL;
|
|
CMapStringToObjectId mapLineNum;
|
|
|
|
|
|
for (pTRIterator->start();!pTRIterator->done();pTRIterator->step())
|
|
{
|
|
if (Acad::eOk == pTRIterator->getEntity(pEnt,AcDb::kForRead))
|
|
{
|
|
if (objXData.Read(pEnt,PIDPIPE_APP))
|
|
{
|
|
sLineNum = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sLineNum);
|
|
if(sLineNum != _T(""))
|
|
{
|
|
bFind = mapLineNum.Lookup(sLineNum,idTemp);
|
|
if (bFind == 0)
|
|
{
|
|
idTemp = pEnt->objectId();
|
|
mapLineNum.SetAt(sLineNum,idTemp);
|
|
}
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pTRIterator;
|
|
|
|
//循环将加入map的管号信息添加到Tree控件中
|
|
|
|
POSITION ps = NULL;
|
|
for (ps = mapLineNum.GetStartPosition();ps != NULL;)
|
|
{
|
|
mapLineNum.GetNextAssoc(ps,sLineNum,idTemp);
|
|
SetDateBase(m_sProjectName,sLineNum,idTemp);
|
|
}
|
|
int nRes = AfxMessageBox(_T("工艺信息已经传入BOM,是否启动BOM生成报表"),MB_YESNO);
|
|
if (nRes == IDYES)
|
|
{
|
|
CString sMtoexe,sMtoPath;
|
|
KTSetting::GetKTPsPath(sMtoexe);
|
|
sMtoPath = sMtoexe + _T("sys\\");
|
|
sMtoexe = sMtoPath;
|
|
sMtoexe += _T("KTBOM.exe");
|
|
::ShellExecute(acedGetAcadFrame()->m_hWnd,_T("open"),sMtoexe,NULL,sMtoPath,SW_SHOWNORMAL);
|
|
}
|
|
}
|
|
|
|
void CLineNumDlg::SetADOServer(CUIISQLiteServer * pADOServer)
|
|
{
|
|
this->m_pADOServer = pADOServer;
|
|
}
|
|
|
|
BOOL CLineNumDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
//
|
|
m_bmpBtn.LoadBitmap(IDB_SELECT);
|
|
m_CtlEnd.SetBitmap(m_bmpBtn);
|
|
m_CtlStart.SetBitmap(m_bmpBtn);
|
|
|
|
//获取初始化数据
|
|
AecDbObjXDataMap xDataMap;
|
|
PIDLineTools::ReSetPID(xDataMap);
|
|
if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap))
|
|
{
|
|
acedAlert(_T("\n系统没有初始化!"));
|
|
return FALSE;
|
|
}
|
|
xDataMap.GetAt(DOC_PIDPROJECT, m_sProjectName);
|
|
if (m_sProjectName ==_T(""))
|
|
{
|
|
acedAlert(_T("\n未获得项目名称!"));
|
|
return FALSE;
|
|
}
|
|
m_sPrjName = m_sProjectName;
|
|
m_CtlPrjName.AddString(m_sProjectName);
|
|
|
|
//遍历图纸将管号添加到tree中
|
|
HTREEITEM hChapter =m_CtlLineNum.InsertItem(m_sProjectName);
|
|
|
|
AcDbBlockTable* pTable = NULL;
|
|
if (Acad::eOk != acdbHostApplicationServices()->workingDatabase()->getBlockTable(pTable,AcDb::kForRead))
|
|
{
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
AcDbBlockTableRecord* pTableRecord = NULL;
|
|
if (Acad::eOk !=pTable->getAt(ACDB_MODEL_SPACE,pTableRecord,AcDb::kForRead))
|
|
{
|
|
pTable->close();
|
|
return FALSE;
|
|
}
|
|
pTable->close();
|
|
|
|
AcDbBlockTableRecordIterator* pTRIterator = NULL;
|
|
if(Acad::eOk != pTableRecord->newIterator(pTRIterator))
|
|
{
|
|
pTableRecord->close();
|
|
return FALSE;
|
|
}
|
|
pTableRecord->close();
|
|
|
|
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
AecDbObjXDataMap objXData;
|
|
BOOL bFind;
|
|
CString sLineNum = _T("");
|
|
//CString sValue = _T("管线号");
|
|
AcDbObjectId idTemp = NULL;
|
|
|
|
for (pTRIterator->start();!pTRIterator->done();pTRIterator->step())
|
|
{
|
|
if (Acad::eOk == pTRIterator->getEntity(pEnt,AcDb::kForRead))
|
|
{
|
|
if (objXData.Read(pEnt,PIDPIPE_APP))
|
|
{
|
|
sLineNum = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sLineNum);
|
|
if(sLineNum != _T(""))
|
|
{
|
|
bFind = m_mapLineNum.Lookup(sLineNum,idTemp);
|
|
if (bFind == 0)
|
|
{
|
|
idTemp = pEnt->objectId();
|
|
m_mapLineNum.SetAt(sLineNum,idTemp);
|
|
}
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pTRIterator;
|
|
|
|
//循环将加入map的管号信息添加到Tree控件中
|
|
|
|
POSITION ps = NULL;
|
|
for (ps = m_mapLineNum.GetStartPosition();ps != NULL;)
|
|
{
|
|
m_mapLineNum.GetNextAssoc(ps,sLineNum,idTemp);
|
|
m_CtlLineNum.InsertItem(sLineNum,hChapter,NULL);
|
|
}
|
|
|
|
m_CtlLineNum.SortChildren(hChapter);
|
|
m_CtlLineNum.Expand(hChapter,TVE_EXPAND);
|
|
|
|
//添加Dn数据到
|
|
SetDnData(m_CtlPipeDn);
|
|
SetDnData(m_CtlTPipeDn);
|
|
|
|
//添加该项目的等级名称
|
|
SetSpecData(m_CtlSpec,m_sProjectName);
|
|
|
|
//添加介质数据
|
|
SetMediumData(m_CtlMedium);
|
|
|
|
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
|
|
void CLineNumDlg::SetDnData(CComboBox& CmbBox)
|
|
{
|
|
|
|
CString sSQL=_T(""),sText=_T("");
|
|
CStringArray arValue;
|
|
int nCount=0;
|
|
CUIIValueTable valueTable;
|
|
|
|
//传入等级数据
|
|
|
|
sSQL.Format(_T("SELECT [公制] FROM [AecDn] order by [公制]"));
|
|
|
|
|
|
valueTable.RemoveAll();
|
|
m_pADOServer->GetSelData(sSQL,valueTable,TRUE);
|
|
|
|
nCount = valueTable.GetTableLogicSize();
|
|
|
|
CmbBox.ResetContent();
|
|
|
|
for(int i = 0;i<nCount;i++)
|
|
{
|
|
arValue.RemoveAll();
|
|
valueTable.GetValueRecord(i,arValue);
|
|
sText = arValue.GetAt(0);
|
|
CmbBox.AddString(sText);
|
|
}
|
|
valueTable.RemoveAll();
|
|
|
|
if (nCount != 0)
|
|
{
|
|
CmbBox.SetCurSel(0);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void CLineNumDlg::SetSpecData(CComboBox& CmbBox,CString sPrjName)
|
|
{
|
|
|
|
CString sSQL=_T(""),sText=_T("");
|
|
CStringArray arValue;
|
|
int nCount = 0;
|
|
CUIIValueTable valueTable;
|
|
|
|
//传入等级数据
|
|
|
|
sSQL.Format(_T("SELECT [等级名称] FROM [AecSpecname] where [项目名称]='%s' order by [等级名称]"),sPrjName);
|
|
|
|
|
|
valueTable.RemoveAll();
|
|
m_pADOServer->GetSelData(sSQL,valueTable,TRUE);
|
|
|
|
nCount = valueTable.GetTableLogicSize();
|
|
|
|
CmbBox.ResetContent();
|
|
|
|
for(int i = 0;i<nCount;i++)
|
|
{
|
|
arValue.RemoveAll();
|
|
valueTable.GetValueRecord(i,arValue);
|
|
sText = arValue.GetAt(0);
|
|
CmbBox.AddString(sText);
|
|
}
|
|
valueTable.RemoveAll();
|
|
if (nCount !=0 )
|
|
{
|
|
CmbBox.SetCurSel(0);
|
|
}
|
|
|
|
}
|
|
|
|
void CLineNumDlg::OnClickLinenumtree(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
m_sLineNum = _T("");
|
|
|
|
CPoint pt;
|
|
::GetCursorPos(&pt);
|
|
m_CtlLineNum.ScreenToClient(&pt);
|
|
UINT uFlags;
|
|
HTREEITEM hSelectItem = m_CtlLineNum.HitTest(pt,&uFlags);
|
|
m_sLineNum = m_CtlLineNum.GetItemText(hSelectItem);
|
|
|
|
if (m_sLineNum != m_sProjectName)
|
|
{
|
|
//从数据库中将对应管号的内容
|
|
SetTechnics(m_sProjectName,m_sLineNum);
|
|
}
|
|
else
|
|
{
|
|
m_sLineNum = _T("");
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CLineNumDlg::SetMediumData(CComboBox& CmbBox)
|
|
{
|
|
|
|
CString sSQL=_T(""),sText=_T("");
|
|
CStringArray arValue;
|
|
int nCount=0;
|
|
CUIIValueTable valueTable;
|
|
|
|
//传入等级数据
|
|
|
|
sSQL.Format(_T("SELECT [介质代号] FROM [AecFluid] order by [介质代号]"));
|
|
|
|
|
|
valueTable.RemoveAll();
|
|
m_pADOServer->GetSelData(sSQL,valueTable,TRUE);
|
|
|
|
nCount = valueTable.GetTableLogicSize();
|
|
|
|
CmbBox.ResetContent();
|
|
|
|
for(int i = 0;i<nCount;i++)
|
|
{
|
|
arValue.RemoveAll();
|
|
valueTable.GetValueRecord(i,arValue);
|
|
sText = arValue.GetAt(0);
|
|
CmbBox.AddString(sText);
|
|
}
|
|
valueTable.RemoveAll();
|
|
|
|
if (nCount != 0)
|
|
{
|
|
CmbBox.SetCurSel(0);
|
|
}
|
|
|
|
}
|
|
//
|
|
void CLineNumDlg::SetTechnics(CString sPrjName,CString sLineNum)
|
|
{
|
|
|
|
m_sPrjName = m_sProjectName;
|
|
m_sPipeNum = m_sLineNum;
|
|
|
|
m_sStart = _T("");
|
|
m_sEnd =_T("");
|
|
m_sSpec = _T("");
|
|
m_sPipeDn = _T("");
|
|
m_sMedium = _T("");
|
|
m_sPipeGA = _T("");
|
|
m_dDTemper = 0;
|
|
m_dCTemper = 0;
|
|
m_dDPressure =0;
|
|
m_dCPressure = 0;
|
|
m_sInsMaterial = _T("");
|
|
m_sInsThinkness = _T("");
|
|
m_sTPipeDn = _T("");
|
|
m_iTPipeCount = 0;
|
|
|
|
AcDbObjectId idTemp = NULL;
|
|
m_mapLineNum.Lookup(m_sLineNum,idTemp);
|
|
if (idTemp.isValid())
|
|
{
|
|
AecDbObjXDataMap objXData;
|
|
AcDbEntity* pEnt= NULL;
|
|
CString sTemp =_T("");
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,idTemp,AcDb::kForRead))
|
|
{
|
|
if (objXData.Read(pEnt,PIDPIPE_APP))
|
|
{
|
|
m_sPrjName = sPrjName;
|
|
m_sPipeNum = sLineNum;
|
|
|
|
sTemp =_T("");//起始点
|
|
objXData.GetAt(PID_PIPE_START,sTemp);
|
|
m_sStart = sTemp;
|
|
|
|
sTemp =_T("");//末点
|
|
objXData.GetAt(PID_PIPE_END,sTemp);
|
|
m_sEnd = sTemp;
|
|
|
|
sTemp =_T("");//等级
|
|
objXData.GetAt(PID_PIPE_LEVEL,sTemp);
|
|
m_sSpec = sTemp;
|
|
|
|
sTemp =_T("");//公称直径
|
|
objXData.GetAt(PID_PIPE_DN,sTemp);
|
|
m_sPipeDn = sTemp;
|
|
|
|
sTemp =_T("");//介质
|
|
objXData.GetAt(PID_PIPE_MEDIA,sTemp);
|
|
m_sMedium = sTemp;
|
|
|
|
sTemp =_T("");//管道级别
|
|
objXData.GetAt(PID_PIPE_PIPEGA,sTemp);
|
|
m_sPipeGA = sTemp;
|
|
|
|
sTemp =_T("");//设计温度
|
|
objXData.GetAt(PID_PIPE_DTEMPER,sTemp);
|
|
m_dDTemper = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//操作温度
|
|
objXData.GetAt(PID_PIPE_CTEMPER,sTemp);
|
|
m_dCTemper = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//设计压力
|
|
objXData.GetAt(PID_PIPE_DPRESS,sTemp);
|
|
m_dDPressure = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//操作压力
|
|
objXData.GetAt(PID_PIPE_CPRESS,sTemp);
|
|
m_dCPressure = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//保温材料
|
|
objXData.GetAt(PID_PIPE_INSMAT,sTemp);
|
|
m_sInsMaterial = sTemp;
|
|
|
|
sTemp =_T("");//保温厚度
|
|
objXData.GetAt(PID_PIPE_INSTNK,sTemp);
|
|
m_sInsThinkness = sTemp;
|
|
|
|
sTemp =_T("");//伴热管公称直径
|
|
objXData.GetAt(PID_PIPE_TPDN,sTemp);
|
|
m_sTPipeDn = sTemp;
|
|
|
|
sTemp =_T("");//伴热管个数
|
|
objXData.GetAt(PID_PIPE_TPCOUNT,sTemp);
|
|
m_iTPipeCount = _ttoi(sTemp);
|
|
}
|
|
pEnt->close();
|
|
|
|
}
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CLineNumDlg::SetDateBase(CString sPrjName,CString sLineNum,AcDbObjectId idPipe)
|
|
{
|
|
//
|
|
CString sPipeNum =sLineNum;
|
|
CString sStart =_T("");
|
|
CString sEnd =_T("");
|
|
CString sSpec =_T("");
|
|
CString sPipeDn =_T("");
|
|
CString sMedium =_T("");
|
|
CString sPipeGA =_T("");
|
|
CString sInsMaterial =_T("");
|
|
CString sTPipeDn =_T("");
|
|
double dDTemper=0;
|
|
double dCTemper=0;
|
|
double dDPressure=0;
|
|
double dCPressure=0;
|
|
int iTPipeCount=0;
|
|
double dInsThinkness =0;
|
|
if (idPipe.isValid())
|
|
{
|
|
AecDbObjXDataMap objXData;
|
|
AcDbEntity* pEnt= NULL;
|
|
CString sTemp =_T("");
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,idPipe,AcDb::kForRead))
|
|
{
|
|
if (objXData.Read(pEnt,PIDPIPE_APP))
|
|
{
|
|
sTemp =_T("");//起始点
|
|
objXData.GetAt(PID_PIPE_START,sTemp);
|
|
sStart = sTemp;
|
|
|
|
sTemp =_T("");//末点
|
|
objXData.GetAt(PID_PIPE_END,sTemp);
|
|
sEnd = sTemp;
|
|
|
|
sTemp =_T("");//等级
|
|
objXData.GetAt(PID_PIPE_LEVEL,sTemp);
|
|
sSpec = sTemp;
|
|
|
|
sTemp =_T("");//公称直径
|
|
objXData.GetAt(PID_PIPE_DN,sTemp);
|
|
sPipeDn = sTemp;
|
|
|
|
sTemp =_T("");//介质
|
|
objXData.GetAt(PID_PIPE_MEDIA,sTemp);
|
|
sMedium = sTemp;
|
|
|
|
sTemp =_T("");//管道级别
|
|
objXData.GetAt(PID_PIPE_PIPEGA,sTemp);
|
|
sPipeGA = sTemp;
|
|
|
|
sTemp =_T("");//设计温度
|
|
objXData.GetAt(PID_PIPE_DTEMPER,sTemp);
|
|
dDTemper = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//操作温度
|
|
objXData.GetAt(PID_PIPE_CTEMPER,sTemp);
|
|
dCTemper = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//设计压力
|
|
objXData.GetAt(PID_PIPE_DPRESS,sTemp);
|
|
dDPressure = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//操作压力
|
|
objXData.GetAt(PID_PIPE_CPRESS,sTemp);
|
|
dCPressure = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//保温材料
|
|
objXData.GetAt(PID_PIPE_INSMAT,sTemp);
|
|
sInsMaterial = sTemp;
|
|
|
|
sTemp =_T("");//保温厚度
|
|
objXData.GetAt(PID_PIPE_INSTNK,sTemp);
|
|
dInsThinkness = _ttof(sTemp);
|
|
|
|
sTemp =_T("");//伴热管公称直径
|
|
objXData.GetAt(PID_PIPE_TPDN,sTemp);
|
|
sTPipeDn = sTemp;
|
|
|
|
sTemp =_T("");//伴热管个数
|
|
objXData.GetAt(PID_PIPE_TPCOUNT,sTemp);
|
|
iTPipeCount = _ttoi(sTemp);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
//插入数据
|
|
CString sSQL=_T("");
|
|
int nCount = 0;
|
|
CUIIValueTable valueTable;
|
|
|
|
sSQL.Format(_T("SELECT * FROM [AecTechnics] where [项目名称] ='%s' and [管线名称] ='%s'"),sPrjName,sLineNum);
|
|
|
|
valueTable.RemoveAll();
|
|
m_pADOServer->GetSelData(sSQL,valueTable,TRUE);
|
|
|
|
nCount = valueTable.GetTableLogicSize();
|
|
if (nCount == 0)
|
|
{
|
|
sSQL.Format(_T("insert into [AecTechnics] ([项目名称],[管线名称],[起点],[终点],[管道等级],")
|
|
_T("[公称直径],[介质],[管道类别],[设计温度],[操作温度],")
|
|
_T("[设计压力],[操作压力],[保温材料],[保温厚度],[伴热公称直径],[伴热根数])")
|
|
_T(" values ('%s','%s','%s','%s','%s',")
|
|
_T("%d,'%s','%s',%g,%g,")
|
|
_T("%g,%g,'%s',%g,%d,%d)"),
|
|
sPrjName,sPipeNum,sStart,sEnd,sSpec,_ttoi(sPipeDn),
|
|
sMedium,sPipeGA,dDTemper,dCTemper,dDPressure,dCPressure,
|
|
sInsMaterial,dInsThinkness,_ttoi(sTPipeDn),iTPipeCount);
|
|
|
|
m_pADOServer->ExecuteSQL(sSQL);
|
|
AfxMessageBox(_T("数据插入成功!"));
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
sSQL.Format(_T("update [AecTechnics] set [起点] = '%s',[终点] = '%s',")
|
|
_T("[管道等级] = '%s',[公称直径] = %d,[介质]= '%s',[管道类别] = '%s',")
|
|
_T("[设计温度] = %g,[操作温度] = %g,[设计压力] = %g,[操作压力] = %g,")
|
|
_T("[保温材料]= '%s',[伴热公称直径] = %d,[伴热根数] = %d,[保温厚度] = %g")
|
|
_T(" where [项目名称] = '%s' and [管线名称] = '%s'"),
|
|
sStart,sEnd,sSpec,_ttoi(sPipeDn),
|
|
sMedium,sPipeGA,dDTemper,dCTemper,dDPressure,dCPressure,
|
|
sInsMaterial,_ttoi(sTPipeDn),iTPipeCount,dInsThinkness,sPrjName,sPipeNum);
|
|
m_pADOServer->ExecuteSQL(sSQL);
|
|
AfxMessageBox(_T("数据修改成功!"));
|
|
}
|
|
}
|
|
|
|
void CLineNumDlg::OnSavedate()
|
|
{
|
|
if(m_sLineNum != _T(""))
|
|
{
|
|
UpdateData(TRUE);
|
|
AcDbBlockTable* pTable = NULL;
|
|
if (Acad::eOk != acdbHostApplicationServices()->workingDatabase()->getBlockTable(pTable,AcDb::kForRead))
|
|
{
|
|
return;
|
|
}
|
|
|
|
AcDbBlockTableRecord* pTableRecord = NULL;
|
|
if (Acad::eOk !=pTable->getAt(ACDB_MODEL_SPACE,pTableRecord,AcDb::kForRead))
|
|
{
|
|
pTable->close();
|
|
return;
|
|
}
|
|
pTable->close();
|
|
|
|
AcDbBlockTableRecordIterator* pTRIterator = NULL;
|
|
if(Acad::eOk != pTableRecord->newIterator(pTRIterator))
|
|
{
|
|
pTableRecord->close();
|
|
return;
|
|
}
|
|
pTableRecord->close();
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
AecDbObjXDataMap objXData;
|
|
CString sLineNum = _T("");
|
|
AcDbObjectId idTemp = NULL;
|
|
bool bSaveOk = false;
|
|
for (pTRIterator->start();!pTRIterator->done();pTRIterator->step())
|
|
{
|
|
if (Acad::eOk == pTRIterator->getEntity(pEnt,AcDb::kForWrite))
|
|
{
|
|
if (pEnt->isKindOf(AcDbPolyline::desc()))
|
|
{
|
|
if (objXData.Read(pEnt,PIDPIPE_APP))
|
|
{
|
|
sLineNum = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sLineNum);
|
|
if(sLineNum == m_sLineNum)
|
|
{
|
|
objXData.SetAt(PID_PIPE_START,m_sStart);
|
|
objXData.SetAt(PID_PIPE_END,m_sEnd);
|
|
objXData.SetAt(PID_PIPE_LEVEL,m_sSpec);
|
|
objXData.SetAt(PID_PIPE_DN,m_sPipeDn);
|
|
objXData.SetAt(PID_PIPE_MEDIA,m_sMedium);
|
|
objXData.SetAt(PID_PIPE_PIPEGA,m_sPipeGA);
|
|
objXData.SetAt(PID_PIPE_DTEMPER,m_dDTemper);
|
|
objXData.SetAt(PID_PIPE_CTEMPER,m_dCTemper);
|
|
objXData.SetAt(PID_PIPE_DPRESS,m_dDPressure);
|
|
objXData.SetAt(PID_PIPE_CPRESS,m_dCPressure);
|
|
objXData.SetAt(PID_PIPE_INSMAT,m_sInsMaterial);
|
|
objXData.SetAt(PID_PIPE_INSTNK,m_sInsThinkness);
|
|
objXData.SetAt(PID_PIPE_TPDN,m_sTPipeDn);
|
|
objXData.SetAt(PID_PIPE_TPCOUNT,m_iTPipeCount);
|
|
objXData.Write(pEnt,PIDPIPE_APP);
|
|
bSaveOk = true;
|
|
}
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pTRIterator;
|
|
if (bSaveOk)
|
|
{
|
|
AfxMessageBox(_T("写入选择实体完毕!"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("请首先选择管号!"));
|
|
}
|
|
}
|
|
|
|
void CLineNumDlg::OnSelectst()
|
|
{
|
|
CWnd * pWnd = acedGetAcadFrame();
|
|
this->EnableWindow(FALSE);
|
|
pWnd->EnableWindow(TRUE);
|
|
this->ShowWindow(SW_HIDE);
|
|
//选择实体
|
|
AcGePoint3d pt;
|
|
ads_name en;
|
|
AcDbObjectId idSelected = NULL;
|
|
AcDbObjectId idGroup = NULL;
|
|
AcDbObjectId idTemp = NULL;
|
|
AcDbObjectId idTip = NULL;
|
|
AcDbEntity* pEnt =NULL;
|
|
AecDbObjXDataMap objXData;
|
|
CString sContent = _T("");
|
|
int nRes = acedEntSel(_T("\n请选择实体:"),en,asDblArray(pt));
|
|
if (nRes == RTNORM)
|
|
{
|
|
if (Acad::eOk == acdbGetObjectId(idSelected,en))
|
|
{
|
|
idGroup = GetGroupId(idSelected);
|
|
// 通过组ID获得物体中材料点的信息
|
|
if (idGroup !=AcDbObjectId::kNull)
|
|
{
|
|
AcDbGroup* pGroup = NULL;
|
|
acdbOpenObject(pGroup,idGroup,AcDb::kForRead);
|
|
AcDbGroupIterator* pIter = pGroup->newIterator();
|
|
for(;!pIter->done();pIter->next())
|
|
{
|
|
idTemp = pIter->objectId();
|
|
if (objXData.Read(idTemp,_T("KTParamPart")))
|
|
{
|
|
objXData.GetAt(_T("点类型"),sContent);
|
|
if (sContent.CompareNoCase(_T("材料点"))==0)
|
|
{
|
|
objXData.GetAt(_T("名称"),sContent);
|
|
if (sContent.CompareNoCase(_T("设备"))==0)
|
|
{
|
|
idTip = idTemp;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (objXData.Read(idTemp,PIDPIPE_APP))
|
|
{
|
|
sContent = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sContent);
|
|
if(sContent != _T(""))
|
|
{
|
|
idTip = idTemp;
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
delete pIter;
|
|
pGroup->close();
|
|
}
|
|
else
|
|
{
|
|
idTip = idSelected;
|
|
}
|
|
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, idTip, AcDb::kForRead))
|
|
{
|
|
if (objXData.Read(pEnt,_T("KTParamPart")))
|
|
{
|
|
objXData.GetAt(_T("设备位号"),sContent);
|
|
m_sStart = sContent;
|
|
}
|
|
//管子
|
|
if (objXData.Read(pEnt,PIDPIPE_APP))
|
|
{
|
|
sContent = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sContent);
|
|
if(sContent != _T(""))
|
|
{
|
|
m_sStart = sContent;
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("没有选中实体!"));
|
|
}
|
|
|
|
this->ShowWindow(SW_SHOW);
|
|
this->EnableWindow(TRUE);
|
|
this->UpdateData(FALSE);
|
|
}
|
|
|
|
|
|
|
|
|
|
AcDbObjectId CLineNumDlg::GetGroupId(AcDbObjectId objId)
|
|
{
|
|
AcDbObjectId persObjId;
|
|
AcDbObject *pEnt;
|
|
if (Acad::eOk != acdbOpenObject(pEnt, objId, AcDb::kForRead))
|
|
{
|
|
acutPrintf(_T("\n实体打开失败!"));
|
|
return AcDbObjectId::kNull;
|
|
}
|
|
|
|
AcDbDictionary *pGroup;
|
|
const AcDbVoidPtrArray *pReactors;
|
|
pReactors = pEnt->reactors();
|
|
if (pReactors == NULL)
|
|
{
|
|
acutPrintf(_T("\n该实体未编组!"));
|
|
pEnt->close();
|
|
return AcDbObjectId::kNull;
|
|
}
|
|
pEnt->close();
|
|
int length = pReactors->length();
|
|
void *pSomething;
|
|
for (int i = 0; i < length; ++i)
|
|
{
|
|
pSomething = (AcDbObject*) pReactors->at(i);
|
|
if (acdbIsPersistentReactor(pSomething)) {
|
|
// Every group reactor is a persistent reactor.
|
|
// Is this a reactor from a group?
|
|
persObjId = acdbPersistentReactorObjectId(pSomething);
|
|
AcDbObject *pReactor;
|
|
if (Acad::eOk != acdbOpenObject(pReactor, persObjId, AcDb::kForRead))
|
|
{
|
|
acutPrintf(_T("\n迭代器打开失败!"));
|
|
continue;
|
|
}
|
|
if (pReactor->isKindOf(AcDbGroup::desc())) {
|
|
// This is a group reactor. Get the group name.
|
|
AcDbObjectId groupId = pReactor->ownerId();
|
|
if (Acad::eOk != acdbOpenObject(pGroup, groupId, AcDb::kForRead))
|
|
{
|
|
acutPrintf(_T("\n组打开失败!"));
|
|
pReactor->close();
|
|
continue;
|
|
}
|
|
LPTSTR groupName;
|
|
if (Acad::eOk != (pGroup->nameAt(persObjId, groupName)))
|
|
{
|
|
acutPrintf(_T("\n获得组名失败!"));
|
|
pReactor->close();
|
|
pGroup->close();
|
|
continue;
|
|
}
|
|
pGroup->close();
|
|
}
|
|
pReactor->close();
|
|
}
|
|
}
|
|
return persObjId;
|
|
}
|
|
|
|
void CLineNumDlg::OnSelectend()
|
|
{
|
|
CWnd * pWnd = acedGetAcadFrame();
|
|
this->EnableWindow(FALSE);
|
|
pWnd->EnableWindow(TRUE);
|
|
this->ShowWindow(SW_HIDE);
|
|
//选择实体
|
|
AcGePoint3d pt;
|
|
ads_name en;
|
|
AcDbObjectId idSelected = NULL;
|
|
AcDbObjectId idGroup = NULL;
|
|
AcDbObjectId idTemp = NULL;
|
|
AcDbObjectId idTip = NULL;
|
|
AcDbEntity* pEnt =NULL;
|
|
AecDbObjXDataMap objXData;
|
|
CString sContent = _T("");
|
|
int nRes = acedEntSel(_T("\n请选择实体:"),en,asDblArray(pt));
|
|
if (nRes == RTNORM)
|
|
{
|
|
if (Acad::eOk == acdbGetObjectId(idSelected,en))
|
|
{
|
|
idGroup = GetGroupId(idSelected);
|
|
// 通过组ID获得物体中材料点的信息
|
|
if (idGroup !=AcDbObjectId::kNull)
|
|
{
|
|
AcDbGroup* pGroup = NULL;
|
|
acdbOpenObject(pGroup,idGroup,AcDb::kForRead);
|
|
AcDbGroupIterator* pIter = pGroup->newIterator();
|
|
for(;!pIter->done();pIter->next())
|
|
{
|
|
idTemp = pIter->objectId();
|
|
if (objXData.Read(idTemp,_T("KTParamPart")))
|
|
{
|
|
objXData.GetAt(_T("点类型"),sContent);
|
|
if (sContent.CompareNoCase(_T("材料点"))==0)
|
|
{
|
|
objXData.GetAt(_T("名称"),sContent);
|
|
if (sContent.CompareNoCase(_T("设备"))==0)
|
|
{
|
|
idTip = idTemp;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (objXData.Read(idTemp,PIDPIPE_APP))
|
|
{
|
|
sContent = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sContent);
|
|
if(sContent != _T(""))
|
|
{
|
|
idTip = idTemp;
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
delete pIter;
|
|
pGroup->close();
|
|
}
|
|
else
|
|
{
|
|
idTip = idSelected;
|
|
}
|
|
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, idTip, AcDb::kForRead))
|
|
{
|
|
//设备
|
|
if (objXData.Read(pEnt,_T("KTParamPart")))
|
|
{
|
|
objXData.GetAt(_T("设备位号"),sContent);
|
|
m_sEnd = sContent;
|
|
}
|
|
//管子
|
|
if (objXData.Read(pEnt,PIDPIPE_APP))
|
|
{
|
|
sContent = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sContent);
|
|
if(sContent != _T(""))
|
|
{
|
|
m_sEnd = sContent;
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("没有选中实体!"));
|
|
}
|
|
|
|
this->ShowWindow(SW_SHOW);
|
|
this->EnableWindow(TRUE);
|
|
this->UpdateData(FALSE);
|
|
}
|