123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- // MsrResults.cpp : implementation file
- //
- #include "stdafx.h"
- #include "OTSData.h"
- #include "MsrResults.h"
- #include "otsdataconst.h"
- namespace OTSMODEL {
- using namespace OTSDATA;
- // CMsrResultItem
- // constructor
- CMsrResultItem::CMsrResultItem()
- {
- // initialization
- Init();
- }
- // copy constructor
- CMsrResultItem::CMsrResultItem(const CMsrResultItem& a_oSource)
- {
- // can't copy itself
- if (&a_oSource == this)
- {
- return;
- }
- // copy data over
- Duplicate(a_oSource);
- }
- // copy constructor
- CMsrResultItem::CMsrResultItem(CMsrResultItem* a_poSource)
- {
- // input check
- ASSERT(a_poSource);
- if (!a_poSource)
- {
- return;
- }
- // can't copy itself
- if (a_poSource == this)
- {
- return;
- }
- // copy data over
- Duplicate(*a_poSource);
- }
- // =operator
- CMsrResultItem& CMsrResultItem::operator=(const CMsrResultItem& a_oSource)
- {
- // cleanup
- Cleanup();
- // copy the class data over
- Duplicate(a_oSource);
- // return class
- return *this;
- }
- // destructor
- CMsrResultItem::~CMsrResultItem()
- {
- // cleanup
- Cleanup();
- }
- // ==operator
- BOOL CMsrResultItem::operator==(const CMsrResultItem& a_oSource)
- {
- return m_nTypeId == a_oSource.m_nTypeId &&
- m_nArea == a_oSource.m_nArea &&
- m_nNumber == a_oSource.m_nNumber;
- }
- // CMsrResultItem member functions
- // public
- // serialization
-
- void CMsrResultItem::Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode)
- {
- xmls::xInt xTypeId;
- xmls::xDouble xArea;
- xmls::xDWORD xNumber;
- xmls::Slo slo;
- slo.Register("TypeId", &xTypeId);
- slo.Register("Area", &xArea);
- slo.Register("Number", &xNumber);
- if (isStoring)
- {
- xTypeId = m_nTypeId;
- xArea = m_nArea;
- xNumber = m_nNumber;
- slo.Serialize(true, classDoc, rootNode);
- }
- else
- {
- slo.Serialize(false, classDoc, rootNode);
- m_nTypeId = xTypeId.value();
- m_nArea = xArea.value();
- m_nNumber = xNumber.value();
- }
- }
- // protected
- // cleanup
- void CMsrResultItem::Cleanup()
- {
- // need to do nothing at the moment
- }
- // initialization
- void CMsrResultItem::Init()
- {
- m_nTypeId = -1;
- m_nArea = 0;
- m_nNumber = 0;
- }
- // duplication
- void CMsrResultItem::Duplicate(const CMsrResultItem& a_oSource)
- {
- // initialization
- Init();
- // copy data over
- m_nTypeId = a_oSource.m_nTypeId;
- m_nArea = a_oSource.m_nArea;
- m_nNumber = a_oSource.m_nNumber;
- }
- // CMsrResults
-
- // constructor
- CMsrResults::CMsrResults()
- {
- // initialization
- Init();
- }
- // copy constructor
- CMsrResults::CMsrResults(const CMsrResults& a_oSource)
- {
- // can't copy itself
- if (&a_oSource == this)
- {
- return;
- }
- // copy data over
- Duplicate(a_oSource);
- }
- // copy constructor
- CMsrResults::CMsrResults(CMsrResults* a_poSource)
- {
- // can't copy itself
- if (a_poSource == this)
- {
- return;
- }
- // copy data over
- Duplicate(*a_poSource);
- }
- // =operator
- CMsrResults& CMsrResults::operator=(const CMsrResults& a_oSource)
- {
- // cleanup
- Cleanup();
- // copy the class data over
- Duplicate(a_oSource);
- // return class
- return *this;
- }
- // destructor
- CMsrResults::~CMsrResults()
- {
- // cleanup
- Cleanup();
- }
- // ==operator
- BOOL CMsrResults::operator==(const CMsrResults& a_oSource)
- {
- // return FASLE, if the two holes list are in different size
- int nSize = (int)m_listResultItems.size();
- if (nSize != (int)a_oSource.m_listResultItems.size())
- {
- return FALSE;
- }
- // return FALSE if any of the pare holes are different
- for (int i = 0; i < nSize; ++i)
- {
- if (!(*(m_listResultItems[i].get()) == *(a_oSource.m_listResultItems[i].get())))
- {
- return FALSE;
- }
- }
- // members check
- return ( ( abs(m_dRadio - a_oSource.m_dRadio) <MIN_DOUBLE_VALUE )&& (m_nMeasuredArea == a_oSource.m_nMeasuredArea));
- }
- // CMsrResults member functions
- // public
- // serialization
- void CMsrResults::Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode)
- {
- xmls::xDouble xdRadio;
- xmls::xDWORD xnMeasuredArea;
- xmls::Collection<CMsrResultItem> xResultItemlist;
- xmls::Slo slo;
- slo.Register("Ratio", &xdRadio);
- slo.Register("MeasuredArea", &xnMeasuredArea);
- slo.Register("ResultItems", &xResultItemlist);
-
- if (isStoring)
- {
- xdRadio = m_dRadio;
- xnMeasuredArea = m_nMeasuredArea;
- xResultItemlist.Clear();
- for (unsigned int i = 0; i < m_listResultItems.size(); i++)
- {
- xResultItemlist.addItem(m_listResultItems[i].get());
- }
-
- slo.Serialize(true, classDoc, rootNode);
- }
- else
- {
- slo.Serialize(false, classDoc, rootNode);
- m_dRadio = xdRadio.value();
- m_nMeasuredArea = xnMeasuredArea.value();
- m_listResultItems.clear();
- for (unsigned int i = 0; i < xResultItemlist.size(); i++)
- {
- m_listResultItems.push_back(CMsrResultItemPtr(xResultItemlist.getItem(i)));
- }
- }
- }
- // results item list
- void CMsrResults::SetResultItems(CMsrResultItemsList& a_listResultItems)
- {
- // set results item list
- m_listResultItems.clear();
- for (auto poResultItem : a_listResultItems)
- {
- CMsrResultItemPtr poResultItemNew(new CMsrResultItem(poResultItem.get()));
- m_listResultItems.push_back(poResultItemNew);
- }
- }
- DWORD CMsrResults::GetTotalParticleArea()
- {
- DWORD nArea = 0;
- for (auto poResultItem : m_listResultItems)
- {
- nArea += poResultItem->GetArea();
- }
- return nArea;
- }
- DWORD CMsrResults::GetTotalparticleIdentifyArea()
- {
- DWORD nArea = 0;
- for (auto poResultItem : m_listResultItems)
- {
- if (poResultItem->GetTypeId() > 7)
- {
- nArea += poResultItem->GetArea();
- }
- }
- return nArea;
- }
- DWORD CMsrResults::GetTotalParticleNumber()
- {
- DWORD nParticleNum = 0;
- for (auto poResultItem : m_listResultItems)
- {
- nParticleNum += poResultItem->GetNumber();
- }
- return nParticleNum;
- }
- // calculate display radio
- double CMsrResults::CalDisplayRadio()
- {
- double dDisplayRadio = 0;
- if (m_nMeasuredArea == 0)
- {
- return dDisplayRadio;
- }
- DWORD nTotalParticleArea = GetTotalParticleArea();
- dDisplayRadio = (double)nTotalParticleArea / (double)m_nMeasuredArea * m_dRadio;
- return dDisplayRadio;
- }
- // cumulate measure results
- void CMsrResults::CumulateMeasureResults(CMsrResultItemPtr a_poResultItem)
- {
- // input check
- ASSERT(a_poResultItem);
- if (!a_poResultItem)
- {
- return;
- }
- // find if same type item already in the list
- int nTypeId = a_poResultItem->GetTypeId();
- if (nTypeId == -1)
- {
- // invalid item
- return;
- }
- auto itr = std::find_if(m_listResultItems.begin(), m_listResultItems.end(), [nTypeId](CMsrResultItemPtr& poResultItem) { return poResultItem->GetTypeId() == nTypeId; });
- if (itr != m_listResultItems.end())
- {
- // same type item already in the list
- // get the item
- CMsrResultItemPtr poResultItem = *(itr);
- poResultItem->SetArea(poResultItem->GetArea() + a_poResultItem->GetArea());
- poResultItem->SetNumber(poResultItem->GetNumber() + a_poResultItem->GetNumber());
- // get out
- return;
- }
- else
- {
- m_listResultItems.push_back(a_poResultItem);
- }
- }
- void CMsrResults::CumulateMeasureResults(CMsrResultItemsList& a_listResultItems)
- {
- for (auto poResultItem : a_listResultItems)
- {
- CumulateMeasureResults(poResultItem);
- }
- }
- // protected
- // cleanup
- void CMsrResults::Cleanup()
- {
- // need to do nothing at the moment
- }
- // initialization
- void CMsrResults::Init()
- {
- m_dRadio = DEFAULT_RADIO;
- m_nMeasuredArea = 0;
- m_listResultItems.clear();
- }
- // duplication
- void CMsrResults::Duplicate(const CMsrResults& a_oSource)
- {
- // initialization
- Init();
- // copy data over
- m_dRadio = a_oSource.m_dRadio;
- m_nMeasuredArea = a_oSource.m_nMeasuredArea;
- for(auto poResultItem : a_oSource.m_listResultItems)
- {
- CMsrResultItemPtr poResultItem(new CMsrResultItem(poResultItem.get()));
- m_listResultItems.push_back(poResultItem);
- }
- }
- }
|