123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- #pragma once
- #include "stdafx.h"
- #include "IncADataDB.h"
- #include "IncADataTable.h"
- namespace OTSSQLITE
- {
- CIncADataDB::CIncADataDB(CDBStoreBasePtr a_datastore)
- {
- m_tableInfo.reset(new CIncADataTable());
- myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo);
- }
- CIncADataDB::~CIncADataDB()
- {
- }
- BOOL CIncADataDB::UpdataAIncA(const COTSParticlePtr a_pParticle)
- {
- if (!Init())
- {
- ASSERT(FALSE);
- return FALSE;
- }
- ASSERT(a_pParticle);
- if (!a_pParticle)
- {
- return FALSE;
- }
- auto tableInfoPtr = GetTableInfo();
- ASSERT(tableInfoPtr);
- if (!tableInfoPtr)
- {
- return FALSE;
- }
- auto datastorePtr = GetDatastore();
- ASSERT(datastorePtr);
- if (!datastorePtr)
- {
- return FALSE;
- }
- CString sSQLCommand = "Update IncAData set AveGray = %d,Area = %f,TypeID=%d where FieldID = %d and ParticleId = %d ";
- sSQLCommand.Format(sSQLCommand,
- a_pParticle->GetAveGray(),
- a_pParticle->GetActualArea(),
- a_pParticle->GetType(),
- a_pParticle->GetFieldId(),
- a_pParticle->GetParticleId());
- if (!datastorePtr->RunCommand(sSQLCommand))
- {
- ASSERT(FALSE);
- return false;
- }
- return true;
- }
- BOOL CIncADataDB::SaveAIncA(const COTSParticlePtr a_pParticle, const CPosXrayPtr a_pXray,const CPoint fldPos)
- {
- if (!Init())
- {
- ASSERT(FALSE);
- return FALSE;
- }
- ASSERT(a_pParticle);
- if(!a_pParticle)
- {
- return FALSE;
- }
- ASSERT(a_pXray);
- if (!a_pXray)
- {
- return FALSE;
- }
- // safety check
- //1. particle should be agree with xray
- /*if ((!(a_pParticle->GetFieldId() == a_pXray->GetScanFieldId()))
- || (!(a_pParticle->GetAnalysisId() == a_pXray->GetIndex())))
- {
- return FALSE;
- }*/
-
- auto tableInfoPtr = GetTableInfo();
- ASSERT(tableInfoPtr);
- if (!tableInfoPtr)
- {
- return FALSE;
- }
-
- auto datastorePtr = GetDatastore();
- ASSERT(datastorePtr);
- if (!datastorePtr)
- {
- return FALSE;
- }
- CString sInsertFormat = tableInfoPtr->GetInsertCommandFormatString(TRUE);
- CString sSQLCommand;
- sSQLCommand.Format(sInsertFormat,
- a_pParticle->GetFieldId(),
- a_pParticle->GetAnalysisId(),
- a_pParticle->GetAveGray(),
- a_pParticle->GetParticleRect().left,
- a_pParticle->GetParticleRect().top,
- a_pParticle->GetParticleRect().Width(),
- a_pParticle->GetParticleRect().Height(),
- a_pParticle->GetActualArea(),
- a_pParticle->GetXRayPos().x,
- a_pParticle->GetXRayPos().y,
- a_pParticle->GetType(),
- (int)a_pXray->GetElementQuantifyData().size(),
- (int)(a_pParticle->GetFeature()->GetSegmentsList().size()),
- fldPos.x,
- fldPos.y,
- a_pParticle->GetParticleId(),
- a_pParticle->GetDMax(),
- a_pParticle->GetDMin(),
- a_pParticle->GetDPerp(),
- a_pParticle->GetPerimeter(),
- a_pParticle->GetOrientation(),
- a_pParticle->GetDInscr(),
- a_pParticle->GetDMean(),
- a_pParticle->GetDElong(),
- a_pParticle->GetFeretDiameter(),
- a_pParticle->GetClassifyName().c_str(),
- a_pParticle->GetColor().c_str()
- );
- if (!datastorePtr->RunCommand(sSQLCommand))
- {
- LogErrorTrace(__FILE__, __LINE__, _T("Insert inclusion data(%d:%d:%d:%d:%d:%d:%d:%f:%d:%d:%d:%d:%s:%s:%s:%s:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f:%f) failed: %s command error"),
- a_pParticle->GetFieldId(),
- a_pParticle->GetAnalysisId(),
- a_pParticle->GetAveGray(),
- a_pParticle->GetParticleRect().left,
- a_pParticle->GetParticleRect().top,
- a_pParticle->GetParticleRect().Width(),
- a_pParticle->GetParticleRect().Height(),
- a_pParticle->GetActualArea(),
- a_pParticle->GetXRayPos().x,
- a_pParticle->GetXRayPos().y,
- a_pParticle->GetType(),
- (int)a_pXray->GetElementQuantifyData().size(),
- (int)(a_pParticle->GetFeature()->GetSegmentsList().size()),
- fldPos.x,
- fldPos.y,
- a_pParticle->GetParticleId(),
- a_pParticle->GetDMax(),
- a_pParticle->GetDMin(),
- a_pParticle->GetDPerp(),
- a_pParticle->GetPerimeter(),
- a_pParticle->GetOrientation(),
- a_pParticle->GetDInscr(),
- a_pParticle->GetDMean(),
- a_pParticle->GetDElong(),
- a_pParticle->GetFeretDiameter(),
- a_pParticle->GetClassifyName(),
- a_pParticle->GetColor(),
- sSQLCommand);
- ASSERT(FALSE);
- return FALSE;
- }
- return TRUE;
- }
- CDBTableBasePtr CIncADataDB::GetTableInfo()
- {
- /* if (!m_tableInfo)
- {
- m_tableInfo.reset(new CIncADataTable);
- }*/
- return m_tableInfo;
- }
-
- CDBQueryBasePtr CIncADataDB::GetQueryById(const long a_nXrayId, const long a_nFieldId)
- {
- CDBQueryBasePtr query;
- auto datastorePtr = GetDatastore();
- ASSERT(datastorePtr);
- if (!datastorePtr)
- {
- return query;
- }
- auto tableInfoPtr = GetTableInfo();
- ASSERT(tableInfoPtr);
- if (!tableInfoPtr)
- {
- return query;
- }
- CString sXrayIdColumnName = tableInfoPtr->GetColumnName((int)CIncADataTable::ColumnID::N_XRAY_ID - (int)CIncADataTable::ColumnID::MIN);
- CString sFieldIdColumnName = tableInfoPtr->GetColumnName((int)CIncADataTable::ColumnID::N_FIELD_ID - (int)CIncADataTable::ColumnID::MIN);
- CString sSQLCommand;
- sSQLCommand.Format(_T("SELECT * FROM \'%s\' WHERE %s = %d AND %s = %d;"),
- (LPCTSTR)tableInfoPtr->GetTableName(),
- (LPCTSTR)sFieldIdColumnName,
- a_nFieldId,
- (LPCTSTR)sXrayIdColumnName,
- a_nXrayId);
- query = datastorePtr->QueryByCommand(sSQLCommand);
- ASSERT(query);
- if (!query || !query->IsValid())
- {
- LogErrorTrace(__FILE__, __LINE__, _T("Invalid quary command (%s)."), (LPCTSTR)sSQLCommand);
- ASSERT(FALSE);
- return (CDBQueryBasePtr());
- }
- // do the table related valid checking
- if (query->GetColCount() != GetTableInfo()->GetColumnCount())
- {
- LogErrorTrace(__FILE__, __LINE__, _T("query col num value is %d, but not %d"), query->GetColCount(), GetTableInfo()->GetColumnCount());
- ASSERT(FALSE);
- return (CDBQueryBasePtr());
- }
- return query;
- }
- CDBQueryBasePtr CIncADataDB::GetQueryOfAllRecord()
- {
- CDBQueryBasePtr query;
- auto datastorePtr = GetDatastore();
- ASSERT(datastorePtr);
- if (!datastorePtr)
- {
- return query;
- }
- auto tableInfoPtr = GetTableInfo();
- ASSERT(tableInfoPtr);
- if (!tableInfoPtr)
- {
- return query;
- }
-
- CString sSQLCommand;
- sSQLCommand.Format(_T("SELECT * FROM \'%s\';"),
- (LPCTSTR)tableInfoPtr->GetTableName());
-
- query = datastorePtr->QueryByCommand(sSQLCommand);
- ASSERT(query);
- if (!query || !query->IsValid())
- {
- LogErrorTrace(__FILE__, __LINE__, _T("Invalid quary command (%s)."), (LPCTSTR)sSQLCommand);
- ASSERT(FALSE);
- return (CDBQueryBasePtr());
- }
- // do the table related valid checking
- if (query->GetColCount() != GetTableInfo()->GetColumnCount())
- {
- LogErrorTrace(__FILE__, __LINE__, _T("query col num value is %d, but not %d"), query->GetColCount(), GetTableInfo()->GetColumnCount());
- ASSERT(FALSE);
- return (CDBQueryBasePtr());
- }
- return query;
- }
- bool CIncADataDB::GetAllFieldsRecord(COTSFieldDataList& allFlds)
- {
- auto allRecords = this->GetQueryOfAllRecord();
- std::map<int, COTSFieldDataPtr> mapFld;
- while (!allRecords->IsEOF())
- {
- int curFldId = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_FIELD_ID);
- /*auto itr= std::find_if(allFlds.begin(), allFlds.end(), [curFldId](COTSFieldDataPtr curFld)
- {
- return curFldId == curFld->GetId();
- });*/
- auto itr = mapFld.find(curFldId);//map's find method would be much more faster than find_if.
- if (itr == mapFld.end())
- {
- COTSFieldDataPtr fld = COTSFieldDataPtr(new COTSFieldData());
-
- fld->SetId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_FIELD_ID));
- CPoint fldPos;
- fldPos.x = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_FldPosX);
- fldPos.y = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_FldPosY);
- fld->SetPosition(fldPos);
-
- COTSParticleList& ps=fld->GetParticleList();
- COTSParticlePtr p = COTSParticlePtr(new COTSParticle());
- p->SetFieldId(fld->GetId());
- p->SetSEMPos(fldPos);
- double dferet = allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DFERET);
- p->SetFeretDiameter(dferet);
- p->SetParticleId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_PARTICLE_ID));
- p->SetType((OTS_PARTICLE_TYPE)allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_INCA_ID));
- int top = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_TOP);
- int left= allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_LEFT);
- int width= allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_WIDTH);
- int height = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_HEIGHT);
- CRect r = CRect(left, top, left + width, top + height);
- p->SetParticleRect(r);
- p->SetAveGray(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_AVE_GRAY));
- p->SetActualArea(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_AREA));
- int x = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_POS_X);
- int y= allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_POS_Y);
- p->SetXRayPos(CPoint(x,y));
- p->SetAnalysisId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_XRAY_ID));
- p->SetDMax(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMAX));
- p->SetDMin(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMIN));
- p->SetDPerp(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DPERP));
- p->SetDInscr(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DINSCR));
- p->SetDMean(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMEAN));
- p->SetDElong(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DELONG));
- p->SetPerimeter(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_PERIMETER));
- p->SetOrientation(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_ORIENTATION));
- p->SetClassifyName(allRecords->GetColStringValue((int)CIncADataTable::ColumnID::S_NAME).GetBuffer());
- p->SetColor(allRecords->GetColStringValue((int)CIncADataTable::ColumnID::S_COLOR).GetBuffer());
- ps.push_back(p);
- allFlds.push_back(fld);
- mapFld[curFldId] = fld;
- }
- else
- {
- COTSFieldDataPtr& fld = itr->second ;
- COTSParticleList& ps = fld->GetParticleList();
- COTSParticlePtr p = COTSParticlePtr(new COTSParticle());
- p->SetFieldId(fld->GetId());
- p->SetSEMPos(fld->GetPosition());
- double dferet = allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DFERET);
- p->SetFeretDiameter(dferet);
- p->SetParticleId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_PARTICLE_ID));
- p->SetType((OTS_PARTICLE_TYPE)allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_INCA_ID));
- int top = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_TOP);
- int left = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_LEFT);
- int width = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_WIDTH);
- int height = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_RECT_HEIGHT);
- CRect r = CRect(left, top, left + width, top + height);
- p->SetParticleRect(r);
- p->SetAveGray(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_AVE_GRAY));
- p->SetActualArea(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_AREA));
- int x = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_POS_X);
- int y = allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_POS_Y);
- p->SetXRayPos(CPoint(x, y));
- p->SetAnalysisId(allRecords->GetColIntValue((int)CIncADataTable::ColumnID::N_XRAY_ID));
- p->SetDMax(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMAX));
- p->SetDMin(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMIN));
- p->SetDPerp(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DPERP));
- p->SetDInscr(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DINSCR));
- p->SetDMean(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DMEAN));
- p->SetDElong(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_DELONG));
- p->SetPerimeter(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_PERIMETER));
- p->SetOrientation(allRecords->GetColFloatValue((int)CIncADataTable::ColumnID::F_ORIENTATION));
- p->SetClassifyName(allRecords->GetColStringValue((int)CIncADataTable::ColumnID::S_NAME).GetBuffer());
- p->SetColor(allRecords->GetColStringValue((int)CIncADataTable::ColumnID::S_COLOR).GetBuffer());
- ps.push_back(p);
- }
- allRecords->NextRow();
- } ;
- allRecords->Close();
- return true;
- }
- BOOL CIncADataDB::Init(const BOOL a_bClean /*= FALSE*/)
- {
- return myDB->Init(a_bClean);
- }
- BOOL CIncADataDB::CreateTable(const BOOL a_bForce /*= FALSE*/)
- {
- return myDB->CreateTable(a_bForce);
- }
- BOOL CIncADataDB::DeleteTable()
- {
- return myDB->DeleteTable();
- }
- BOOL CIncADataDB::RemoveAllRows()
- {
- return myDB->RemoveAllRows();
- }
- BOOL CIncADataDB::IsDBExist()
- {
- return myDB->IsDBExist();
- }
- OTSSQLITE::CDBStoreBasePtr CIncADataDB::GetDatastore()
- {
- return myDB->GetDatastore();
- }
- OTSSQLITE::CDBQueryBasePtr CIncADataDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/)
- {
- return myDB->GetTableQuery(a_sOrderColumnName);
- }
- }
|