#pragma once #include "otsdataconst.h" #include "OTSFieldData.h" #include "CGBLevel.h" #include #include "GBParticle.h" namespace OTSGBCalculate { using namespace std; using namespace OTSDATA; class CGBFieldData : public COTSFieldData { public: CGBFieldData(); // constructor CGBFieldData(const CGBFieldData&); // copy constructor CGBFieldData(CGBFieldData*); // copy constructor CGBFieldData& operator=(const CGBFieldData&); // =operator BOOL operator==(const CGBFieldData&); // =operator virtual ~CGBFieldData(); // detractor // serialization virtual void Serialize(bool isStoring, tinyxml2::XMLDocument *classDoc, tinyxml2::XMLElement *rootNode); // id int GetFrameId() { return m_nFrameId; } void SetFrameId(int a_nFrameId) { m_nFrameId = a_nFrameId; } GB_GRADE_TYPE GetMyGrade(GB_LEVEL_TYPE type, GB_WIDTH_TYPE wide); // A level CGBLevelPtr GetALevel() { return m_pALevel; } // B level CGBLevelPtr GetBLevel() { return m_pBLevel; } // C level CGBLevelPtr GetCLevel() { return m_pCLevel; } // D level CGBLevelPtr GetDLevel() { return m_pDLevel; } // DS level CGBLevelPtr GetDSLevel() { return m_pDSLevel; } // D sulfide level CGBLevelPtr GetDSulfideLevel() { return m_pDSulfidLevel; } COTSParticlePtr FindAdjacentParticle(COTSParticlePtr p, COTSParticleList plist); // caculate Level //void CaculateLevel( OTSMODEL::GB_METHODE_TYPE a_nMethodType); COTSParticleList listAThinParticles; COTSParticleList listAWideParticles; COTSParticleList listASuperParticles; set listBThinParticles; set listBWideParticles; set listBSuperParticles; COTSParticleList listCThinParticles; COTSParticleList listCWideParticles; COTSParticleList listCSuperParticles; COTSParticleList listDThinParticles; COTSParticleList listDWideParticles; COTSParticleList listDSuperParticles; COTSParticleList listDSParticles; COTSParticleList listDSulfideThinParticles; COTSParticleList listDSulfideWideParticles; COTSParticleList listDSulfideSuperParticles; COTSFieldDataList myReleventOTSFlds; std::map mapAllParticles; std::vector allMyParticles; void CaculateLevelByMethod1(); // caculate Level by method 2 void CaculateLevelByMethod2(); void CaculateLevelASTM(); void CaculateLevelDIN(COTSParticleList listParticle); protected: // cleanup void Cleanup(); // initialization void Init(); // duplication void Duplicate(const CGBFieldData& a_oSource); // caculate Level by method 1 // caculate Level Width BOOL CaculateLevelThinWidth(COTSParticleList& a_listParticles, GB_LEVEL_TYPE a_nLevel); GB_WIDTH_TYPE CaculateLevelWidth(COTSParticlePtr Particle, GB_LEVEL_TYPE a_nLevel); BOOL CaculateLevelFatWidth(COTSParticleList& a_listParticles, GB_LEVEL_TYPE a_nLevel); BOOL CaculateSuper(COTSParticleList& a_listParticles, GB_LEVEL_TYPE a_nLevel); private: // id int m_nFrameId; // A level CGBLevelPtr m_pALevel; // B level CGBLevelPtr m_pBLevel; // C level CGBLevelPtr m_pCLevel; // D level CGBLevelPtr m_pDLevel; // DS level CGBLevelPtr m_pDSLevel; // DSulfide level CGBLevelPtr m_pDSulfidLevel; }; typedef std::shared_ptr __declspec(dllexport) CGBFieldDataPtr; typedef std::vector __declspec(dllexport) CGBFieldList; }