// TdChannel.cpp: implementation of the CTdChannel class. // ////////////////////////////////////////////////////////////////////// #include "geomative.h" #include "TdChannel.h" #include "MediumQ.h" #include "Rsp2DTdRecord.h" #include "RspCETdRecord.h" #include "Rsp3DTdRecord.h" #include "Ipsp3DTdRecord.h" #include "Ipsp2DTdRecord.h" #include "IpspCETdRecord.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CTdChannel::CTdChannel(DWORD dwScID, int iChNum, _ConnectionPtr& pConnection) { this->m_dwScID = dwScID; this->m_iChNum = iChNum; m_dwID = (int)VAL_ZERO; m_iEAmount = (int)VAL_ZERO; m_iMaxLevel = (int)VAL_ZERO; m_pConnection = pConnection; m_pMedium = NULL; m_tdRecArray.RemoveAll(); // m_tdRecArray.SetSize(20480); m_fMaxR0 = (float)VAL_ZERO; m_fMinR0 = (float)VAL_ZERO; m_fScaleR0 = (float)VAL_ZERO; m_fMaxDepth = (float)VAL_ZERO; } CTdChannel::~CTdChannel() { } BOOL CTdChannel::Load3DScriptFromDB() { _RecordsetPtr pRecCh = NULL; _RecordsetPtr pRecSpt3D = NULL; CString szSql = _T(""); CRsp3DTdRecord* pRsp3DTdRecord = NULL; DWORD dwChID = (DWORD)VAL_ZERO; pRecCh.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select ID from channel where SCID = %u and CHnumber = %d"), m_dwScID, m_iChNum); pRecCh->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCh->GetRecordCount()) { dwChID = (DWORD)pRecCh->GetCollect(_T("ID")).ulVal; } pRecCh->Close(); pRecSpt3D.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,C1,C2,P1,P2,K,N from Script3d where CHID = %u order by TSN"), dwChID); pRecSpt3D->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecSpt3D->adoEOF) { pRsp3DTdRecord = new CRsp3DTdRecord(this->m_dwID, this->m_pConnection); pRsp3DTdRecord->m_iTsn = (int)pRecSpt3D->GetCollect(_T("TSN")).lVal; pRsp3DTdRecord->m_iC1 = (int)pRecSpt3D->GetCollect(_T("C1")).iVal; pRsp3DTdRecord->m_iC2 = (int)pRecSpt3D->GetCollect(_T("C2")).iVal; pRsp3DTdRecord->m_iP1 = (int)pRecSpt3D->GetCollect(_T("P1")).iVal; pRsp3DTdRecord->m_iP2 = (int)pRecSpt3D->GetCollect(_T("P2")).iVal; pRsp3DTdRecord->m_fK = (float)pRecSpt3D->GetCollect(_T("K")).fltVal; pRsp3DTdRecord->m_iN = (int)pRecSpt3D->GetCollect(_T("N")).iVal; pRsp3DTdRecord->m_fR0 = (float)VAL_ZERO; pRsp3DTdRecord->m_fI = (float)VAL_ZERO; pRsp3DTdRecord->m_fV = (float)VAL_ZERO; pRsp3DTdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); pRsp3DTdRecord->m_recPtArea.SetRectEmpty(); pRsp3DTdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pRsp3DTdRecord->m_iC1, pRsp3DTdRecord->m_iC2, pRsp3DTdRecord->m_iP1, pRsp3DTdRecord->m_iP2); pRsp3DTdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pRsp3DTdRecord->m_iC1, pRsp3DTdRecord->m_iC2, pRsp3DTdRecord->m_iP1, pRsp3DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pRsp3DTdRecord); pRecSpt3D->MoveNext(); } pRecSpt3D->Close(); return TRUE; } BOOL CTdChannel::Load2DScriptFromDB() { _RecordsetPtr pRecCh = NULL; _RecordsetPtr pRecSpt2D = NULL; CString szSql = _T(""); CRsp2DTdRecord* pRsp2DTdRecord = NULL; DWORD dwChID = (DWORD)VAL_ZERO; pRecCh.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select ID from channel where SCID = %u and CHnumber = %d"), m_dwScID, m_iChNum); pRecCh->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCh->GetRecordCount()) { dwChID = (DWORD)pRecCh->GetCollect(_T("ID")).ulVal; } pRecCh->Close(); pRecSpt2D.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,C1,C2,P1,P2,K,N from Script2d where CHID = %u order by TSN"), dwChID); pRecSpt2D->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecSpt2D->adoEOF) { pRsp2DTdRecord = new CRsp2DTdRecord(this->m_dwID, this->m_pConnection); pRsp2DTdRecord->m_iTsn = (int)pRecSpt2D->GetCollect(_T("TSN")).lVal; pRsp2DTdRecord->m_iC1 = (int)pRecSpt2D->GetCollect(_T("C1")).iVal; pRsp2DTdRecord->m_iC2 = (int)pRecSpt2D->GetCollect(_T("C2")).iVal; pRsp2DTdRecord->m_iP1 = (int)pRecSpt2D->GetCollect(_T("P1")).iVal; pRsp2DTdRecord->m_iP2 = (int)pRecSpt2D->GetCollect(_T("P2")).iVal; pRsp2DTdRecord->m_fK = (float)pRecSpt2D->GetCollect(_T("K")).fltVal; pRsp2DTdRecord->m_iN = (int)pRecSpt2D->GetCollect(_T("N")).iVal; pRsp2DTdRecord->m_fR0 = (float)VAL_ZERO; pRsp2DTdRecord->m_fI = (float)VAL_ZERO; pRsp2DTdRecord->m_fV = (float)VAL_ZERO; pRsp2DTdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); pRsp2DTdRecord->m_recPtArea.SetRectEmpty(); pRsp2DTdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pRsp2DTdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); pRsp2DTdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pRsp2DTdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pRsp2DTdRecord); pRecSpt2D->MoveNext(); } pRecSpt2D->Close(); return TRUE; } void CTdChannel::SetColorToTdRec(CRsp2DTdRecord* pRsp2DTdRecord) { int iIndex = (int)VAL_ZERO; int iColorIndex = (int)VAL_ZERO; COLORREF aColor[15]={RGB(0,0,0xFF),RGB(0,0x33,0xFF),RGB(0,0x66,0xFF),RGB(0,0x88,0xFF),RGB(0,0xCF,0xFE),RGB(0,0xFE,0xFF),RGB(0,0xFE,0x99),RGB(0,0xFE,0x33),RGB(0x99,0xFE,0),RGB(0xFF,0xFE,0),RGB(0xFE,0xCC,0),RGB(0xFE,0x98,0),RGB(0xFE,0x66,0),RGB(0xFE,0x33,0),RGB(0xFF,0,0)}; pRsp2DTdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); if (0 == pRsp2DTdRecord->m_fR0) { return; } //在这里SetMaxR0AndMinR0的函数已经添加到LoadRsp2DTdData中去了,也就是在加载2D数据的时候就已经获取到 //这个任务的R0的最大值和最小值,所以此时再数据在去比较的时候就不会跳转到SetMaxR0AndMinR0为真的函数结构中去了 //实际就全部走下面的else的分支,如果其它的数据需要显示剖面图的话,那么也需要在加载数据的时候调用etMaxR0AndMinR0 //来预先获得RO的最大值和最小值 if (SetMaxR0AndMinR0(pRsp2DTdRecord->m_fR0) == TRUE) { //这里完全属于冗余切会导致运算N*N次,N为测点数,所以这里不应该跳转到 if (m_fMaxR0 == m_fMinR0) { ((CRsp2DTdRecord*)this->m_tdRecArray.GetAt(iIndex))->m_colorREF = aColor[8]; } else { m_fScaleR0 = (m_fMaxR0-m_fMinR0)/15; } iIndex = (int)VAL_ZERO; while ((iIndex < this->m_tdRecArray.GetSize()) && ((int)VAL_ZERO != m_fScaleR0)) { if (0 != ((CRsp2DTdRecord*)this->m_tdRecArray.GetAt(iIndex))->m_fR0) { iColorIndex = (int)floor((((CRsp2DTdRecord*)this->m_tdRecArray.GetAt(iIndex))->m_fR0-m_fMinR0)/m_fScaleR0); if (iColorIndex > 14) { iColorIndex = 14; } ((CRsp2DTdRecord*)this->m_tdRecArray.GetAt(iIndex))->m_colorREF = aColor[iColorIndex]; } else { ((CRsp2DTdRecord*)this->m_tdRecArray.GetAt(iIndex))->m_colorREF = RGB(0xFF,0xFF,0xFF); } iIndex++; } } else { if (m_fMaxR0 == m_fMinR0) { ((CRsp2DTdRecord*)this->m_tdRecArray.GetAt(iIndex))->m_colorREF = aColor[8]; } else { m_fScaleR0 = (m_fMaxR0-m_fMinR0)/15; } iColorIndex = (int)floor((pRsp2DTdRecord->m_fR0-m_fMinR0)/m_fScaleR0); if (iColorIndex > 14) { iColorIndex = 14; } pRsp2DTdRecord->m_colorREF = aColor[iColorIndex]; } } BOOL CTdChannel::SetMaxR0AndMinR0(float fR0) { if ((0 == m_fMaxR0) && (0 == m_fMinR0)) { m_fMaxR0 = fR0; m_fMinR0 = fR0; } else if (fR0 > m_fMaxR0) { m_fMaxR0 = fR0; } else if (fR0 < m_fMinR0) { m_fMinR0 = fR0; } else { return FALSE; } return TRUE; } void CTdChannel::Clear3DSptRecList() { int iListIndex = (int)VAL_ZERO; iListIndex = (int)VAL_ZERO; while (iListIndex < this->m_tdRecArray.GetSize()) { if (this->m_tdRecArray.GetAt(iListIndex) != NULL) { delete (CRsp3DTdRecord*)m_tdRecArray.GetAt(iListIndex); } iListIndex++; } this->m_tdRecArray.RemoveAll(); m_fMaxR0 = (float)VAL_ZERO; m_fMinR0 = (float)VAL_ZERO; m_fScaleR0 = (float)VAL_ZERO; m_iMaxLevel = (int)VAL_ZERO; } void CTdChannel::Clear2DSptRecList() { int iListIndex = (int)VAL_ZERO; iListIndex = (int)VAL_ZERO; while (iListIndex < this->m_tdRecArray.GetSize()) { if (this->m_tdRecArray.GetAt(iListIndex) != NULL) { delete (CRsp2DTdRecord*)m_tdRecArray.GetAt(iListIndex); } iListIndex++; } this->m_tdRecArray.RemoveAll(); m_fMaxR0 = (float)VAL_ZERO; m_fMinR0 = (float)VAL_ZERO; m_fScaleR0 = (float)VAL_ZERO; m_iMaxLevel = (int)VAL_ZERO; } void CTdChannel::ClearCESptRecList() { int iListIndex = (int)VAL_ZERO; iListIndex = (int)VAL_ZERO; while (iListIndex < this->m_tdRecArray.GetSize()) { if (this->m_tdRecArray.GetAt(iListIndex) != NULL) { delete (CRspCETdRecord*)(m_tdRecArray.GetAt(iListIndex)); } iListIndex++; } m_fMaxR0 = (float)VAL_ZERO; m_fMinR0 = (float)VAL_ZERO; this->m_tdRecArray.RemoveAll(); } BOOL CTdChannel::SaveRsp3DTdData(DWORD dwScID) { CRsp3DTdRecord* pRsp3DTdRecord = NULL; _RecordsetPtr pRecTdCha; _CommandPtr pCmdIns; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; pRecTdCha.CreateInstance(_uuidof(Recordset)); pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = m_pConnection; try { szSql.Empty(); szSql.Format(_T("insert into tdchannel(TDID,CHnumber,AR) values(%u,%d,%d)"), dwScID, this->m_iChNum, this->m_pMedium->m_iAR); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecTdCha->Open(_T("select max(ID) as ID from tdchannel"), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecTdCha->GetRecordCount()) { this->m_dwID = (int)pRecTdCha->GetCollect(_T("ID")).ulVal; } pRecTdCha->Close(); iTdRecIndex = (int)VAL_ZERO; while (iTdRecIndex < m_tdRecArray.GetSize()) { pRsp3DTdRecord = NULL; pRsp3DTdRecord = (CRsp3DTdRecord*)m_tdRecArray.GetAt(iTdRecIndex); pRsp3DTdRecord->SaveData(m_dwID); iTdRecIndex++; } } catch(_com_error e) { throw e; return FALSE; } return TRUE; } BOOL CTdChannel::SaveRsp2DTdData(DWORD dwScID) { CRsp2DTdRecord* pRsp2DTdRecord = NULL; _RecordsetPtr pRecTdCha; _CommandPtr pCmdIns; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; pRecTdCha.CreateInstance(_uuidof(Recordset)); pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = m_pConnection; try { szSql.Empty(); szSql.Format(_T("insert into tdchannel(TDID,CHnumber,AR) values(%u,%d,%d)"), dwScID, this->m_iChNum, this->m_pMedium->m_iAR); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecTdCha->Open(_T("select max(ID) as ID from tdchannel"), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecTdCha->GetRecordCount()) { this->m_dwID = (int)pRecTdCha->GetCollect(_T("ID")).ulVal; } pRecTdCha->Close(); iTdRecIndex = (int)VAL_ZERO; while (iTdRecIndex < m_tdRecArray.GetSize()) { pRsp2DTdRecord = NULL; pRsp2DTdRecord = (CRsp2DTdRecord*)m_tdRecArray.GetAt(iTdRecIndex); pRsp2DTdRecord->SaveData(m_dwID); iTdRecIndex++; } } catch(_com_error e) { throw e; return FALSE; } return TRUE; } BOOL CTdChannel::SaveRspCETdData(DWORD dwScID) { CRspCETdRecord* pRspCETdRecord = NULL; _RecordsetPtr pRecTdCha; _CommandPtr pCmdIns; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; pRecTdCha.CreateInstance(_uuidof(Recordset)); pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = m_pConnection; try { szSql.Empty(); szSql.Format(_T("insert into tdchannel(TDID,CHnumber,AR) values(%u,%d,%d)"), dwScID, this->m_iChNum, this->m_pMedium->m_iAR); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecTdCha->Open(_T("select max(ID) as ID from tdchannel"), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecTdCha->GetRecordCount()) { this->m_dwID = (int)pRecTdCha->GetCollect(_T("ID")).ulVal; } pRecTdCha->Close(); iTdRecIndex = (int)VAL_ZERO; while (iTdRecIndex < m_tdRecArray.GetSize()) { pRspCETdRecord = NULL; pRspCETdRecord = (CRspCETdRecord*)m_tdRecArray.GetAt(iTdRecIndex); pRspCETdRecord->SaveData(m_dwID); iTdRecIndex++; } } catch(_com_error e) { throw e; return FALSE; } return TRUE; } BOOL CTdChannel::LoadRsp3DTdData() { CRsp3DTdRecord* pRsp3DTdRecord = NULL; _RecordsetPtr pRecTdCon; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; if ((int)VAL_ZERO == this->m_tdRecArray.GetSize()) { pRecTdCon.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,C1,C2,P1,P2,N,K,I,V,R0,SP,bUse from td3dcon where TCHID = %u"), this->m_dwID); pRecTdCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecTdCon->adoEOF) { if (pRecTdCon->GetCollect(_T("bUse")).boolVal != 0)//0为access数据库中的false { pRsp3DTdRecord = new CRsp3DTdRecord(this->m_dwID, this->m_pConnection); pRsp3DTdRecord->m_iTsn = (int)pRecTdCon->GetCollect(_T("TSN")).lVal; pRsp3DTdRecord->m_iC1 = (int)pRecTdCon->GetCollect(_T("C1")).iVal; pRsp3DTdRecord->m_iC2 = (int)pRecTdCon->GetCollect(_T("C2")).iVal; pRsp3DTdRecord->m_iP1 = (int)pRecTdCon->GetCollect(_T("P1")).iVal; pRsp3DTdRecord->m_iP2 = (int)pRecTdCon->GetCollect(_T("P2")).iVal; pRsp3DTdRecord->m_fK = (float)pRecTdCon->GetCollect(_T("K")).fltVal; pRsp3DTdRecord->m_iN = (int)pRecTdCon->GetCollect(_T("N")).iVal; pRsp3DTdRecord->m_fR0 = (float)pRecTdCon->GetCollect(_T("R0")).fltVal; pRsp3DTdRecord->m_fI = (float)pRecTdCon->GetCollect(_T("I")).fltVal; pRsp3DTdRecord->m_fV = (float)pRecTdCon->GetCollect(_T("V")).fltVal; pRsp3DTdRecord->m_fSP = (float)pRecTdCon->GetCollect(_T("SP")).fltVal; pRsp3DTdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); pRsp3DTdRecord->m_recPtArea.SetRectEmpty(); pRsp3DTdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pRsp3DTdRecord->m_iC1, pRsp3DTdRecord->m_iC2, pRsp3DTdRecord->m_iP1, pRsp3DTdRecord->m_iP2); pRsp3DTdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pRsp3DTdRecord->m_iC1, pRsp3DTdRecord->m_iC2, pRsp3DTdRecord->m_iP1, pRsp3DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pRsp3DTdRecord); } pRecTdCon->MoveNext(); } pRecTdCon->Close(); } return TRUE; } BOOL CTdChannel::LoadRsp2DTdData() { CRsp2DTdRecord* pRsp2DTdRecord = NULL; _RecordsetPtr pRecTdCon; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; //added by lsq 20160506 //初始化最大和最小的RO值 m_fMaxR0 = m_fMinR0 = (float)VAL_ZERO; //////////////////////////end//////////////////////////////////////////////// if ((int)VAL_ZERO == this->m_tdRecArray.GetSize()) { pRecTdCon.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,C1,C2,P1,P2,N,K,I,V,R0,SP,bUse from td2dcon where TCHID = %u"), this->m_dwID); pRecTdCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecTdCon->adoEOF) { if (pRecTdCon->GetCollect(_T("bUse")).boolVal != 0)//0为access数据库中的false { pRsp2DTdRecord = new CRsp2DTdRecord(this->m_dwID, this->m_pConnection); if (pRsp2DTdRecord == NULL) { ASSERT(pRsp2DTdRecord != NULL); continue; } pRsp2DTdRecord->m_iTsn = (int)pRecTdCon->GetCollect(_T("TSN")).lVal; pRsp2DTdRecord->m_iC1 = (int)pRecTdCon->GetCollect(_T("C1")).iVal; pRsp2DTdRecord->m_iC2 = (int)pRecTdCon->GetCollect(_T("C2")).iVal; pRsp2DTdRecord->m_iP1 = (int)pRecTdCon->GetCollect(_T("P1")).iVal; pRsp2DTdRecord->m_iP2 = (int)pRecTdCon->GetCollect(_T("P2")).iVal; pRsp2DTdRecord->m_fK = (float)pRecTdCon->GetCollect(_T("K")).fltVal; pRsp2DTdRecord->m_iN = (int)pRecTdCon->GetCollect(_T("N")).iVal; pRsp2DTdRecord->m_fR0 = (float)pRecTdCon->GetCollect(_T("R0")).fltVal; pRsp2DTdRecord->m_fI = (float)pRecTdCon->GetCollect(_T("I")).fltVal; pRsp2DTdRecord->m_fV = (float)pRecTdCon->GetCollect(_T("V")).fltVal; pRsp2DTdRecord->m_fSP = (float)pRecTdCon->GetCollect(_T("SP")).fltVal; ////////////////////////////////added by lsq 20160506////////////////////////////////////////// //在这里是为了在取数据库的过程中就直接得到RO的最大值和最小值 SetMaxR0AndMinR0(pRsp2DTdRecord->m_fR0); ////////////////////////////////////////////////////////////////////////// pRsp2DTdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); pRsp2DTdRecord->m_recPtArea.SetRectEmpty(); if (m_pMedium == NULL) { ASSERT(m_pMedium != NULL); if (pRsp2DTdRecord) { delete pRsp2DTdRecord; pRsp2DTdRecord = NULL; } continue; } pRsp2DTdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pRsp2DTdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); pRsp2DTdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pRsp2DTdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pRsp2DTdRecord); } pRecTdCon->MoveNext(); } pRecTdCon->Close(); } return TRUE; } BOOL CTdChannel::LoadRspCETdData() { CRspCETdRecord* pRspCETdRecord = NULL; _RecordsetPtr pRecTdCon; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; if ((int)VAL_ZERO == this->m_tdRecArray.GetSize()) { pRecTdCon.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,a,b,x,y,N,K,I,V,R0,SP,bUse,dt from td1dcon where TCHID = %u"), this->m_dwID); pRecTdCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecTdCon->adoEOF) { if (pRecTdCon->GetCollect(_T("bUse")).boolVal != 0)//0为access数据库中的false { pRspCETdRecord = new CRspCETdRecord(this->m_dwID, this->m_pConnection); pRspCETdRecord->m_iTsn = (int)pRecTdCon->GetCollect(_T("TSN")).lVal; pRspCETdRecord->m_fA = (float)pRecTdCon->GetCollect(_T("a")).fltVal; pRspCETdRecord->m_fB = (float)pRecTdCon->GetCollect(_T("b")).fltVal; pRspCETdRecord->m_fX = (float)pRecTdCon->GetCollect(_T("x")).fltVal; pRspCETdRecord->m_fY = (float)pRecTdCon->GetCollect(_T("y")).fltVal; pRspCETdRecord->m_fK = (float)pRecTdCon->GetCollect(_T("K")).fltVal; pRspCETdRecord->m_iN = (int)pRecTdCon->GetCollect(_T("N")).iVal; pRspCETdRecord->m_fR0 = (float)pRecTdCon->GetCollect(_T("R0")).fltVal; pRspCETdRecord->m_fI = (float)pRecTdCon->GetCollect(_T("I")).fltVal; pRspCETdRecord->m_fV = (float)pRecTdCon->GetCollect(_T("V")).fltVal; pRspCETdRecord->m_fSP = (float)pRecTdCon->GetCollect(_T("SP")).fltVal; pRspCETdRecord->m_Datetime = (VT_NULL == pRecTdCon->GetCollect(_T("dt")).vt) ? _T("") : (LPCTSTR)(_bstr_t)pRecTdCon->GetCollect(_T("dt")); pRspCETdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); pRspCETdRecord->m_recPtArea.SetRectEmpty(); pRspCETdRecord->m_fDepth = this->m_pMedium->CalculateDepth(pRspCETdRecord->m_fA); if ((((float)VAL_ZERO == this->m_fMaxR0) || (pRspCETdRecord->m_fR0 > this->m_fMaxR0)) && ((float)VAL_ZERO != pRspCETdRecord->m_fR0)) { this->m_fMaxR0 = pRspCETdRecord->m_fR0; } if ((((float)VAL_ZERO == this->m_fMinR0) || (pRspCETdRecord->m_fR0 < this->m_fMinR0)) && ((float)VAL_ZERO != pRspCETdRecord->m_fR0)) { this->m_fMinR0 = pRspCETdRecord->m_fR0; } if ((((float)VAL_ZERO == this->m_fMaxDepth) || (pRspCETdRecord->m_fDepth > this->m_fMaxDepth)) && ((float)VAL_ZERO != pRspCETdRecord->m_fDepth)) { this->m_fMaxDepth = pRspCETdRecord->m_fDepth; } // pRspCETdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pRsp2DTdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); // pRspCETdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pRsp2DTdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pRspCETdRecord); } pRecTdCon->MoveNext(); } pRecTdCon->Close(); } return TRUE; } BOOL CTdChannel::LoadIpsp3DTdData() { CIpsp3DTdRecord* pIpsp3DTdRecord = NULL; _RecordsetPtr pRecTdCon; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; if ((int)VAL_ZERO == this->m_tdRecArray.GetSize()) { pRecTdCon.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,C1,C2,P1,P2,N,K,I,V,R0,SP,bUse from td3dcon where TCHID = %u"), this->m_dwID); pRecTdCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecTdCon->adoEOF) { if (pRecTdCon->GetCollect(_T("bUse")).boolVal != 0)//0为access数据库中的false { pIpsp3DTdRecord = new CIpsp3DTdRecord(this->m_dwID, this->m_pConnection); pIpsp3DTdRecord->m_iTsn = (int)pRecTdCon->GetCollect(_T("TSN")).lVal; pIpsp3DTdRecord->m_iC1 = (int)pRecTdCon->GetCollect(_T("C1")).iVal; pIpsp3DTdRecord->m_iC2 = (int)pRecTdCon->GetCollect(_T("C2")).iVal; pIpsp3DTdRecord->m_iP1 = (int)pRecTdCon->GetCollect(_T("P1")).iVal; pIpsp3DTdRecord->m_iP2 = (int)pRecTdCon->GetCollect(_T("P2")).iVal; pIpsp3DTdRecord->m_fK = (float)pRecTdCon->GetCollect(_T("K")).fltVal; pIpsp3DTdRecord->m_iN = (int)pRecTdCon->GetCollect(_T("N")).iVal; pIpsp3DTdRecord->m_fR0 = (float)pRecTdCon->GetCollect(_T("R0")).fltVal; pIpsp3DTdRecord->m_fI = (float)pRecTdCon->GetCollect(_T("I")).fltVal; pIpsp3DTdRecord->m_fV = (float)pRecTdCon->GetCollect(_T("V")).fltVal; pIpsp3DTdRecord->m_fSP = (float)pRecTdCon->GetCollect(_T("SP")).fltVal; pIpsp3DTdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); pIpsp3DTdRecord->m_recPtArea.SetRectEmpty(); pIpsp3DTdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pIpsp3DTdRecord->m_iC1, pIpsp3DTdRecord->m_iC2, pIpsp3DTdRecord->m_iP1, pIpsp3DTdRecord->m_iP2); pIpsp3DTdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pIpsp3DTdRecord->m_iC1, pIpsp3DTdRecord->m_iC2, pIpsp3DTdRecord->m_iP1, pIpsp3DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pIpsp3DTdRecord); } pRecTdCon->MoveNext(); } pRecTdCon->Close(); } return TRUE; } BOOL CTdChannel::LoadIpsp2DTdData() { CIpsp2DTdRecord* pIpsp2DTdRecord = NULL; _RecordsetPtr pRecTdCon; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; if ((int)VAL_ZERO == this->m_tdRecArray.GetSize()) { pRecTdCon.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,C1,C2,P1,P2,N,K,I,V,R0,SP,bUse from td2dcon where TCHID = %u"), this->m_dwID); pRecTdCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecTdCon->adoEOF) { if (pRecTdCon->GetCollect(_T("bUse")).boolVal != 0)//0为access数据库中的false { pIpsp2DTdRecord = new CIpsp2DTdRecord(this->m_dwID, this->m_pConnection); pIpsp2DTdRecord->m_iTsn = (int)pRecTdCon->GetCollect(_T("TSN")).lVal; pIpsp2DTdRecord->m_iC1 = (int)pRecTdCon->GetCollect(_T("C1")).iVal; pIpsp2DTdRecord->m_iC2 = (int)pRecTdCon->GetCollect(_T("C2")).iVal; pIpsp2DTdRecord->m_iP1 = (int)pRecTdCon->GetCollect(_T("P1")).iVal; pIpsp2DTdRecord->m_iP2 = (int)pRecTdCon->GetCollect(_T("P2")).iVal; pIpsp2DTdRecord->m_fK = (float)pRecTdCon->GetCollect(_T("K")).fltVal; pIpsp2DTdRecord->m_iN = (int)pRecTdCon->GetCollect(_T("N")).iVal; pIpsp2DTdRecord->m_fR0 = (float)pRecTdCon->GetCollect(_T("R0")).fltVal; pIpsp2DTdRecord->m_fI = (float)pRecTdCon->GetCollect(_T("I")).fltVal; pIpsp2DTdRecord->m_fV = (float)pRecTdCon->GetCollect(_T("V")).fltVal; pIpsp2DTdRecord->m_fSP = (float)pRecTdCon->GetCollect(_T("SP")).fltVal; pIpsp2DTdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); pIpsp2DTdRecord->m_recPtArea.SetRectEmpty(); pIpsp2DTdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pIpsp2DTdRecord->m_iC1, pIpsp2DTdRecord->m_iC2, pIpsp2DTdRecord->m_iP1, pIpsp2DTdRecord->m_iP2); pIpsp2DTdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pIpsp2DTdRecord->m_iC1, pIpsp2DTdRecord->m_iC2, pIpsp2DTdRecord->m_iP1, pIpsp2DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pIpsp2DTdRecord); } pRecTdCon->MoveNext(); } pRecTdCon->Close(); } return TRUE; } BOOL CTdChannel::LoadIpspCETdData() { CIpspCETdRecord* pIpspCETdRecord = NULL; _RecordsetPtr pRecTdCon; CString szSql = _T(""); int iTdRecIndex = (int)VAL_ZERO; if ((int)VAL_ZERO == this->m_tdRecArray.GetSize()) { pRecTdCon.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,a,b,x,y,N,K,I,V,R0,SP,bUse from td1dcon where TCHID = %u"), this->m_dwID); pRecTdCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecTdCon->adoEOF) { if (pRecTdCon->GetCollect(_T("bUse")).boolVal != 0)//0为access数据库中的false { pIpspCETdRecord = new CIpspCETdRecord(this->m_dwID, this->m_pConnection); pIpspCETdRecord->m_iTsn = (int)pRecTdCon->GetCollect(_T("TSN")).lVal; pIpspCETdRecord->m_fA = (float)pRecTdCon->GetCollect(_T("a")).fltVal; pIpspCETdRecord->m_fB = (float)pRecTdCon->GetCollect(_T("b")).fltVal; pIpspCETdRecord->m_fX = (float)pRecTdCon->GetCollect(_T("x")).fltVal; pIpspCETdRecord->m_fY = (float)pRecTdCon->GetCollect(_T("y")).fltVal; pIpspCETdRecord->m_fK = (float)pRecTdCon->GetCollect(_T("K")).fltVal; pIpspCETdRecord->m_iN = (int)pRecTdCon->GetCollect(_T("N")).iVal; pIpspCETdRecord->m_fR0 = (float)pRecTdCon->GetCollect(_T("R0")).fltVal; pIpspCETdRecord->m_fI = (float)pRecTdCon->GetCollect(_T("I")).fltVal; pIpspCETdRecord->m_fV = (float)pRecTdCon->GetCollect(_T("V")).fltVal; pIpspCETdRecord->m_fSP = (float)pRecTdCon->GetCollect(_T("SP")).fltVal; pIpspCETdRecord->m_colorREF = RGB(0xFF,0xFF,0xFF); pIpspCETdRecord->m_recPtArea.SetRectEmpty(); pIpspCETdRecord->m_fDepth = this->m_pMedium->CalculateDepth(pIpspCETdRecord->m_fA); if ((((float)VAL_ZERO == this->m_fMaxR0) || (pIpspCETdRecord->m_fR0 > this->m_fMaxR0)) && ((float)VAL_ZERO != pIpspCETdRecord->m_fR0)) { this->m_fMaxR0 = pIpspCETdRecord->m_fR0; } if ((((float)VAL_ZERO == this->m_fMinR0) || (pIpspCETdRecord->m_fR0 < this->m_fMinR0)) && ((float)VAL_ZERO != pIpspCETdRecord->m_fR0)) { this->m_fMinR0 = pIpspCETdRecord->m_fR0; } if ((((float)VAL_ZERO == this->m_fMaxDepth) || (pIpspCETdRecord->m_fDepth > this->m_fMaxDepth)) && ((float)VAL_ZERO != pIpspCETdRecord->m_fDepth)) { this->m_fMaxDepth = pIpspCETdRecord->m_fDepth; } // pRspCETdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pRsp2DTdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); // pRspCETdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pRsp2DTdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pIpspCETdRecord); } pRecTdCon->MoveNext(); } pRecTdCon->Close(); } return TRUE; } BOOL CTdChannel::LoadCEScriptFromDB() { _RecordsetPtr pRecCh = NULL; _RecordsetPtr pRecSptCE = NULL; CString szSql = _T(""); CRspCETdRecord* pRspCETdRecord = NULL; DWORD dwChID = (DWORD)VAL_ZERO; pRecCh.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select ID from channel where SCID = %u and CHnumber = %d"), m_dwScID, m_iChNum); pRecCh->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCh->GetRecordCount()) { dwChID = (DWORD)pRecCh->GetCollect(_T("ID")).ulVal; } pRecCh->Close(); pRecSptCE.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TSN,a,b,x,y,K,N from Script1d where CHID = %u order by TSN"), dwChID); pRecSptCE->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); this->m_tdRecArray.RemoveAll(); while ((short)VAL_ZERO == pRecSptCE->adoEOF) { pRspCETdRecord = new CRspCETdRecord(this->m_dwID, this->m_pConnection); pRspCETdRecord->m_iTsn = (int)pRecSptCE->GetCollect(_T("TSN")).lVal; pRspCETdRecord->m_fA = (float)pRecSptCE->GetCollect(_T("a")).fltVal; pRspCETdRecord->m_fB = (float)pRecSptCE->GetCollect(_T("b")).fltVal; pRspCETdRecord->m_fX = (float)pRecSptCE->GetCollect(_T("x")).fltVal; pRspCETdRecord->m_fY = (float)pRecSptCE->GetCollect(_T("y")).fltVal; pRspCETdRecord->m_fK = (float)pRecSptCE->GetCollect(_T("K")).fltVal; pRspCETdRecord->m_iN = (int)pRecSptCE->GetCollect(_T("N")).iVal; pRspCETdRecord->m_fR0 = (float)VAL_ZERO; pRspCETdRecord->m_fI = (float)VAL_ZERO; pRspCETdRecord->m_fV = (float)VAL_ZERO; pRspCETdRecord->m_colorREF = RGB(0xFF, 0xFF, 0xFF); pRspCETdRecord->m_recPtArea.SetRectEmpty(); pRspCETdRecord->m_fDepth = ((CMediumQ*)this->m_pMedium)->CalculateDepth(pRspCETdRecord->m_fA, this->m_fDepthFactor); // pRspCETdRecord->m_fLevel // pRspCETdRecord->m_iLevel = this->m_pMedium->GenSptRecLevel(pRspCETdRecord->m_iC1, pRspCETdRecord->m_iC2, pRspCETdRecord->m_iP1, pRspCETdRecord->m_iP2); // pRspCETdRecord->m_iPosInLevel = this->m_pMedium->GenSptRecPosInLevel(pRspCETdRecord->m_iC1, pRsp2DTdRecord->m_iC2, pRsp2DTdRecord->m_iP1, pRsp2DTdRecord->m_iP2); this->m_tdRecArray.Add((void*)pRspCETdRecord); pRecSptCE->MoveNext(); } pRecSptCE->Close(); return TRUE; } void CTdChannel::SetColorToTd() { int iIndex = (int)VAL_ZERO; CRsp2DTdRecord* pRsp2DTdRecord = NULL; // this->m_fMaxR0 = 0.0; // this->m_fMinR0 = 0.0; while (iIndex < m_tdRecArray.GetSize()) { pRsp2DTdRecord = NULL; pRsp2DTdRecord = (CRsp2DTdRecord*)m_tdRecArray.GetAt(iIndex); SetColorToTdRec(pRsp2DTdRecord); iIndex++; } } CTdRecord* CTdChannel::GetTdRecord(int iTSN) { CTdRecord* pTdRecord = NULL; int iIndex = (int)VAL_ZERO; if ((int)VAL_ZERO != this->m_tdRecArray.GetSize()) { do { pTdRecord = (CTdRecord*)this->m_tdRecArray.GetAt(iIndex); if ((this->m_dwID == pTdRecord->m_dwChID) && (pTdRecord->m_iTsn == iTSN)) { return pTdRecord; } iIndex++; } while (iIndex <= this->m_tdRecArray.GetUpperBound()); } return NULL; }